Ngắt dòng (như <br>) chỉ sử dụng css


84

Có thể trong css thuần túy, tức là không thêm các thẻ html bổ sung, để ngắt dòng như thế <br>nào không? Tôi muốn ngắt dòng sau <h4>phần tử, nhưng không phải trước:

HTML

<li>
  Text, text, text, text, text. <h4>Sub header</h4>
  Text, text, text, text, text.
</li>

CSS

h4 {
  display: inline;
}

Tôi đã tìm thấy nhiều câu hỏi như thế này, nhưng luôn có các câu trả lời như "use display: block;" , mà tôi không thể làm, khi <h4>phải ở trên cùng một dòng.


Tại sao phần tử này là h4? Tại sao bạn lại sử dụng nó ở một nơi như thế này?
toniedzwiedz

Chúng tôi tò mò, lý do bạn không muốn sử dụng <br/> là gì?
Philip Kirkbride

1
Lý do: Tôi có rất nhiều phần tử danh sách. Và tôi cũng đang tự hỏi liệu một giải pháp thanh lịch có tồn tại hay không. Nó thường không tốt đẹp để sử dụng các thẻ BR giữa các yếu tố (và tôi thấy tiêu đề là một phần tử của riêng mình)
Steeven

@Tom, đây là một ví dụ đơn giản. Tôi có văn bản và tiêu đề som trong mỗi phần tử danh sách.
Febven

Câu trả lời:


134

Nó hoạt động như thế này:

h4 {
    display:inline;
}
h4:after {
    content:"\a";
    white-space: pre;
}

Ví dụ: http://jsfiddle.net/Bb2d7/

Thủ thuật đến từ đây: https://stackoverflow.com/a/66000/509752 (để có thêm lời giải thích)


10
\anghĩa là ngắt dòng, ký tự U + 000A và white-space: preyêu cầu trình duyệt coi đó là ngắt dòng trong kết xuất.
Jukka K. Korpela

Được rồi, cảm ơn @ JukkaK.Korpela. Vậy tại sao nó không được hiển thị dưới dạng ngắt dòng ngay từ đầu? Mặc dù giải pháp này đơn giản, nó vẫn sẽ ghi đè các lệnh khoảng trắng khác.
Regiven

3
@Steeven, nó chỉ ghi đè giá trị ban đầu cho white-spacetrên :afterpseudo-yếu tố, trong đó có chỉ là ngắt dòng. Và nó là cần thiết vì trong HTML, theo mặc định, ngắt dòng trong nội dung phần tử tương đương với một khoảng trắng và không gây ra ngắt dòng trong tài liệu được kết xuất.
Jukka K. Korpela

3
@Alshten, cảm ơn, rất có ý nghĩa và hoàn toàn đồng thời loại bỏ tôi.
sonjz

Sẽ không bao giờ nghĩ về điều này. Thật tiếc là người ta không thể chèn HTML!
Lodewijk

7

Thử

h4{ display:block;}

trong css của bạn

http://jsfiddle.net/ZrJP6/


1
cộng với một số cách sử dụng hợp lý margin-bottomsẽ giúp bạn đạt được điều đó.
Jeremy Holovacs

4
Nhưng nếu tôi hiểu rõ, thì h4 phải nằm trên cùng một dòng với văn bản trước đó. Với display: block, có một dấu ngắt dòng trước h4.
adriantoine

Gì? margin-bottomsẽ đặt h4 ở cùng dòng với văn bản trước đó?
Febven

!! Đây không phải là một giải pháp hiệu quả: dòng sau của bạn sẽ là "display: none" trong các trình duyệt như Safari !!
Gregdebrick

5

Bạn có thể sử dụng ::afterđể tạo 0pxkhối -height sau dấu <h4>, có hiệu quả di chuyển bất cứ thứ gì sau khối này <h4>sang dòng tiếp theo:

h4 {
  display: inline;
}
h4::after {
  content: "";
  display: block;
}
<ul>
  <li>
    Text, text, text, text, text. <h4>Sub header</h4>
    Text, text, text, text, text.
  </li>
</ul>

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.