2012-01-24 42 views
32

Cách tốt nhất để giữ gìn khoảng trắng trong HTML là gì? Chúng tôi có rất nhiều trang cung cấp dữ liệu từ cơ sở dữ liệu của chúng tôi và dữ liệu có thể có nhiều không gian trong đó. Các yếu tố HTML rendered giữ các dữ liệu khác nhau từ thẻ neo (<a>), spans (<span>), table rows (<tr>, <td>, etc.HTML/CSS - Phương pháp hay nhất để giữ khoảng trắng trên các phần tử nhất định?

Điều dễ nhất để làm ngay bây giờ sẽ có thêm một lớp css toàn cầu như vậy:

body a, span, tr, td { white-space: pre; } 

Tôi đang tự hỏi nếu có một cách tốt hơn để triển khai này mà không cần gán một lớp cho từng phần tử HTML riêng lẻ.

+3

Ví dụ của bạn không sử dụng lớp css và không yêu cầu bạn chỉ định lớp cho từng phần tử riêng lẻ. –

+0

@ RichardMarskell-Drackir Yea, tôi hiếm khi đối phó với CSS, không biết CSS rất tốt lol – contactmatt

Trả lời

50

Tôi sẽ sử dụng kỹ thuật tương tự, nhưng bên trong một wrapper lớp dữ liệu mà nó là cần thiết:

.data a, .data span, .data tr, .data td { white-space: pre; } 

HTML:

<div class="data"> 
.... 

</div> 
+0

Đây là một ý tưởng hay. Nó dễ dàng hơn để bọc đầu ra, thay vì thay đổi tất cả các thẻ trong đầu ra đó. –

+0

Làm việc như một sự quyến rũ! –

6

Điều gì là sai với thay thế chỗ bởi & nbsp ;? Điều này sẽ làm việc bên trong bất kỳ phần tử nào và bảo toàn các khoảng trống trong đầu ra được hiển thị.

+10

Sai với điều này là có 26 khoảng trống khác nhau ('\ x09 \ x0A \ x0B \ x0C \ x0D \ x20 \ xA0 \ u1680 \ u180E \ u2000 \ u2001 \ u2002 \ u2003 \ u2004 \ u2005 \ u2006 \ u2007 \ u2008 \ u2009 \ u200A \ u202F \ u205F \ u3000 \ u2028 \ u2029 \ uFEFF') (http://perfectionkills.com/whitespace-deviations/ danh sách 25, nhưng cũng có '\ uFEFF') và chiều rộng là" trắng- không gian "không giống nhau trong tất cả các khoảng trắng có thể.Đó là thiết kế phông chữ để quyết định chiều rộng của nhân vật, cũng là ký tự khoảng trắng. Nếu bạn thay thế không gian ('\ x20') bằng  , bạn sẽ không sao, nhưng có 25 không gian trắng khác có thể quan tâm. –

+0

Tùy thuộc vào ngôn ngữ phía máy chủ của bạn, bạn có thể có một cái gì đó giống như char.iswhitespace http://msdn.microsoft.com/en-us/library/system.char.iswhitespace.aspx mà làm cho nó dễ dàng để thay thế tất cả các nhân vật khoảng trắng. –

+2

Tuy nhiên, bằng cách sử dụng khoảng trắng: tùy chọn trước đã đơn giản/dễ dàng hơn trong quan điểm của tôi vì bạn có thể thay đổi biểu định kiểu mà không thay đổi mã của mình. –

5

Điều này tùy thuộc vào việc bạn muốn giữ lại tất cả các khoảng trắng trong các yếu tố nhất định và chính xác những gì sẽ xảy ra ở đó. Giả sử rằng không có quy tắc CSS có thể can thiệp, CSS của bạn có thể được đơn giản hóa để

a, span, tr { white-space: pre; } 

vì một yếu tố a là alway trong bodytd theo mặc định được thừa hưởng tài sản từ tr.

Nếu bạn chỉ muốn ngăn nhiều không gian bị sụp đổ, thay vì buộc phân chia cố định thành đường kẻ, thì white-space: pre-wrap hoặc thay thế khoảng trống bằng khoảng trắng ngắt có thể phù hợp hơn.

Cuối cùng, nhu cầu và khả năng hạn chế quy tắc đối với các yếu tố được chọn sẽ phụ thuộc rất nhiều vào cách thực hiện lựa chọn. Có lẽ bạn có thể chọn lọc white-space thành pre (hoặc pre-wrap) cho một số yếu tố kèm theo các phần có liên quan, nhớ rằng thuộc tính kế thừa nếu không được đặt trên các phần tử bên trong.

Bạn cũng có thể phá vỡ các thừa kế: bạn có thể thiết white-space: pre trên một yếu tố table ví dụ, nếu bạn muốn thực hiện các quy tắc áp dụng cho nhất của nội dung, và thiết lập white-space: normal trên những hàng hoặc các tế bào nơi nó không phải là được áp dụng.

15
<pre>no need for  style</pre> 
+1

Lưu ý rằng thẻ 'pre' thường được hiển thị dưới dạng phần tử' block'. –

Các vấn đề liên quan