Câu trả lời:
Các visibility
tài sản duy nhất cho trình duyệt xem có nên hiển thị một yếu tố hay không. Nó có thể nhìn thấy được ( visible
- bạn có thể thấy nó) hoặc vô hình (hidden
- bạn không thể nhìn thấy nó).
Các display
bất động sản cho các trình duyệt như thế nào để vẽ và hiển thị một phần tử, nếu ở tất cả - dù đó sẽ được hiển thị như một inline
phần tử (tức là nó chảy với văn bản và các yếu tố nội tuyến khác) hoặc một block
yếu tố -level (tức là nó có chiều cao và chiều rộng thuộc tính bạn có thể thiết lập, nó có thể nổi trên mặt nước, vv), hoặc một inline-block
(tức là nó hoạt động như một hộp khối nhưng được đặt inline thay) và một số người khác ( list-item
, table
, table-row
, table-cell
, flex
, vv).
Khi bạn đặt một phần tử thành display: block
but also được đặt visibility: hidden
, trình duyệt vẫn coi nó như một phần tử khối, ngoại trừ bạn không nhìn thấy nó. Giống như cách bạn xếp một hộp màu đỏ lên trên một hộp vô hình: hộp màu đỏ trông giống như nó đang lơ lửng giữa không trung trong khi thực tế, nó nằm trên đầu một hộp vật lý mà bạn không thể nhìn thấy.
Nói cách khác, điều này có nghĩa là các phần tử display
không có none
sẽ vẫn ảnh hưởng đến luồng của các phần tử trong một trang, bất kể chúng có hiển thị hay không. Các hộp bao quanh một phần tử với display: none
sẽ hoạt động như thể phần tử đó chưa bao giờ ở đó (mặc dù nó vẫn nằm trong DOM).
display: none;
, thì phần tử đó bị xóa khỏi DOM? hay tôi hoàn toàn bối rối?
khả năng hiển thị: ẩn;
không trưng bày;
ghi chú thêm:
không trưng bày; sẽ loại bỏ phong cách trực quan / không gian vật lý của các phần tử DOM khỏi DOM, ngược lại khả năng hiển thị: hidden; sẽ không xóa phần tử, mà chỉ cần ẩn nó. Vì vậy, một div chiếm 300px không gian theo chiều dọc trong DOM của bạn sẽ VẪN chiếm 300px chiều ngang khi được đặt thành hiển thị: hidden; nhưng khi được thiết lập để hiển thị: không có; đó là phong cách trực quan và không gian mà nó chiếm được bị ẩn và không gian sau đó được "giải phóng" vì thiếu một từ hay hơn.
[EDIT] - Trước đây tôi đã viết phần trên, và việc tôi không đủ kiến thức hay gặp phải một ngày tồi tệ thì tôi không biết, nhưng thực tế là, phần tử KHÔNG BAO GIỜ bị xóa khỏi hệ thống phân cấp DOM. Tất cả các 'kiểu' hiển thị ở mức khối hoàn toàn 'ẩn' khi sử dụng display: none, trong khi với khả năng hiển thị: hidden; bản thân phần tử bị ẩn nhưng nó vẫn chiếm không gian trực quan trong DOM. Tôi hy vọng điều này sẽ làm mọi thứ rõ ràng
display: none
sẽ không xóa một phần tử khỏi DOM. Phần tử vẫn ở đó, nó chỉ không được hiển thị .