Tràn văn bản CSS: dấu chấm lửng; không làm việc?


368

Tôi không biết tại sao CSS đơn giản này không hoạt động ...

.app a {
  height: 18px;
  width: 140px;
  padding: 0;
  overflow: hidden;
  position: relative;
  margin: 0 5px 0 5px;
  text-align: center;
  text-decoration: none;
  text-overflow: ellipsis;
  white-space: nowrap;
  color: #000;
}
<div class="app">
  <a href="">Test Test Test Test Test Test</a>
</div>

Nên cắt bỏ khoảng "Thử nghiệm" thứ 4




FF only- nếu filterđược áp dụng, dấu chấm lửng sẽ không được hiển thị. lỗi đã mở
vsync

1
Tôi đã viết một bài về giải quyết các vấn đề với text-overflow: brainlessdeveloper.com/2017/07/29/why-wont-my-text-overflow
Fausto NA

1
trong trường hợp của tôi, loại bỏ hiển thị: flex khỏi phần tử được trợ giúp
Eduard

Câu trả lời:


909

text-overflow:ellipsis; chỉ hoạt động khi những điều sau là đúng:

  • Độ rộng của phần tử phải được giới hạn bằng px(pixel). Chiều rộng trong %(phần trăm) sẽ không hoạt động.
  • Các yếu tố phải có overflow:hiddenwhite-space:nowrapthiết lập.

Lý do bạn gặp vấn đề ở đây là vì yếu tố widthcủa bạn akhông bị hạn chế. Bạn có một widthcài đặt, nhưng vì phần tử được đặt thành display:inline(nghĩa là mặc định) nên nó bỏ qua nó và không có gì khác làm hạn chế chiều rộng của nó.

Bạn có thể khắc phục điều này bằng cách thực hiện một trong các cách sau:

  • Đặt thành phần thành display:inline-blockhoặc display:block(có thể là trước đây, nhưng phụ thuộc vào nhu cầu bố trí của bạn).
  • Đặt một trong các thành phần chứa của nó thành display:blockvà cung cấp cho phần tử đó cố định widthhoặc max-width.
  • Đặt phần tử thành float:lefthoặc float:right(có thể là trước đây, nhưng một lần nữa, hoặc sẽ có tác dụng tương tự như liên quan đến dấu chấm lửng).

Tôi đề nghị display:inline-block, vì điều này sẽ có tác động tài sản thế chấp tối thiểu đối với bố cục của bạn; nó hoạt động rất giống với display:inlinecái mà nó hiện đang sử dụng liên quan đến bố cục, nhưng cũng thoải mái thử nghiệm với các điểm khác; Tôi đã cố gắng cung cấp càng nhiều thông tin càng tốt để giúp bạn hiểu cách thức những thứ này tương tác với nhau; một phần lớn của sự hiểu biết CSS là về cách hiểu các phong cách khác nhau làm việc cùng nhau.

Đây là một đoạn mã với mã của bạn, display:inline-blockđược thêm vào, để cho thấy mức độ gần gũi của bạn.

.app a {
  height: 18px;
  width: 140px;
  padding: 0;
  overflow: hidden;
  position: relative;
  display: inline-block;
  margin: 0 5px 0 5px;
  text-align: center;
  text-decoration: none;
  text-overflow: ellipsis;
  white-space: nowrap;
  color: #000;
}
<div class="app">
  <a href="">Test Test Test Test Test Test</a>
</div>

Tài liệu tham khảo hữu ích:


12
Điều gì xảy ra nếu tôi không thể sử dụng chiều rộng được đặt do thiết kế đáp ứng?
SearchForKnowledge

5
Lưu ý rằng chiều rộng tối đa cũng hoạt động. Điều này giúp tôi vì tôi có một biểu tượng phải ôm phần cuối của văn bản bất kể độ rộng của nó. (Nếu không, biểu tượng sẽ nổi bên phải nếu văn bản không chiếm hết chiều rộng của nhịp)
Kevin

2
Lưu ý: white-space: nowrapthực sự không cần thiết. Chúng ta vẫn có thể nhìn thấy các hình elip ngay cả khi không có nó. Để biết nhiều dòng text-overflow, hãy xem SO
gfacless

24
Không chắc đây có phải là thay đổi gần đây hay không, nhưng trong Chrome 50 (beta), bạn không phải đặt chiều rộng thành giá trị px - "100%" cũng hoạt động. white-space: nowraplà bắt buộc mặc dù.
thdoan

13
Bạn không cần phải thiết lập một cố định nào widthcả. Tất cả bạn cần làm là thiết lập một white-space: nowrap;và nó hoạt động tốt.
adamj

37

Câu trả lời được chấp nhận là tuyệt vời. Tuy nhiên, bạn vẫn có thể sử dụng %chiều rộng và đạt được text-overflow: ellipsis. Giải pháp rất đơn giản:

display: inline-block; /* for em, a, span, etc (inline by default) */
text-overflow: ellipsis;
width: calc (80%); /* The trick is here! */

Dường như bất cứ khi nào bạn sử dụng calc, giá trị cuối cùng được hiển thị bằng pixel tuyệt đối, do đó sẽ chuyển đổi 80%thành một cái gì đó giống như 800pxcho một 1000pxthùng chứa băng thông. Do đó, thay vì sử dụng width: [YOUR PERCENT]%, sử dụng width: calc([YOUR PERCENT]%).


16

Vì vậy, nếu bạn gặp phải câu hỏi này vì bạn đang gặp khó khăn khi cố gắng để các dấu chấm lửng hoạt động bên trong một display: flexthùng chứa, hãy thử thêm min-width: 0vào thùng chứa ngoài cùng tràn ra cha mẹ của nó ngay cả khi bạn đã đặt overflow: hiddennó và xem cách nó hoạt động cho bạn.

Thêm chi tiết và một ví dụ hoạt động trên codepen này bởi aj-foster . Hoàn toàn làm được mẹo trong trường hợp của tôi.


2
Giải pháp tuyệt vời - đó cũng là người duy nhất được đăng ở đây hoạt động cho một position: stickyyếu tố trong một display: flexcontainer.
James Dinsdale

2
Tôi nghĩ rằng nó sẽ được bao gồm trong câu trả lời được lựa chọn. Nó giải quyết vấn đề của tôi. Cảm ơn!
j0nd0n7

1
Ngài là một thiên tài.
Nathan Osman

1
cảm ơn người đàn ông, đã cứu ngày
Ô

7

Cũng đảm bảo word-wrapđược đặt thành bình thường cho IE10 trở xuống.

Các tiêu chuẩn được tham chiếu dưới đây xác định hành vi của thuộc tính này là phụ thuộc vào cài đặt của thuộc tính "bọc văn bản". Tuy nhiên, cài đặt wordWrap luôn hiệu quả trong Windows Internet Explorer vì Internet Explorer không hỗ trợ thuộc tính "bao bọc văn bản".

Do đó, trong trường hợp của tôi, word-wrapđã được đặt thành từ ngắt (được kế thừa hoặc theo mặc định?) Gây ra text-overflowhoạt động trong FF và Chrome, nhưng không hoạt động trong IE.

thông tin ms về tài sản bọc từ


5

anchor, span... thẻ là các phần tử nội tuyến theo mặc định, Trong trường hợp thuộc tính phần tử nội tuyến widthkhông hoạt động. Vì vậy, bạn phải chuyển đổi yếu tố của bạn để một trong hai inline-blockhoặc block levelcác yếu tố


5

Bao gồm bốn dòng được viết sau khi thông tin cho dấu chấm lửng hoạt động

.app a
{
 color: #fff;
 font: bold 15px/18px Arial;
 height: 18px;
 margin: 0 5px 0 5px;
 padding: 0;
 position: relative;
 text-align: center;
 text-decoration: none;
 width: 140px;

 /* 
 Note: The Below 4 Lines are necessary for ellipsis to work.
 */

 display: block;/* Change it as per your requirement. */
 overflow: hidden;
 text-overflow: ellipsis;
 white-space: nowrap;
}



1

Trong bootstrap 4 , bạn có thể thêm một .text-truncatelớp để cắt bớt văn bản bằng dấu chấm lửng.

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<link href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" rel="stylesheet" />
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js"></script>

<!-- Inline level -->
<span class="d-inline-block text-truncate" style="max-width: 250px;">
  The quick brown fox jumps over the lazy dog.
</span>


1

Phải chứa

  text-overflow: ellipsis;
  white-space: nowrap;
  overflow: hidden;

PHẢI KHÔNG chứa

display: inline

Nên bao gồm

position: sticky


0

Tôi đã phải thực hiện một số mô tả hình elip dài (chỉ có một làn) trong khi phản ứng nhanh, vì vậy giải pháp của tôi là để cho văn bản được bọc (thay vì white-space: nowrap) và thay vì chiều rộng cố định tôi đã thêm chiều cao cố định:

span {
  display: inline-block;
  line-height: 1rem;
  height: 1rem;
  overflow: hidden;
  // OPTIONAL LINES
  width: 75%;
  background: green;
  //  white-space: normal; default
}
<span>
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Commodi quia quod reprehenderit saepe sit. Animi deleniti distinctio dolorum iste molestias reiciendis saepe. Ea eius ex, ipsam iusto laudantium natus obcaecati quas rem repellat temporibus! A alias at, atque deserunt dignissimos dolor earum, eligendi eveniet exercitationem natus non, odit sint sit tempore voluptate. Commodi culpa ex facere id minima nihil nulla omnis praesentium quasi quia quibusdam recusandae repellat sequi ullam, voluptates. Aliquam commodi debitis delectus magnam nulla, omnis sequi sint unde voluptas voluptatum. Adipisci aliquam deserunt dolor enim facilis libero, maxime molestias, nemo neque non nostrum placeat reprehenderit, rerum ullam vel? A atque autem consectetur cum, doloremque doloribus fugiat hic id iste nemo nesciunt officia quaerat quibusdam quidem quisquam similique sit tempora vel. Accusamus aspernatur at au
</span>



0

Tôi đã đối mặt với cùng một vấn đề và có vẻ như không có giải pháp nào ở trên hoạt động cho Safari. Đối với trình duyệt không phải safari, điều này hoạt động tốt:

display: block; /* or in-line block according to your requirement */
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;

Đối với Safari, đây là một trong những hoạt động cho tôi. Lưu ý rằng truy vấn phương tiện để kiểm tra xem trình duyệt có phải là Safari có thể thay đổi theo thời gian hay không, vì vậy chỉ cần sửa lại truy vấn phương tiện nếu nó không hoạt động với bạn. Với thuộc line-clamptính, cũng có thể có nhiều dòng trên web có dấu chấm lửng, xem tại đây .

// Media-query for Safari-only browser.
@media not all and (min-resolution: 0.001dpcm) {
  @media {
    -webkit-line-clamp: 1;
    -webkit-box-orient: vertical;
    display: -webkit-box;
    white-space: normal;
  }
}

0

https://stackoverflow.com/a/53784508/5626747

Không thể nhận xét do danh tiếng, vì vậy tôi đang đưa ra một câu trả lời khác:

Trong trường hợp này, bạn cũng sẽ phải xóa thuộc tính được đề xuất chung display: block;khỏi phần tử bạn đặt text-overflow: ellipsis;, hoặc nó sẽ bị cắt mà không có ... ở cuối.


-1

Viết những điều này trong quy tắc css của bạn.

display: block; /* or in-line block according to your requirement */
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;

Bạn cũng có thể xem qua điều này, jsfiddle.net/ManiAnand/5v6pfy9w
Mani Abi Anand

Nếu chiều rộng có thể được chỉ định không làm cho câu trả lời của tôi sai. Tất cả những gì bạn vừa thêm khối hiển thị trong câu trả lời của tôi, tôi đã viết một đoạn mã, không phải toàn bộ mã, vì vậy những thứ khác có thể được thêm vào nhưng không liên quan gì đến vấn đề !! Bạn có thể vui lòng xác định làm thế nào câu trả lời của tôi là không chính xác?
Siraj Alam

1
Chiều rộng cần phải được chỉ định cũng như màn hình. Nếu chiều rộng một tỷ lệ phần trăm hoặc không xác định và không được đặt thành đơn vị cứng, tràn sẽ không bị hạn chế và nó sẽ không hoạt động. Xem câu trả lời được chấp nhận.
jlesse

Chiều rộng đã được thiết lập bởi op. Tôi đã cho đoạn trích để thêm mã của anh ấy
Siraj Alam
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.