Tôi có nên sử dụng các thẻ không chuẩn trong trang HTML để làm nổi bật các từ không?


20

Tôi muốn biết liệu đó có phải là một thông lệ hay pháp lý để sử dụng các thẻ không chuẩn trong một trang HTML cho các mục đích tùy chỉnh nhất định.

Ví dụ:

Lorem ipsum dolor ngồi amet, consitetur adipiscing elit. Nullam resultat, felis sit amet suscipit laoreet, nisi arcu accumsan arcu, vel pulvinar odio magna suscipit mi.

Tôi muốn làm nổi bật "elit adipiscing elit" là quan trọng và "nisi arcu accumsan arcu" như được nhấn mạnh.

Vì vậy, trong HTML tôi sẽ đặt:

Lorem ipsum dolor ngồi amet, <quan trọng> liên kết giới thượng lưu </ quan trọng>. Nullam resultat, felis sit amet suscipit laoreet, <highlight> nisi arcu accumsan arcu </ highlight>, vel pulvinar odio magna suscipit mi.

và trong CSS:

important {
 background: red
 color: white;
}

highlighted {
 background: yellow;
 color: black;
}

Tuy nhiên, vì đây không phải là các thẻ HTML hợp lệ, điều này có ổn không?


56
<span class=..>?
Jake Berger

12
Theo định nghĩa, nếu chúng là tùy chỉnh thì chúng không phải là thẻ HTML (được chuẩn hóa). Chúng chỉ là những yếu tố không có ý nghĩa cụ thể.
Oded


14
<em>về cơ bản là của bạn <important><mark>là của bạn <highlight>.
Peter C

3
Bạn đúng. Thông số HTML5 nói <strong>là phù hợp với tầm quan trọng hơn <em>là. Lỗi của tôi.
Peter C

Câu trả lời:


50

Không, đây không phải là một thực hành tốt. Bạn nên sử dụng các thẻ có ý nghĩa, ngữ nghĩa - có lẽ <em>trong trường hợp này - và áp dụng các kiểu CSS để đạt được yêu cầu thiết kế của bạn.


3
Có lẽ anh ấy không quen thuộc với các lớp học. Cú pháp là: HTML <em class="myclass">sample text</em>CSS .myclass: { background: red; etc. } Bạn có thể cung cấp các lớp cho hầu hết các thẻ, không chỉ em. Thông thường divhoặc spancho văn bản. Xem thêm
BlueRaja - Danny Pflughoeft

@ BlueRaja-DannyPflughoeft - các lớp rải rác trong mã là cách sai để xử lý việc này quá. Bạn có thể có thể làm tốt hơn bằng cách sử dụng các bộ chọn hậu duệ với một hoặc hai lớp trên các thùng chứa.
Wyatt Barnett

14

Câu hỏi của bạn hỏi nếu đó là " thực hành tốt hoặc hợp pháp ".

Thứ nhất: đó là loại hợp pháp - ít nhất, nó được dung thứ. Các trình duyệt luôn được lập trình để đối phó với các thẻ mà họ không hiểu, ngay cả khi điều đó có nghĩa là họ chỉ bỏ qua chúng. Mã HTML này:

Some <b>bold</b> and some <slanted>italic</slanted>.

Sẽ xuất hiện như thế này là mỗi trình duyệt duy nhất:

Một số in đậm và một số in nghiêng.

Hơn nữa, hầu hết các trình duyệt sẽ cho phép bạn định kiểu phần tử đó trong CSS. Vì vậy, nếu bạn thêm định nghĩa CSS sau:

slanted { font-style: italic; }

bây giờ hầu hết các trình duyệt sẽ hiển thị như sau:

Một số in đậm và một số in nghiêng .

Thực sự: hãy thử nó cho chính mình . Ngẫu nhiên, đây là một mẹo mà các nhà phát triển web sử dụng để thử và đảm bảo rằng các thẻ HTML5 mới hiển thị chính xác trong các trình duyệt cũ hơn.

Tuy nhiên, đó không hoàn toàn là bức tranh hoàn chỉnh. Câu trả lời đầy đủ là không, nó không phải là thực hành tốt . Bạn có thể nhận thấy việc tôi sử dụng cụm từ " hầu hết các trình duyệt". Thật không may, tất cả các phiên bản Internet Explorer trước IE9 đều không thực hiện được hành vi này. Trong IE8 trở về trước, đoạn mã trên sẽ vẫn như thế này:

Một số in đậm và một số in nghiêng.

Có một mô tả chi tiết xuất sắc về vấn đề tại Lặn vào HTML5 , nơi bạn cũng sẽ tìm thấy chi tiết về cách giải quyết. Tuy nhiên, cách giải quyết yêu cầu JavaScript để nó không phải là một giải pháp HTML thuần túy và sẽ không hoạt động trong tất cả các tình huống.

Vì vậy, câu trả lời ngắn gọn: chỉ tuân theo các yếu tố HTML tiêu chuẩn và định kiểu chúng theo cách bạn thích trong CSS của mình.


Nó không hợp pháp. Các đặc điểm kỹ thuật xác định những yếu tố được phép. Khả năng phục hồi của các trình duyệt từ lỗi tác giả không làm cho lỗi tác giả trở nên đúng.
Quentin

Tôi có thể tìm thấy nó không hợp pháp ở đâu? Tôi đã thử tìm kiếm trong thông số kỹ thuật HTML, nhưng không thể tìm thấy một tài liệu tham khảo tốt.
Dibbeke

2
@DavidDorward Vâng, tôi thấy quan điểm của bạn. Điều tôi muốn nói là các trình duyệt đảm bảo không bị hỏng khi nhìn thấy một thẻ không xác định - trái ngược với sự thiếu bảo đảm xung quanh, giả sử, một thẻ không được tiết lộ. Vì vậy, có lẽ thuật ngữ chính xác ở đây là "dung thứ" hơn là hợp pháp. Tôi đã cập nhật câu trả lời tương ứng.
Mark Whitaker

@DavidDorward nó hoàn toàn hợp pháp. W3C thậm chí đã đi xa hơn trong thông số HTML5 khi ra lệnh rằng "Giao diện HTMLUn UnknownEuity phải được sử dụng cho các thành phần HTML không được xác định bởi thông số kỹ thuật này." Nếu nó không hợp pháp, họ sẽ tuyên bố như vậy. Tôi nghĩ rằng một Dustup đang xây dựng xem liệu UnknownEuity hay Microformats là cách tiếp cận ngữ nghĩa tốt hơn cho web. Bất kể cái nào tốt hơn, cả hai đều hợp pháp.
gai

1
Từ đặc tả : Không giống như các phiên bản trước của đặc tả HTML, thông số kỹ thuật này xác định một số chi tiết về xử lý bắt buộc đối với các tài liệu không hợp lệ cũng như các tài liệu hợp lệ. Tuy nhiên, mặc dù trong hầu hết các trường hợp, việc xử lý nội dung không hợp lệ được xác định rõ, các yêu cầu tuân thủ đối với tài liệu vẫn rất quan trọng
Quentin

8

Nếu bạn cần giữ ngữ nghĩa <important/>vì những lý do cụ thể, bạn có thể sử dụng XSL để chuyển đổi các thẻ tùy chỉnh của mình thành HTML hợp lệ. Bạn có thể đọc thêm về chủ đề này ở đây:

http://www.w3.org/Style/XSL/WhatIsXSL.html

http://www.4guysfromrolla.com/webtech/081300-2.shtml

http://www.ibm.com/developerworks/xml/l Library / x-ththtml / index.html

http://www.siteexperts.com/tips/xml/ts01/page5.asp

http://www.htmlgoodies.com/beyond/xml/converting-xml-to-html-USE-xsl.html

Bạn vẫn không thể có <important/>đầu ra HTML cuối cùng, nhưng bạn có thể tự động chuyển nó thành thứ gì đó như thế <span class="important"....


8

Có khá nhiều câu trả lời ở đây giải thích lý do tại sao bạn không bao giờ nên tạo thẻ tùy chỉnh của riêng mình. Có thể cho rằng, tất cả chúng đều không chính xác.

Phân tích các thẻ tùy chỉnh của WHATWG kết luận rằng chúng có thể chấp nhận được, tuân thủ tiêu chuẩn (vì việc xử lý các thẻ không được nhận dạng được xác định rõ) và dễ truy cập hơn, ví dụ, tạo kiểu cho một div chung.

<x-accordion> </ x-accordion> không tệ hơn <div class = "accordion"> </ div> theo mọi nghĩa cơ học. Trong trường hợp không có định nghĩa cho "x-accordion" (hoặc hỗ trợ mô hình thành phần), cả hai đều có nghĩa giống nhau, cả hai đều có thể được tạo kiểu theo cùng một cách. Một là HTMLUn UnknownEuity, hai là HTMLDivE bổ sung và bề mặt API của chúng giống hệt nhau.

Những gì bạn nên làm, điều mà OP không làm, là tiền tố tất cả các thẻ tùy chỉnh với 'x-' theo quy ước. Điều này chỉ rõ rằng bạn dự định thẻ này là cục bộ trong tài liệu của bạn và tránh xung đột với các yếu tố thông số kỹ thuật trong tương lai.

Một số ý kiến ​​cho rằng vì một số trình duyệt phổ biến nhất định không xử lý các thẻ tùy chỉnh theo cách tuân thủ tiêu chuẩn, bạn không nên sử dụng chúng. Tuy nhiên, hành vi của các trình duyệt không tuân thủ là vấn đề của riêng nó và tốt nhất là sẽ không ép buộc bạn viết đánh dấu phi ngữ nghĩa. Có cả giải pháp Javascript và không Javascript cho vấn đề đó, chỉ nên áp dụng cho những trình duyệt không tuân thủ mà bạn muốn hỗ trợ cụ thể.

Tất cả những gì đã nói, nếu một thẻ tồn tại trong thông số kỹ thuật (<mark>) bao gồm rõ ràng ý nghĩa ngữ nghĩa của thẻ bạn đã tạo (<highlight>), thì chắc chắn nên sử dụng thẻ hiện có.


Nếu một người muốn đánh dấu một số văn bản (ví dụ "Dm7") để nhấp vào nó sẽ tạo ra một hiệp ước hoạt hình để chơi hợp âm thứ bảy D, liệu cách tiếp cận "x-accordion" có phải là một cách tốt? Nếu Javascript cho accordion sẽ cần thêm thông tin, làm thế nào nên ghi chú tốt nhất? Như <x-accordion data-notes="D2 D3 F3 A3 C4">Dm7</x-accordion>thế nào?
supercat

5

Bạn có thể sử dụng <em /><strong />với CSS tùy chỉnh để thay đổi cách hiển thị.

Mạnh mẽ, đề cập đến tầm quan trọng mạnh mẽ hơn.

Nhấn mạnh, đề cập đến tăng cường nhấn mạnh.


4

Về mặt thực tế, không cần thiết phải sử dụng các thẻ mới để làm nổi bật. Bạn có thể sử dụng emhoặc igắn thẻ nếu bạn thích in nghiêng làm kết xuất mặc định (không phải CSS) và stronghoặc bnếu bạn thích tô đậm như mặc định. Nếu, vì một số lý do, bạn thích kết xuất mặc định như văn bản bình thường, tức là không làm nổi bật, sử dụng span. Trong mỗi trường hợp, bạn có thể sử dụng một classthuộc tính để phân biệt cách sử dụng này với cách sử dụng khác mà bạn có thể có để đánh dấu.

Các đặc tả HTML và các bản nháp (HTML5) không rõ ràng về ngữ nghĩa của các yếu tố này, nhưng điều này không gây ra bất kỳ vấn đề đau đầu nào.


7
-1 Đây là lời khuyên tồi. Các thẻ emstrongnên được sử dụng khi nó đúng về mặt ngữ nghĩa để làm như vậy, không phải khi bạn muốn in đậm hoặc in nghiêng. Bạn có thể thay đổi bản trình bày bằng CSS.
DisgruntledGoat

2

Không, mặc dù được phép thêm các thẻ mới từ một không gian tên khác trong XHTML, việc xử lý các thẻ HTML không được chỉ định sẽ không được khuyến khích.


2

Chà, thật hợp pháp khi bạn sẽ không bị bắt vì làm việc đó. Nhưng nếu những kẻ ám sát từ W3C xuất hiện trước cửa nhà bạn, đừng ngạc nhiên.

Trước hết, các nhà phát triển khác sẽ không biết ý nghĩa của chúng. Trong trường hợp <important><highlight>chúng là như vậy, nhưng nếu bạn sử dụng một cái gì đó như, giả sử, <set>bạn có thể biết bạn đang đề cập đến một bộ toán học, nhưng người khác đọc mã của bạn có thể nhầm nó với thứ khác. Không có thông số kỹ thuật để đưa ra câu trả lời, có thể có rất nhiều nhầm lẫn.

Thứ hai, điều gì sẽ xảy ra nếu W3C quyết định rằng một <important>yếu tố là một ý tưởng tốt, nhưng nghĩ rằng nó có nghĩa là một thông báo khẩn cấp, như

<important>This site is going to be down for maintenance 2/29/2012.</important>

Sau đó, bạn đang say sưa. Trình duyệt và các nhà phát triển đồng nghiệp của bạn sẽ khá bối rối. Họ có thể sẽ buộc bạn phân tích mã của bạn bằng các biểu thức cho đến khi bạn phát điên. Và tất cả chúng ta đều biết làm thế nào mà hóa ra.

Thứ ba, IE <9 không cho phép bạn tạo kiểu cho các phần tử không xác định mà không cần một chút hack. Không phải là một điều lớn, nhưng gây phiền nhiễu.

Cuối cùng, trong trường hợp này, <important><highlight>đã tồn tại! <strong><mark>là những gì bạn đang tìm kiếm. Theo thông số HTML5

Các yếu tố mạnh mẽ thể hiện tầm quan trọng mạnh mẽ cho nội dung của nó.

Phần tử đánh dấu thể hiện một dòng văn bản trong một tài liệu được đánh dấu hoặc tô sáng cho mục đích tham khảo ...

Nếu bạn không sử dụng nó cho "mục đích tham khảo", thì <span>với một lớp sẽ ổn.


2

http://www.w3.org/TR/html5/elements.html

Đây là bản sửa đổi 1.5612.

Tác giả không được sử dụng các yếu tố, thuộc tính hoặc giá trị thuộc tính không được phép của đặc điểm kỹ thuật này hoặc các thông số kỹ thuật áp dụng khác, vì làm như vậy sẽ khiến ngôn ngữ khó mở rộng hơn trong tương lai.


1
Đây là sự khởi đầu của một câu trả lời tuyệt vời; tuy nhiên, để trở nên tuyệt vời, việc thêm một số lý do tại sao hướng dẫn được viết sẽ hữu ích. Ngoài ra, việc bổ sung các chiến lược thay thế cho phép có hiệu quả tương tự, nhưng phù hợp với hướng dẫn thường được xem một cách thuận lợi.
JustinC

1

Bỏ qua mọi người elses ý kiến ​​ở đây.

Đó không phải là thực hành tốt vì hai lý do rất quan trọng:

Đầu tiên, hoàn toàn có thể vào một lúc nào đó, ủy ban tiêu chuẩn quyết định đưa vào một thẻ có tên <important>là kết thúc việc sử dụng nó cho bạn. Chắc chắn, nó có thể mất một lúc .. Nhưng có thể bạn sẽ lãng phí thời gian để xé nó ra sau đó.

Thứ hai, (đây là lý do thực sự), lập trình viên kế thừa mã của bạn sẽ liên tục nói "wtf" theo cách tiếp cận không chuẩn của bạn trong khi rút ra tất cả những điều đó, hoặc, cũng có thể, hoàn toàn bị nhầm lẫn bởi chính bạn là gì Đã làm xong và đơn giản là bỏ cuộc trong thất vọng.

Vì vậy, hãy tốt đẹp. Bạn không bao giờ biết, cuối cùng bạn có thể yêu cầu một trong số họ cho một công việc một ngày nào đó.


0

Không, bạn không thể tạo thẻ HTML của riêng mình, vì sau đó bạn sẽ phải có tất cả các trình duyệt chính để triển khai chúng, hiện tại khi các trình duyệt tìm thấy thẻ không được nhận dạng, chúng sẽ bỏ qua mọi thứ trong đó, vì vậy trừ khi bạn muốn tạo trình duyệt của riêng mình tạo mới Thẻ là vô nghĩa, và thậm chí sau đó chúng sẽ chỉ hoạt động trong trình duyệt của bạn.

Bạn có thể thử gửi trường hợp sử dụng cho họ đến w3c, nhưng tôi nghi ngờ nó sẽ đi đến bất cứ đâu.


0

Không, đó không phải là cách thực hành tốt cho tất cả các lý do được cung cấp bởi tất cả các câu trả lời khác. Thay vì nhắc lại những điểm đó, tôi muốn trình bày một lựa chọn mà tôi chưa từng thấy trong những câu trả lời đó!

Trong trường hợp không có thẻ hiện có ý nghĩa ngữ nghĩa phù hợp với mục tiêu của bạn, bạn có thể sử dụng kết hợp CSS và data-*thuộc tính mới trong thông số HTML 5. Tất nhiên, điều này sẽ hoạt động với hầu hết các thẻ bạn chọn.

Thí dụ:

Lorem ipsum dolor sit amet, 
<span class="important" data-type="important">consectetur adipiscing elit</span>. 
Nullam consequat, felis sit amet suscipit laoreet, 
<span class="highlighted" data-type="highlighted">nisi arcu accumsan arcu</span>, 
vel pulvinar odio magna suscipit mi.

Mặc dù đây không phải là một giải pháp hoàn hảo, vì không có ý nghĩa ngữ nghĩa được xác định rõ ràng cho data-*các thuộc tính, nhưng điều này ít nhất sẽ cho phép bạn cung cấp thông tin bổ sung cho những người biết ý nghĩa của data-typethuộc tính của bạ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.