Khoảng trống trước khi đóng cửa chém?


93

Tôi thường xuyên thấy một khoảng trắng trước dấu gạch chéo đóng trong các thẻ XML và HTML. Dấu ngắt dòng XHTML có thể là ví dụ chuẩn:

<br />

thay vì:

<br/>

Không gian có vẻ thừa. Trong thực tế, tôi nghĩ rằng nó là thừa.

Lý do để viết khoảng trống này là gì?

Tôi đã đọc rằng không gian giải quyết một số "vấn đề tương thích ngược". Vấn đề tương thích ngược nào? Những vấn đề đó vẫn còn phù hợp hay chúng tôi vẫn thêm các khoảng trống bổ sung vì lợi ích tương thích của IE3? Có tồn tại một số thông số kỹ thuật với câu trả lời dứt khoát về điều này?

Nếu không tương thích ngược, thì đó có phải là vấn đề về khả năng đọc không? Tương tự như cuộc tranh luận Great Open Curly Brace?

void it_goes_up_here() {

int no_you_fool_it_goes_down_there()
{

Tôi chắc chắn có thể tôn trọng các ý kiến ​​khác nhau về phong cách, vì vậy tôi rất vui khi biết rằng việc viết không gian chỉ đơn giản là một vấn đề của sở thích.


5
Tôi quá quen với nó <br /> mà chỉ trông tốt hơn rất nhiều so với <br/>
mk12

Câu trả lời:


64

Câu trả lời là mọi người muốn tuân theo Phụ lục C của đặc tả XHTML1.0 . Điều bạn chỉ cần làm nếu bạn đang phân phát XHTML dưới dạng văn bản / html . Điều mà hầu hết mọi người đều làm vì kiểu MIME thực của XHTML (ứng dụng / html + xml) không hoạt động trong Internet Explorer.

Không có trình duyệt hiện tại quan tâm đến không gian. Trình duyệt rất khoan dung với những điều này.

Không gian được sử dụng để đảm bảo trình phân tích cú pháp HTML coi dấu gạch chéo ở cuối là một thuộc tính không được công nhận.


2
Bạn có thể nói rõ hơn về "used to be?" Năm và / hoặc phiên bản trình duyệt sẽ làm được, cảm ơn!
Greg Mattes

5
Tôi nghĩ rằng w3.org/TR/xhtml1/#C_2 là một liên kết chính xác hơn cho câu trả lời này. Vì vậy, có vẻ như XHTML 1.0 Phụ lục C2 đã lỗi thời và việc viết khoảng trống hoàn toàn là một vấn đề quan trọng.
Greg Mattes

1
Xin lỗi, sử dụng để trở thành, có nghĩa là "là" - liên quan đến việc đảm bảo trình phân tích cú pháp HTML coi dấu gạch chéo là thuộc tính không được công nhận, không phải tất cả trình phân tích cú pháp HTML đều là trình duyệt. Tôi không muốn mạo hiểm đoán xem phiên bản trình duyệt nào bị nghẹt nếu có, nhưng tôi không nhớ IE4 hay Netscape 4 đã phàn nàn.
Lee Kowalkowski

3
trên thực tế, loại kịch câm thực sự là application / xhtml + xml.
mk12,

3
@JanAagaard: Tôi không biết, tôi sẽ nhớ nó nếu vậy - Tôi bắt đầu phát triển web trên IE4 và Netscape 4. Câu trả lời mà bạn liên kết đến cũng có nhận xét về hiệu ứng này, nó nói rằng nó thực sự là Netscape 3.
Lee Kowalkowski

31

Netscape 4.80 hiển thị các hành vi khác nhau của <br/> và <br /> trong HTML

Hỗ trợ câu trả lời của bobince với ảnh chụp màn hình Netscape 4.80 hiển thị tài liệu

data:text/html,<title>space</title>foo<br />bar

(trên cùng bên trái, kết xuất ngắt dòng) và

data:text/html,<title>no space</title>foo<br/>bar

(dưới cùng bên trái, bỏ qua dấu ngắt dòng).


Đăng dưới dạng câu trả lời để hiển thị hình ảnh

Có liên quan mật thiết: trên thực tế, tôi đã có một câu trả lời dài để xác định nguyên nhân gây ra các hoạt động sai như vậy của các trình duyệt cổ (và kết quả là đề xuất bao gồm khoảng trống) trong các thông số kỹ thuật SGML bị hiểu nhầm, cụ thể là SGML Null End Tag ( NET ) (trong đó 1<tag/2/3bằng 1<tag>2</tag>3như vậy1<tag/>2 sẽ thực sự có ý nghĩa 1<tag>>2), nhưng không chỉ tôi không thể tìm thấy bằng chứng tốt và phiên bản cụ thể của tiêu chuẩn, tôi thậm chí còn không thể nắm bắt được hành vi tuân thủ tiêu chuẩn thích hợp. Rất ít liên kết thô để tham khảo:

(Hiện không thể tái tạo ở đó, nhưng ủng hộ tuyên bố của Lee Kowalkowski về nhiều trình duyệt bị ảnh hưởng bởi điều này.)


25

Những vấn đề đó vẫn còn phù hợp hay chúng tôi vẫn thêm các khoảng trống bổ sung vì lợi ích của khả năng tương thích với IE3?

Bạn đã kết thúc - đó là đối với Netscape 4.

Thật thú vị khi thấy những lý lẽ khác, nhưng đó là tất cả những gì nó có ý nghĩa.


2
Cảm ơn! Bạn có thể cung cấp một tài liệu tham khảo cho điều này?
Greg Mattes

1
Rất khó để tìm nguồn chính, tài liệu W3 cũ ... chính thức này tránh đề cập đến bất kỳ UA nào, và thảo luận trong danh sách dường như diễn ra tình huống như đã đọc. Có thể có những UA khác cũng cần dung lượng, nhưng N4 là chiếc cuối cùng, đã gây ra rắc rối cho quản trị viên web trong nhiều năm.
bobince

Đó là vì vậy tài liệu XHTML của bạn cũng sẽ hiển thị trên Netscape. Cụ thể là nó dành cho thẻ ngắt và thẻ hình ảnh. Nguồn chính: Tôi đã viết mã cho khả năng tương thích IE4 và NS3 10 năm trước.
Philihp Busby

4

Không, không bắt buộc phải có dung lượng nhưng đối với một số trình duyệt cũ thì cần hiển thị các thẻ đó một cách chính xác. Cách thích hợp để làm điều đó là không có thêm dung lượng vì đây là thứ mà XHTML kế thừa từ XML.


1
Cụ thể là những trình duyệt cũ nào? Tôi muốn biết liệu chúng ta có đang nói về các trình duyệt có thị phần đáng kể hay không.
Greg Mattes

Đã không. Hầu hết là IE5 trở lên.
jmucchiello


3

Khoảng trống chỉ làm cho các thẻ dễ đọc hơn. Tôi là người ủng hộ lớn việc định dạng để có mã dễ đọc hơn. Những điều nhỏ nhặt như vậy đi được một chặng đường dài. Nếu không có khoảng trống, thẻ đóng sẽ hòa vào với thẻ mở. Tôi chỉ mất một lúc lâu hơn để xử lý nó vì tôi đang đọc nhanh mã.


0

Điều gì sẽ xảy ra nếu có một người viết html rất lười biếng hoặc có thể anh ta sợ dấu ngoặc kép. Hãy xem xét những điều sau nếu bạn là trình thu thập thông tin trang rô bốt của anh ấy ...

<img src=http://myunquotedurl.com/image.jpg />

đấu với

<img src=http://myunquotedurl.com/image.jpg/>

Điều này có vẻ nhỏ nhưng hãy xem nó có thể làm gì nếu không gian không có. Robot sẽ không biết liệu dấu gạch chéo là một phần của url hay một phần của thẻ đóng.


12
Chà, nhưng dù sao cũng nên có dấu ngoặc kép xung quanh url.
Florian Wendelborn,

-1

Tôi nghĩ rằng khoảng trắng là một cách để củng cố ý tưởng rằng thẻ này trống và nó tự đóng.

Hôm nay tôi không sử dụng khoảng trắng nữa vì tôi chưa bao giờ gặp vấn đề với không có khoảng trắng.


1
"củng cố" là một từ thích hợp để chỉ "mạnh mẽ"
Hao

cảm ơn đã thông báo rằng. thật tốt khi thấy rằng ở đây chúng tôi có những người đảm bảo chất lượng của bài viết.
nicruo
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.