2010-08-29 26 views
7

Ngay cả các thẻ HTML5 mới cũng không đủ để mô tả cấu trúc mà không bị rơi trở lại div s. Có gì khiến tôi dừng lại từ việc thay đổi:Điều gì khiến tôi không thể sử dụng các thẻ tùy ý trong HTML?

<div class="post"> 
    <div class="userinfo"> 
     <span class="name">Casey</span> 
     <img class="avatar" src="..." /> 
    </div> 
    <div class="body"> 
     <p>blah blah blah</p> 
     <p>blah blah blah</p> 
     <p>blah blah blah</p> 
    </div> 
</div> 

vào một cái gì đó như:

<post> 
    <userinfo> 
     <name>Casey</name> 
     <img class="avatar" src="..." /> 
    </userinfo> 
    <pbody> 
     <p>blah blah blah</p> 
     <p>blah blah blah</p> 
     <p>blah blah blah</p> 
    </pbody> 
</post> 

Đối với tôi, ví dụ thứ hai là rất nhiều bụi. Có bất kỳ điều gì (tức là hỗ trợ trình duyệt) ngăn tôi thực hiện việc này không?

(Tôi nhận ra nó đang là những gì, về cơ bản, XML, nhưng trong trường hợp đó, câu hỏi trở thành "những gì hiện hỗ trợ trình duyệt trông giống như cho render các trang web XML?")

+5

gì ngăn cản bạn? Các thông số kỹ thuật, duh. –

+1

Nếu bạn muốn các trang hợp lệ hoạt động trong tất cả các trình duyệt và được Công cụ Tìm kiếm thu thập thông tin - tôi thực sự sẽ tránh xa nó. NHƯNG, không có gì ngăn bạn sử dụng XSLT để chuyển đổi một tài liệu XML thành HTML. Umbraco sử dụng ** rất ** thành công. – Marko

+0

Hãy hỏi ** 'Jon Skeet' ** để tạo ngôn ngữ mới cho bạn. – shamittomar

Trả lời

6

Một lý do là Internet Explorer (và các phiên bản cũ hơn của Firefox) không có dự phòng cho các thẻ không được xác định và bỏ qua chúng cho cả kiểu dáng và lồng nhau. Without a shiv, trang web của bạn sẽ phá vỡ khủng khiếp trong các trình duyệt đó.

+0

Không thể khắc phục được sự khắc phục đó bằng cách thêm các quy tắc tạo kiểu như "hiển thị" cho các thẻ mới/tùy ý? Phong cách không xác định không phải là một lý do đủ để từ chối ý tưởng sử dụng các thẻ xml hợp lệ dưới dạng phần mở rộng ngữ nghĩa cho html5. Nó là vô cùng cần thiết nếu chúng ta cấu trúc tài liệu thành các định dạng có ý nghĩa và có thể tìm kiếm được. W3C đã thêm một số thẻ ngữ nghĩa, nhưng không có cách nào họ có thể dự đoán được tất cả các thẻ cần thiết. HTML5 sử dụng cú pháp XML và cần hỗ trợ khả năng mở rộng XML - với thông báo trước rằng nhà thiết kế PHẢI nói với trình duyệt cách tạo kiểu cho nó. HTML là về đánh dấu, không phải kiểu. – Steve

1

Vấn đề là nó sẽ không xác thực và các thẻ mới sẽ bị bỏ qua.

+1

Tôi đang ấn tượng rằng việc xác thực không có nghĩa gì cả, và đối với vấn đề mới bị bỏ qua, CSS có thể dễ dàng sửa lỗi đó ('post, userinfo, pbody {display: block}'). –

+1

@Casey, hiển thị của bạn không chính xác. 'display: block' [sẽ không sửa vấn đề thẻ bị thiếu trong IE] (http://net.tutsplus.com/tutorials/html-css-techniques/how-to-make-all-browsers-render-html5-mark -up-exact-even-ie6 /): không có kiểu nào được áp dụng cho các phần tử mà IE không hiểu. Bạn cần phải sử dụng một giải pháp (JavaScript hoặc HTC) để có được IE để hiểu các thẻ. Nó cũng không khắc phục được các vấn đề với các phiên bản trước của Firefox, sẽ làm tổ lại các phần tử không xác định. –

1

Hầu hết các trình duyệt sẽ chỉ coi các thẻ là tùy ý (như cách trình duyệt cũ xử lý thẻ HTML5). Không có gì ngăn bạn sử dụng các thẻ của riêng bạn, nhưng nó không phải là cách được chấp nhận tốt để mã HTML. HTML được cho là sử dụng các thẻ được xác định trước.

Nếu bạn quan tâm đến việc mã hóa với các thẻ tùy ý, bạn có thể chỉ cần đi với XML. Bạn có thể định dạng XML bằng XSLT (được sử dụng theo cách tương tự như các bản định kiểu, nhưng mạnh hơn nhiều). Hãy xem tại đây: http://www.w3schools.com/xml/xml_xsl.asp

3

Bạn có thể sử dụng thẻ của riêng mình, nhưng vấn đề là do chúng không chuẩn, trình duyệt sẽ không biết rằng chúng có thể khớp thẻ đóng. Và tất nhiên, tài liệu sẽ không xác nhận là HTML/X-HTML thích hợp.

<blah> 
    This is some <span>test</span> test text with another <bogus>tag</bogus> tag 
    within, which ends with a fake self-closing <tag /> 
</blah> 

Trình duyệt sẽ thấy <blah>, không phải bây giờ cách xử lý và coi đó là "không có gì" và bỏ qua nó. Sau đó, họ sẽ phân tích một cách hạnh phúc về phần tiếp theo, và xem một số văn bản đơn giản, với một khoảng thời gian hợp lệ bên trong. Cuối cùng, họ cũng sẽ đạt được số </blah> và bỏ qua điều đó.

Đây là lý do tại sao Javascript và CSS có để hỗ trợ các chuỗi bình luận mở HTML như là một phần của định nghĩa ngôn ngữ tương ứng của họ:

<script type="text/javascript"> 
<!-- // <--actually a part of the javascript spec, treated as a comment. 
    alert('hey!'); 
//--> 
</script> 

Khi Javascript lần đầu tiên được giới thiệu, vẫn còn nhiều trình duyệt khác trên mạng mà đã hoàn toàn không biết Javascript, và vì vậy họ sẽ bỏ qua các thẻ, và vui vẻ xuất mã Javascript của bạn. Ditto cho CSS.

Nếu bạn thực sự cần thẻ tùy chỉnh, bạn có thể tạo tài liệu dưới dạng XML với DTD của riêng bạn và sử dụng XSLT để chuyển đổi nó thành tài liệu HTML/X-HTML hợp lệ.

+0

về phần 'trình duyệt sẽ không biết rằng chúng có thể khớp với thẻ đóng. 'Tôi thực sự nghĩ khác .. bạn có bất kỳ thử nghiệm nào để xác nhận không? – Pacerier

+0

' Bạn sẽ thấy văn bản này' Hãy thử điều đó trong bất kỳ trình duyệt nào. Nếu thẻ không xác định bị bỏ qua và được chọn để đóng thẻ, bạn sẽ không thấy văn bản. –

+0

@Marc B. Tôi thấy văn bản trong các phiên bản mới nhất của Chrome/FF/IE/Opera/Safari. Tôi tin rằng nó hoạt động trong bất kỳ trình duyệt nào bạn có thể nghĩ rằng có một tỷ lệ lớn hơn 0,1% tổng số người dùng internet – Pacerier

1

Mục tiêu của các thẻ bạn chọn là gì? Nếu mục tiêu của bạn là trình bày thông tin, thì việc sử dụng các div và các cấu trúc định hướng trình bày khác là rất tốt. Các thẻ của bạn trông giống như chúng đang cố gắng mô tả dữ liệu thực tế hơn. Nếu đúng như vậy, thì XML với XSLT biến đổi ở phía máy chủ thành HTML đầu ra để đánh dấu bản trình bày là tốt nhất. Hãy nhớ rằng một trình duyệt chỉ đơn giản là một công cụ dựng hình và nó sử dụng đặc tả HTML vì nó là bản thiết kế của những gì cần làm cho một trang web cụ thể. Trình duyệt không cần phải hiểu thông tin như "bài đăng" hoặc "userInfo" bởi vì nó không có ngữ cảnh để đánh giá thấp việc cần làm từ phối cảnh hiển thị với thông tin đó.CSS có thể giúp một trình duyệt hiểu những gì bạn muốn làm một cách trực quan nhưng tự hỏi mình trước tiên mục đích của việc đánh dấu theo cách đó là gì, để lưu trữ dữ liệu của bạn (kiểu XML) hoặc trình bày nó. Nếu trình bày nó, thì bạn nên đi với các tiêu chuẩn nếu bạn muốn tiếp tục sử dụng một trình duyệt làm công cụ kết xuất của bạn. Chúc may mắn, sẽ là tuyệt vời nếu chúng ta có thể xác định tất cả các đề án trình bày của chúng tôi mặc dù, ý tưởng thú vị!

1

getElementsByTagName không thành công với thẻ tùy chỉnh. Ví dụ,

<acme:mytag id="mytag"> 
    <div id ="x">x</div> 
    <div id ="y">y</div> 
    <div id ="z">z</div> 
</acme:mytag> 

này không thành công với IE8 (Quirks Mode hoặc Standard Mode)

var mytag = document.getElementById('mytag'); // it's found 
var mydivs = mytag.getElementsByTagName ('div'); // but this is always 0 

Trừ thẻ html của bạn đọc

<html XMLNS:acme> 
... 
</html> 
Các vấn đề liên quan