2013-02-11 32 views
13

Tôi đã nhìn thấy một cái gì đó kỳ lạ ngày hôm nay. Nhìn vào các bức ảnh liên quan đến bài viết (dưới đây). Tôi đã thực hiện một đầu vào [type = "text"]. Đó là "1" trên hình ảnh màn hình. Nó css trông giống như vậy;Bóng tối div bên trong đầu vào

table tbody input { 
    width: 40px; 
    border: none; 
    height: 16px; 
} 

Chỉ một đầu vào bình thường, ngoài đầu vào này không có đường viền.

Sau đó, tôi đã xem các công cụ dành cho nhà phát triển và tôi đã thấy một thứ mà tôi chưa từng thấy trước đây. "# Shadow-root" và div bên trong đầu vào.

Tôi biết, các công cụ dành cho nhà phát triển sẽ tự thêm thứ gì đó để hiển thị gợi ý trên trang web gốc. Tuy nhiên, tôi thực sự tò mò tại sao nó thêm một div bên trong một đầu vào, và làm thế nào là thực sự có thể để render bất cứ điều gì như thế trên công cụ webkit.

Công cụ dành cho nhà phát triển Chrome bằng cách nào đó lạ lùng lần trước, tôi đã gặp một số vấn đề với nó. Ví dụ, nó đã tăng gấp đôi tệp style.css và quên tải một tệp khác là nguyên nhân của giao diện khủng khiếp của lịch jquery (chỉ khi được tải trên trình duyệt của tôi).

Có lẽ không phải là một lỗi, nhưng một tính năng, nhưng tôi rất muốn biết thêm về nó

Input visible in browser (it's not straight, adhoc screen)

This input visible from the dev-tools side

Trả lời

9

Đó là DOM bóng.

Chỉ cần nhấp vào các tùy chọn và vô hiệu hóa "Hiện DOM bóng" tùy chọn ..

Dự thảo w3c có thể được tìm thấy tại https://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/shadow/index.html

và liên quan đến Chrome thấy http://chemicaloliver.net/programming/inspecting-the-shadow-dom-in-google-chrome-inspector/

+0

Hi, loại cuối ở đây, nhưng tôi đang gặp một vấn đề mà Shadow DOM (# shadow-root) đang thêm một bre aking line ở đầu trang. Tôi đã tắt tùy chọn Shadow DOM, bất kỳ ý tưởng nào? – andufo

+0

@andufo shadow DOM được thảo luận ở đây chỉ đề cập đến các công cụ dành cho nhà phát triển. Làm thế nào để bạn biết rằng vấn đề của bạn là với Shadow DOM và không thực sự HTML/CSS? –

+0

@ gaby-aka-g-petrioli tôi đã chạy một vài kiểm tra, nó chắc chắn chỉ xảy ra trong Chrome. Có gì đó đang thêm 5 dòng trống sau – andufo

5

Như Gaby Petrioli đã chỉ ra, đây là Shadow DOM. Nó được tạo ra bởi trình duyệt để cung cấp một giao diện đóng gói trong HTML, cho các thư viện của bên thứ ba, et al.

Đóng gói là khái niệm OOP trong đó các đối tượng có thể hạn chế quyền truy cập vào dữ liệu của riêng chúng để mã của bên thứ ba không thể tự ý xóa sạch nó.

HTML thiếu bất kỳ khả năng đóng gói nào, đặc biệt là vấn đề đối với thư viện của bên thứ ba (jQuery, nút twitter, v.v.). Shadow DOM được phát minh để cung cấp chức năng đóng gói cho các subtrees khác nhau của DOM. Điều này đạt được bằng cách giữ các subtrees chức năng tách biệt với cây tài liệu (và mỗi cái khác). Sự tách biệt các subtrees bóng DOM này được gọi là ranh giới bóng tối. quy tắc CSS và truy vấn DOM không vượt qua ranh giới bóng, và do đó cung cấp đóng gói (1)

Như Dominic Cooney đặt nó:. Đây là một vấn đề cơ bản mà làm cho các vật dụng xây dựng trên HTML và JavaScript khó sử dụng: Cây DOM bên trong một tiện ích không được đóng gói từ phần còn lại của trang. Sự thiếu gói gọn này có nghĩa là bảng định kiểu tài liệu của bạn có thể vô tình áp dụng cho các phần bên trong widget; JavaScript của bạn có thể vô tình sửa đổi các phần bên trong tiện ích con; ID của bạn có thể trùng lặp với các ID bên trong tiện ích con; và vân vân.(2)

Đọc thêm:

Basic introductory description of the Shadow DOM

(1) A more complete technical description - the second part of this article explains how to use the Shadow DOM yourself

(2) Dominic Cooney's article: Shadow DOM 101

Shadow DOM - W3C Working Draft 17 June 2014

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