Tránh ngắt dòng giữa các phần tử html


109

Tôi có <td>phần tử này :

<td><i class="flag-bfh-ES"></i>&nbsp;+34&nbsp;666&nbsp;66&nbsp;66&nbsp;66</td>

Tôi đã hy vọng giữ nó thành một dòng, nhưng đây là những gì tôi nhận được:

nhập mô tả hình ảnh ở đây

Như bạn có thể thấy, cờ và số điện thoại nằm ở các dòng riêng biệt. Chúng &nbsp;đang hoạt động giữa các số của số điện thoại, nhưng không hoạt động giữa cờ và số điện thoại.

Làm cách nào để đảm bảo rằng không có ngắt dòng nào được giới thiệu bởi trình kết xuất?

Câu trả lời:


144

Có một số cách để ngăn ngắt dòng trong nội dung. Sử dụng &nbsp;là một cách và hoạt động tốt giữa các từ, nhưng sử dụng nó giữa một phần tử trống và một số văn bản không có tác dụng rõ ràng. Điều tương tự cũng sẽ áp dụng cho cách tiếp cận hợp lý hơn và dễ tiếp cận hơn, trong đó bạn sử dụng hình ảnh cho một biểu tượng.

Giải pháp thay thế mạnh mẽ nhất là sử dụng nobrđánh dấu, không tiêu chuẩn nhưng được hỗ trợ trên toàn cầu và hoạt động ngay cả khi CSS bị tắt:

<td><nobr><i class="flag-bfh-ES"></i> +34 666 66 66 66</nobr></td>

(Bạn có thể, nhưng không cần, sử dụng &nbsp;thay thế cho dấu cách trong trường hợp này.)

Một cách khác là nowrapthuộc tính (không dùng nữa / lỗi thời, nhưng vẫn hoạt động tốt, ngoại trừ một số điểm lạ hiếm gặp):

<td nowrap><i class="flag-bfh-ES"></i> +34 666 66 66 66</td>

Sau đó, có cách CSS, hoạt động trong các trình duyệt hỗ trợ CSS và cần thêm một đoạn mã:

<style>
.nobr { white-space: nowrap }
</style>
...
<td class=nobr><i class="flag-bfh-ES"></i> +34 666 66 66 66</td>

16
Re: nobr, mozilla cảnh báo "Tính năng này không phải là tiêu chuẩn và không theo tiêu chuẩn. Không sử dụng nó trên các trang web sản xuất đối diện với Web: tính năng này sẽ không hoạt động đối với mọi người dùng. Cũng có thể có sự không tương thích lớn giữa việc triển khai và hành vi có thể thay đổi trong tương lai. " - developer.mozilla.org/en-US/docs/Web/HTML/Element/nobr
Luke

1
@Luke, đó là một cảnh báo "tiêu chuẩn". Họ không mô tả bất kỳ sự không tương thích nào (dù chỉ là một cái nhỏ) và không đề cập đến bất kỳ trình duyệt nào không hỗ trợ nobr; không có gì cả.
Jukka K. Korpela

23
Các nobrthẻ là trong cùng chuyên mục như sử dụng blink: w3.org/TR/html5/obsolete.html#obsolete Hoặc bạn làm việc hướng tới các tiêu chuẩn web hoặc bạn làm việc hướng tới một trang web hỗn loạn. Sự lựa chọn là của bạn.
Luke

8
Nếu bạn đang sử dụng bootstrap, một lớp "text-nowrap" đã được xác định để đặt kiểu cho phù hợp.
Ratatwisker

4
@ JukkaK.Korpela, HTML5 hiện đã được hoàn thiện và, rất không ngạc nhiên, nobrvẫn không được chấp nhận và "không được sử dụng" .
Marcus

57

CSS cho td: white-space: nowrap;nên giải quyết nó.


7

Nếu bạn cần điều này cho một số từ hoặc phần tử, nhưng không thể áp dụng nó cho toàn bộ TD hoặc tương tự, thẻ Span có thể được sử dụng.

<span style="white-space: nowrap">Text to break together</span>
    or 
<span class=nobr>Text to break together</span>

Nếu bạn sử dụng phiên bản lớp, hãy nhớ thiết lập CSS như chi tiết trong câu trả lời được chấp nhận.


2

Nếu <i>thẻ không được hiển thị dưới dạng khối và gây ra sự cố thì điều này sẽ hoạt động:

<td style="white-space:nowrap;"><i class="flag-bfh-ES"></i>&nbsp;+34&nbsp;666&nbsp;66&nbsp;66&nbsp;66</td>


2

Trong một số trường hợp (ví dụ: html được tạo và chèn bởi JavaScript), bạn cũng có thể muốn thử chèn một bộ nối có độ rộng bằng không:

.wrapper{
  width: 290px;   
  white-space: no-wrap;
  resize:both;
  overflow:auto; 
  border: 1px solid gray;
}

.breakable-text{
  display: inline;
  white-space: no-wrap;
}

.no-break-before {
  padding-left: 10px;
}
<div class="wrapper">
<span class="breakable-text">Lorem dorem tralalalala LAST_WORDS</span>&#8205;<span class="no-break-before">TOGETHER</span>
</div>


2

Đây là giải pháp thực sự:

<td>
  <span class="inline-flag">
    <i class="flag-bfh-ES"></i> 
    <span>+34 666 66 66 66</span>
  </span>
</td>

css:

.inline-flag {
   position: relative;
   display: inline;
   line-height: 14px; /* play with this */
}

.inline-flag > i {
   position: absolute;
   display: block;
   top: -1px; /* play with this */
}

.inline-flag > span {
   margin-left: 18px; /* play with this */
}

Ví dụ, hình ảnh luôn đứng trước văn bản:

nhập mô tả hình ảnh ở đây


-1

nobr quá không đáng tin cậy, sử dụng bảng

<table>
      <tr>
          <td> something </td>
          <td> something </td>
      </tr>
</table>

Tất cả đều diễn ra trên cùng một đường thẳng, mọi thứ đều bình đẳng với nhau và bạn có nhiều tự do hơn nếu bạn muốn thay đổi điều gì đó sau này.

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.