Bỏ qua <br> với CSS?


114

Tôi đang làm việc trên một trang web có chèn ngắt dòng như <br>trong một số tiêu đề. Giả sử tôi không thể chỉnh sửa HTML nguồn, có cách nào với CSS tôi có thể bỏ qua những ngắt này không?

Tôi đang tối ưu hóa trang web trên thiết bị di động nên tôi không thực sự muốn sử dụng JavaScript.


1
@Ben Johnson mk2: Câu trả lời cho câu hỏi của bạn: "Tôi muốn một giải pháp cho câu trả lời của @Aneesh Karthik C cho firefox và opera" là không thể sử dụng các brphần tử! Các lý do đã được giải thích nhiều lần! Trong câu trả lời của tôi, tôi đã chỉ cho bạn một phương pháp thay thế để đạt được mục tiêu theo cách hợp lệ, mạnh mẽ và trên nhiều trình duyệt.
Netsurfer

Câu trả lời:


198

Với css, bạn có thể "ẩn" các thẻ br và chúng sẽ không có tác dụng:

br {
    display: none;
}

Nếu bạn chỉ muốn ẩn một số trong một loại tiêu đề cụ thể, chỉ cần làm cho css của bạn cụ thể hơn.

h3 br {
    display: none;
}

11
Hãy chắc chắn rằng bạn cũng đã xem qua câu trả lời của Aneesh, nó có liên quan và khắc phục một vấn đề mà enobrev không xem xét trong câu trả lời của mình.
Rick Calder,

3
Đồng ý, câu trả lời của Aneesh là một bổ sung tuyệt vời. stackoverflow.com/a/18040142/14651
enobrev

2
Giải pháp này không hoạt động cho Firefox. Nếu <br/> không có khoảng trống xung quanh thì nó sẽ kết hợp các từ xung quanh <br/> với nhau. Đây là mẫu Bạn có thể xem thảo luận về nó bên dưới
shineecret 17/02

1
Nếu mục tiêu của bạn là thiết kế đáp ứng, giải pháp trình duyệt chéo duy nhất là của @ Netsurfer. Nó không trả lời câu hỏi chính xác như đã nêu, nhưng nó đạt được mục tiêu trong tất cả các trình duyệt hiện đại.
Andrew Lundin

94

Lưu ý: Giải pháp này chỉ hoạt động đối với các trình duyệt Webkit áp dụng sai phần tử giả cho các thẻ tự đóng.

Như một phụ lục cho các câu trả lời ở trên, cần lưu ý rằng trong một số trường hợp, người ta cần phải chèn một khoảng trắng thay vì chỉ bỏ qua <br>:

Ví dụ, các câu trả lời trên sẽ lần lượt

Monday<br>05 August

đến

Monday05 August

như tôi đã xác minh trong khi cố định dạng lịch sự kiện hàng tuần của mình. Khoảng trống sau "Thứ Hai" được ưu tiên để chèn. Điều này có thể được thực hiện dễ dàng bằng cách chèn những điều sau vào CSS:

br  {
    content: ' '
}
br:after {
    content: ' '
}

Điều này sẽ làm cho

Monday<br>05 August

trông giống như

Monday 05 August

Bạn có thể thay đổi contentthuộc tính br:afterthành ', 'nếu bạn muốn phân tách bằng dấu phẩy hoặc đặt bất kỳ thứ gì bạn muốn bên trong ' 'để làm cho nó thành dấu phân cách! Nhân tiện

Monday, 05 August

trông gọn gàng ;-)

Xem ở đây để tham khảo.

Như trong các câu trả lời ở trên, nếu bạn muốn làm cho thẻ cụ thể, bạn có thể. Như trong trường hợp bạn muốn thuộc tính này hoạt động cho thẻ <h3>, chỉ cần thêm h3mỗi thuộc tính trước brbr:after, chẳng hạn.

Nó hoạt động chung nhất cho một thẻ giả.


2
rất rất rất thiên tài!
jon

1
Làm tốt lắm, thực sự nghĩ về hậu quả của việc vô hiệu hóa nó!
Rick Calder,

10
Điểm tốt nhưng điều này dường như chỉ hoạt động với các trình duyệt Webkit (Chrome & Safari) với Firefox và IE. Kỹ thuật này không hoạt động, hãy kiểm tra jsfiddle.net/nicooprat/ZHxNA với Firefox và IE ... bất kỳ ý tưởng nào về cách thay thế br với một không gian để nó hoạt động với tất cả các braowsers chính?
firepol

6
@firepol: Trên thực tế, Firefox và IE đang làm mọi thứ "đúng" vì a <br />là một phần tử mà phần tử giả không được cho là hoạt động . Và contentchỉ hoạt động trên các phần tử giả.
ScottS

7
Đây là giải pháp rất sai, chủ yếu là do những gì @ScottS đã viết. "Nội dung" chỉ hoạt động với các phần tử giả và phần tử giả không được cho là hoạt động với các thẻ tự đóng. Điều này có thể hoạt động ngay bây giờ, nhưng tôi không dám gọi giải pháp này là bằng chứng trong tương lai.
nd_macias

16

Nếu bạn thêm vào phong cách

br{
    display: none;
}

Sau đó, điều này sẽ hoạt động. Tuy nhiên, không chắc liệu nó có hoạt động trong các phiên bản IE cũ hơn hay không.


3
cái này đã được đăng trước đó và có ít phiếu bầu hơn .. làm sao vậy?
Mr_Green

Đôi khi, chúng tôi chỉ bị bỏ qua; (
Tim B James

@TimBJames nó không làm việc trong FIREFOX bạn có thể kiểm tra bình luận chi tiết của tôi ở trên
shinesecret

12

Đây là cách tôi làm điều đó:

br { 
    display: inline;
    content: ' ';
    clear:none;
}

6

Bạn có thể sử dụng spancác phần tử thay vì brnếu bạn muốn phương thức khoảng trắng hoạt động, vì nó phụ thuộc vào các phần tử giả "không được xác định" cho các phần tử được thay thế.

HTML

<p>
   To break lines<span class="line-break">in a paragraph,</span><span>don't use</span><span>the 'br' element.</span>
</p>

CSS

span {white-space: pre;}

span:after {content: ' ';}

span.line-break {display: block;}

span.line-break:after {content: none;}

BẢN GIỚI THIỆU

Việc ngắt dòng chỉ đạt được bằng cách đặt phần tử nhịp thích hợp thành display:block.

Bằng cách sử dụng ID và / hoặc Lớp trong đánh dấu HTML của mình, bạn có thể dễ dàng nhắm mục tiêu mọi đơn lẻ hoặc kết hợp các phần tử span bằng CSS hoặc sử dụng các bộ chọn CSS như nth-child().

Vì vậy, bạn có thể xác định các điểm ngắt khác nhau bằng cách sử dụng các truy vấn phương tiện cho một bố cục đáp ứng.

Và bạn cũng có thể chỉ cần thêm / bớt / chuyển đổi các lớp bằng Javascript (jQuery).

“Ưu điểm” của phương pháp này là tính mạnh mẽ - hoạt động trên mọi trình duyệt hỗ trợ phần tử giả (xem: Tôi có thể sử dụng - Nội dung được tạo CSS ).

Thay vào đó, bạn cũng có thể thêm dấu ngắt dòng qua phần tử giả:

span.break:before {  
    content: "\A";
    white-space: pre;
}

BẢN GIỚI THIỆU


4
Bạn có bỏ lỡ phần này của câu hỏi: "Giả sử tôi không thể chỉnh sửa mã nguồn html" không?
ScottS

1
@ScottS: Không, tôi không có. Có thể bạn đã bỏ lỡ phần: 'Tôi muốn một giải pháp cho câu trả lời của @Aneesh Karthik C cho firefox và opera' (vì người bắt đầu tiền thưởng không phải là OP). Và câu trả lời cho điều này là, <br>ít nhất là không thể với trình duyệt chéo. Vì vậy, tôi đã đưa ra một giải pháp thay thế.
Netsurfer

2
Không, tôi đã không bỏ lỡ phần đó (OP khác với tiền thưởng và trọng tâm là câu trả lời của Aneesh). Nhưng câu trả lời của Aneesh nằm trong ngữ cảnh của toàn bộ câu hỏi, "Bỏ qua <br> với CSS?" Có vẻ như khá rõ ràng rằng nếu một người có quyền kiểm soát thực tế đối với html, thì chỉ cần xóa các <br>phần tử là giải quyết được vấn đề (có lẽ là thay thế chúng bằng dấu cách). Vì vậy, toàn bộ vấn đề mà toàn bộ câu hỏi được quan tâm là khi nào người ta không có quyền kiểm soát html ; phức tạp bởi quy định được thêm vào mà họ thực sự không muốn sử dụng javascript (vì bất kỳ lý do gì) để giải quyết nó.
ScottS

Câu hỏi "Làm thế nào để bỏ qua <br>với CSS?" đã được trả lời. Và chỉ khi bạn kiểm soát HTML, điều đó không có nghĩa là bạn muốn thay đổi nó. Nhưng trong thiết kế đáp ứng, người ta thường mong muốn kiểm soát các ngắt dòng (khác với quấn tự động). Và trong những trường hợp như vậy, phương pháp có khoảng trắng hoặc không được kiểm soát bởi CSS (truy vấn phương tiện) ít nhất là "một phương pháp" để đạt được mục tiêu.
Netsurfer

Điều này đã hoạt động tốt hơn đối với tôi bây giờ khi các giải pháp trên không còn hoạt động trong firefox.
Christos Hrousis

3

Đối với tôi trông đẹp hơn như thế này:

Some text, Some text, Some text

br {
  display: inline;
  content: '';
}

br:after {
  content: ', ';
  display: inline-block;
}
<div style="display:block">
  <span>Some text</span>
  <br>
  <span>Some text</span>
  <br>
  <span>Some text</span>
</div>


1

Đối với điều đó, bạn chỉ có thể làm như sau:

br{display: none;}

và nếu nó nằm bên trong một số thẻ PRE, thì bạn có thể và nếu bạn muốn thẻ PRE hoạt động như một phần tử khối thông thường, bạn có thể sử dụng CSS này:

pre {white-space: normal;}

Hoặc bạn có thể làm theo phong cách của Aneesh Karthik C như:

br  {content: ' '}
br:after {content: ' '}

Toi nghi ban da hieu


Tôi nghĩ rằng bạn đã bỏ lỡ điểm mà các phần tử giả thích ::before::afterít nhất là "không xác định" cho "các phần tử được thay thế" như br. Vì vậy, sẽ không bao giờ có một hành vi trình duyệt nhất quán mà người ta có thể dựa vào! Điều duy nhất bạn có thể làm là không sử dụng các phần tử giả với các phần tử này!
Netsurfer

1

Theo câu hỏi của bạn, để giải quyết vấn đề này cho Firefox và Opera bằng Aneesh Karthik C phương pháp bạn cần thêm thuộc tính "float" right ".

Kiểm tra ví dụ ở đây. CSS này hoạt động trên Firefox (26.0), Opera (12.15), Chrome (32.0.1700) và Safari (7.0)

br {
   content: " ";  
   float:right; 
}

Tôi hy vọng điều này sẽ trả lời câu hỏi của bạn !!


Thuộc tính nội dung chỉ có hiệu lực trên các phần tử giả CSS. Vì vậy, nó hoàn toàn vô dụng trong bản demo của bạn! Và làm thế nào để "vô hiệu hóa" a brđã được trả lời (nhiều hơn một lần). Câu hỏi là về khoảng trắng có điều kiện . Và vì điều này yêu cầu sử dụng các phần tử giả, nó không hoạt động vớibr .
Netsurfer

Nếu bạn đọc kỹ câu hỏi. Bạn sẽ hiểu câu trả lời. Tôi đã thấy câu trả lời ở trên là cách tốt nhất để tránh <br> bằng cách đặt nó thành hiển thị: không có. Nhưng theo câu hỏi thứ hai, nơi anh ta muốn tìm hiểu cách anh ta có thể giải quyết vấn đề đang xảy ra trong FF và Opera cho giải pháp Aneesh.
shineecret

Tôi đã đọc không chỉ câu hỏi mà còn tất cả các câu trả lời và nhận xét rất cẩn thận. Thuộc tính nội dung brđơn giản là vô nghĩa! Và tôi vẫn không thể thấy phần còn lại của câu trả lời của bạn có liên quan gì đến "khoảng trắng có điều kiện và dấu gạch ngang"? Có thể bạn có thể giải thích nó thêm, xin vui lòng?
Netsurfer

1
Ví dụ của bạn gây hiểu lầm, vì bạn đã có khoảng trắng xung quanh các brphần tử. Nếu bạn xóa chúng, bạn sẽ thấy nó không hoạt động để thêm bất kỳ không gian nào.
ScottS

1
Trong ví dụ của bạn, bạn có ba brphần tử, với khoảng trắng trước và sau phần tử đầu tiên và cuối cùng. Chính những khoảng trống đó cho thấy rằng giải pháp của bạn đang hoạt động, trong khi thực tế thì không. Khi bạn xóa những khoảng trắng đó, như tôi đã làm trong ví dụ đã sửa đổi của mình, bạn có thể thấy rằng giải pháp của bạn không thêm bất kỳ khoảng trắng nào trong Firefox.
ScottS

0

Mặc dù câu hỏi này dường như đã được giải quyết, nhưng câu trả lời được chấp nhận không giải quyết được vấn đề cho tôi trên Firefox. Firefox (và có thể cả IE, mặc dù tôi chưa thử) bỏ qua khoảng trắng trong khi đọc nội dung của thẻ "content". Mặc dù tôi hoàn toàn hiểu tại sao Mozilla lại làm như vậy, nhưng nó cũng mang lại những vấn đề. Cách giải quyết đơn giản nhất mà tôi tìm thấy là sử dụng các khoảng trắng không thể ngắt thay vì các khoảng trắng thông thường như hình dưới đây.

.noLineBreaks br:before{
content: '\a0'
}

Hãy xem .


1
Tại sao fiddle của bạn không có beforephần tử trên a br? Bạn thậm chí không có brtrong html của bạn trên fiddle. Một phần của vấn đề là beforenó không hoạt động trên một brsố trình duyệt.
ScottS

Đó là hành vi khá được mong đợi, như đã nêu trong thông số kỹ thuật: 2.5.1 Các thành ngữ phân tích cú pháp phổ biến
Netsurfer

Tha chắc chắn là kỳ lạ, nó hoạt động khi tôi áp dụng nó trong dự án của mình. Tuy nhiên, văn bản của tôi không phải là tất cả HTML, nội dung tôi đang sửa đổi đến từ cơ sở dữ liệu. Xin lỗi, nhà cảm xạ của tôi đã không giúp đỡ.
Santo Guevarra

0

Có bạn có thể bỏ qua điều này <br> . Bạn có thể cần điều này đặc biệt trong trường hợp thiết kế đáp ứng, nơi bạn cần loại bỏ các dấu ngắt cho thiết bị di động.

HTML

<h2>

  Where ever you go <br class="break"> i am there.

</h2>

Ví dụ về CSS cho điện thoại di động

/* Resize the browser window to check */

@media (max-width: 640px) 
{
  .break {display: none;}
}

Kiểm tra Codepen này:
https://codepen.io/fluidbrush/pen/pojGQyM


-1

Bạn chỉ cần chuyển đổi nó trong một bình luận ..

Hoặc bạn có thể làm điều này:

br {
display: none;
}

Nhưng nếu bạn không muốn thì tại sao bạn lại đặt nó ở đó?

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.