2016-02-28 16 views
8

Nếu tôi sử dụng các phần tử tùy chỉnh hoặc không được hỗ trợ trong HTML của mình, chúng vẫn có thể được tạo kiểu và trình duyệt sẽ hiển thị chúng.Cài đặt mặc định của các phần tử HTML không được nhận dạng

Ví dụ: phần tử HTML5 main không được Internet Explorer 11 trở lên hỗ trợ (source). Khi main được hiển thị bởi IE, các quy tắc CSS liên quan đến marginoverflow bị bỏ qua. Điều này ngụ ý rằng giá trị display của phần tử không được nhận dạng là inline.

Cài đặt ban đầu cho yếu tố không được nhận dạng được xác định ở đâu?

(Chú ý: Tôi không hỏi về ưu và nhược điểm của việc sử dụng các yếu tố tùy chỉnh Tôi chỉ muốn biết những gì CSS làm theo mặc định..)

+0

Nếu giá trị hiển thị khác không được nhận ra ... làm cách nào để có các thuộc tính mặc định? Bạn phải kiểm tra spec. Tôi muốn đề nghị nó là trình duyệt cụ thể. = https://www.w3.org/TR/custom-elements/ –

+0

Cảm ơn, @Paulie_D.Tôi có ấn tượng rằng CSS có các quy tắc để xử lý các phần tử không được công nhận (xem [chú thích trong câu trả lời này] (http://stackoverflow.com/a/35688664/3597276)). Quy tắc có thể chỉ là lấy giá trị ban đầu của thuộc tính CSS. Tôi đang cố gắng để tìm nơi trong spec các xử lý được xác định, nhưng tìm kiếm của tôi đã mang lại không có kết quả. –

+0

Điều tôi đang nghĩ là chúng ** không được xác định ... bởi vì nhà phát triển được cho là định nghĩa chúng ... vì vậy nó tùy ý như những gì mỗi trình duyệt thực hiện. –

Trả lời

5

Nó không phải quá nhiều yếu tố không được công nhận, như tất cả yếu tố. Hãy nhớ rằng CSS hỗ trợ XML cũng như HTML. Trong XML, tất cả các yếu tố này không được công nhận

Trong CSS 2.1 spec, section 6.1.1 nói:

6.1.1 giá trị rõ

đại lý tài khoản đầu tiên phải gán một giá trị cụ thể cho từng tài sản dựa về các cơ chế sau đây (theo thứ tự ưu tiên):

  1. Nếu kết quả xếp tầng có giá trị, sử dụng nó. Ngoại trừ điều đó, nếu giá trị là 'kế thừa', giá trị được chỉ định được xác định trong giá trị “Giá trị 'kế thừa' 'bên dưới.

  2. Nếu không, nếu thuộc tính được kế thừa và phần tử không phải là gốc của cây tài liệu, hãy sử dụng giá trị được tính của phần tử gốc .

  3. Nếu không, hãy sử dụng giá trị ban đầu của thuộc tính. Giá trị ban đầu của mỗi thuộc tính được chỉ định trong định nghĩa của thuộc tính.

Theo định nghĩa, yếu tố không xác định sẽ không được đề cập trong style sheet user agent, và vì chúng ta đang nói về hành vi mặc định, sẽ không được đề cập trong style sheet tác giả một trong hai. Vì vậy, 1 không áp dụng.

Thuộc tính hiển thị được xác định trong 9.2.4 The 'display' property. Trong các quy tắc ở đó, nó nói Inherited: no, vì vậy 2 không áp dụng.

Vì vậy, 3 được áp dụng. Một lần nữa từ các quy tắc tại 9.2.4, chúng tôi có Initial: inline, vì vậy các yếu tố nội tuyến.

Đối với các phần tử cấp khối HTML, chúng được chặn theo mặc định đơn giản vì chúng được liệt kê như vậy trong biểu định kiểu của tác nhân người dùng. Tương tự như vậy đối với các giá trị hiển thị khác như table, list-item, v.v ...

+0

Chỉ cần rõ ràng: Không phải dành cho bảng định kiểu tác nhân người dùng, tất cả các phần tử sẽ là 'display: inline' theo mặc định? Tất cả các yếu tố sẽ sử dụng các giá trị ban đầu của thuộc tính CSS? –

+1

@Michael_B - Đúng vậy. Ít hay ít: Có một vài điều trong HTML không thể sao chép trực tiếp trong CSS. Ví dụ, các phần tử biểu mẫu và các hàng và colspan trong bảng. Vì vậy, thỉnh thoảng, các trình duyệt xử lý một số phần tử HTML là "ma thuật". – Alohci

+1

@Michael_B: Có - đây là lý do tại sao khái niệm về giá trị ban đầu tồn tại. – BoltClock

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