Làm thế nào để ẩn các yếu tố mà không có chúng chiếm không gian trên trang?


228

Tôi đang sử dụng visibility:hidden để ẩn các yếu tố nhất định, nhưng chúng vẫn chiếm dung lượng trên trang trong khi ẩn.

Làm thế nào tôi có thể làm cho chúng biến mất hoàn toàn một cách trực quan, như thể chúng hoàn toàn không có trong DOM (nhưng không thực sự loại bỏ chúng khỏi DOM)?


Câu hỏi này rất hay, nhưng tôi đang thêm một bình luận vì gần đây tôi thấy mình trong một tình huống mà người khác có thể gặp phải. Tôi cần ẩn một phần tử và giữ nóoffsetTop , và display:nonesẽ đặt thành offsetTop0. Giải pháp của tôi ở đây là sử dụng visibility: hiddensau đó đặt chiều rộng và chiều cao thành 0. Một khi tôi cần làm cho phần tử hiển thị lại, tôi đã xóa ba thuộc tính bằng cách sử dụng Javascript. Một chút giải pháp hacky, nhưng nó hoạt động tốt cho hầu hết các trường hợp sử dụng.
rappatic

Câu trả lời:


302

Hãy thử cài đặt display:noneđể ẩn và thiết lập display:blockđể hiển thị.


nó không thể loại bỏ yếu tố từ dom man. bằng cách sử dụng tùy chọn này cũng có. đọc câu hỏi
Pranay Rana

26
không phải tất cả các mục nên display: block, một số sẽ phải được đặt thành display: inline(chẳng hạn như <span>hoặc <a>hoặc <img>các phần tử DOM).
Mauro

2
@pranay câu hỏi nói để ẩn chúng không xóa chúng khỏi DOM.
Mauro

6
@pranay: Câu hỏi không được thể hiện rõ lắm nhưng Huusom đang giải quyết vấn đề mà người dùng đang gặp phải.
Claudio Redi

1
Một cải tiến: tạo ra một lớp CSS được gọi hiddenvới display: none. Thêm lớp vào một phần tử để ẩn nó, loại bỏ nó hiển thị. Khi gỡ bỏ nó, thuộc displaytính được khôi phục về thành phần mặc định.
Alejandro C De Baca

44

sử dụng phong cách thay vì thích

<div style="display:none;"></div>

1
Thật không may, điều này không làm việc cho tôi - sử dụng màn hình: không ai còn để lại một khoảng trống.
mbuc91

15

Để sử dụng display:nonelà một tùy chọn tốt chỉ cần loại bỏ một phần tử NHƯNG nó cũng sẽ bị xóa cho trình đọc màn hình . Cũng có những cuộc thảo luận nếu nó ảnh hưởng đến SEO. Có một bài viết ngắn, hay về chủ đề đó trên A List Apart

Nếu bạn thực sự chỉ muốn ẩnkhông xóa phần tử, hãy sử dụng tốt hơn:

div {
  position: absolute; 
  left: -999em;
}

Như thế này nó cũng có thể được đọc bởi trình đọc màn hình.

Nhược điểm duy nhất của phương pháp này là, DIV này thực sự được hiển thị và nó có thể ảnh hưởng đến hiệu suất , đặc biệt là trên điện thoại di động.


2
nếu bạn chọn định vị một cái gì đó tuyệt đối bạn có thể chạy trong hầu hết các trường hợp visibility: hidden;, giả sử bạn có các yếu tố tuyệt đối khác, chúng sẽ không có xung đột cho không gian, chỉ là xung đột z-index. Chỉ để che giấu một yếu tố tôi sẽ đi cùngvisibility
Dejan.S

10

Hãy nhìn, thay vì sử visibility: hidden;dụng display: none;. Tùy chọn đầu tiên sẽ ẩn nhưng vẫn chiếm dung lượng và tùy chọn thứ hai sẽ ẩn và không chiếm bất kỳ khoảng trống nào.


6

Câu trả lời cho câu hỏi này là nói sử dụng display: none và display: block, nhưng điều này không giúp ích cho ai đó đang cố gắng sử dụng chuyển tiếp css để hiển thị và ẩn nội dung bằng thuộc tính hiển thị.

Điều này cũng khiến tôi phát điên, bởi vì sử dụng màn hình sẽ giết chết mọi chuyển đổi css.

Một giải pháp là thêm phần này vào lớp sử dụng khả năng hiển thị:

overflow:hidden

Để làm việc này không phụ thuộc vào bố cục, nhưng nó nên giữ nội dung trống trong div mà nó nằm trong đó.


3
Nếu bạn chơi với khả năng hiển thị: ẩn và hiển thị: hiển thị và đặt vị trí phần tử của bạn: cố định bạn sẽ không gặp vấn đề đó, nó giống như phép thuật
John Balvin Arias

6

display: none is Solution, Điều đó che giấu hoàn toàn các yếu tố với không gian của nó.

Câu chuyện về display:nonevisibility: hidden

visibility:hidden có nghĩa là thẻ không hiển thị, nhưng không gian được phân bổ cho nó trên trang.

display:nonecó nghĩa là hoàn toàn che giấu các yếu tố với không gian của nó. (mặc dù bạn vẫn có thể tương tác với nó thông qua DOM)


3

display:noneđể ẩn và thiết lập display:blockđể hiển thị.


1
Anh ta hỏi về việc loại bỏ nó một cách trực quan, "như thể chúng không có trong DOM". Không phải về việc loại bỏ chúng khỏi DOM thực tế.
Arve Systad

câu hỏi không xóa chúng khỏi DOM chỉ để làm cho chúng biến mất. as though they are not in the DOM at all (but without actually removing them from the DOM)
Mauro

@pranay: visibility: hiddenchỉ dừng hiển thị nội dung nhưng vẫn sử dụng không gian dọc / ngang, hiển thị: không loại bỏ không gian dọc / ngang cho phần tử.
Mauro

Không, nó không có. tầm nhìn: ẩn; làm cho phần tử vô hình, nhưng nó vẫn chiếm không gian. không trưng bày; làm cho tài liệu hành xử như thể nó không bao giờ ở đó.
Olly Hodgson

1
Xóa câu trả lời này rồi.
BalusC

3

Toggling displaykhông cho phép chuyển đổi CSS mượt mà. Thay vào đó, chuyển đổi cả visibilitymax-height.

visibility: hidden;
max-height: 0;

Điều này rất hữu ích khi bạn làm việc với hình ảnh động. Bởi vì chúng tôi đang ẩn phần tử bên ngoài khu vực có thể nhìn thấy bằng cách sử dụng một cái gì đó như transform: translateX(-100%). Chúng tôi không muốndisplay: none
zhuhang.jasper

2

Đây là một cách khác để đưa chúng trở lại sau khi hiển thị: không có. không sử dụng display: block / inline, v.v. Thay vào đó (nếu sử dụng javascript), đặt hiển thị thuộc tính css thành '' (tức là để trống)


1
$('#abc').css({"display":"none"});

Điều này ẩn nội dung và cũng không để lại không gian trống.


1

Trên kiến ​​thức của tôi, có thể theo 4 cách

  1. HTML<button style="display:none;"></button>
  2. CSS #buttonId{ display:none; }
  3. jQuery $('#buttonId').prop('display':'none');& $("#buttonId").css('opacity', 0);

1

hiển thị: không có gì là tốt nhất để tránh mất khoảng trắng trên trang


2
Có vẻ như chỉ là một sự lặp lại của các câu trả lời khác.
Pang

0

Sử dụng !importantnếu bạn buộc phải ghi đè các kiểu CSS hiện có.

display: none !important;
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.