Làm thế nào để bạn tạo một div ẩn không tạo ra ngắt dòng hoặc không gian ngang?


354

Tôi muốn có một hộp kiểm ẩn mà không chiếm bất kỳ khoảng trống nào trên màn hình.

Nếu tôi có điều này:

<div id="divCheckbox" style="visibility: hidden">

Tôi không thấy hộp kiểm, nhưng nó vẫn tạo ra một dòng mới.

Nếu tôi có điều này:

<div id="divCheckbox" style="visibility: hidden; display:inline;">

nó không còn tạo ra một dòng mới, mà nó chiếm không gian ngang trên màn hình.

Có cách nào để có một div ẩn không chiếm phòng (dọc hoặc ngang không?


Có bất kỳ sử dụng cho một div như vậy?
Jonno_FTW

6
@Jonno: Nó thường được sử dụng trong AJAX. Giả sử bạn có một danh sách các mục có hình tam giác tiết lộ. Bạn muốn chi tiết, hoặc một cây con, xuất hiện khi người dùng nhấp vào tam giác tiết lộ. Vì vậy, những gì bạn làm là đặt một màn hình <div id = "theID" style = ": none;"> nơi các chi tiết sẽ đi. Sau đó, khi người dùng nhấp vào hình tam giác, bạn di chuyển hình tam giác đến vị trí "nửa chừng" (chỉ về phía đông nam) và thực hiện yêu cầu AJAX để điền vào <div>. Khi yêu cầu AJAX kết thúc, bạn xoay hình tam giác về phía nam và xóa "display: none;" từ phong cách của <div>. Thư viện script.aculo.us thực hiện điều này rất nhiều.
Mike DeSimone

Câu trả lời:


715

Sử dụng display:none;

<div id="divCheckbox" style="display: none;">
  • visibility: hidden ẩn phần tử, nhưng nó vẫn chiếm không gian trong bố cục.

  • display: none loại bỏ hoàn toàn phần tử khỏi tài liệu, nó không chiếm bất kỳ khoảng trống nào.


42
để hiển thị lại div (chỉ trong trường hợp có ai cần như tôi) -<div id="divCheckbox" style="display: inline-block;">
anujin

14
@anujin: Tại sao inline-block? displayGiá trị mặc định cho div là block!
MMM

Có cách nào để làm ngược lại? Để thay đổi một div từ display: nonethành display: inline-blockhoặc tương đương mà không cần div hiển thị hiện đang chiếm dung lượng và di chuyển các phần tử DOM khác của tôi xung quanh?
bpromas

1
có thể đáng để cập nhật câu trả lời để bao gồm thuộc tính HTML toàn cầu được ẩn trong HTML5.1 , về cơ bản giống như nói display: nonemặc dù trực tiếp từ HTML. Tuy nhiên, bất kỳ việc sử dụng displaytài sản nào sẽ ghi đè hành vi của hiddenthuộc tính toàn cục.
Marius Mucenicu

54

Kể từ khi phát hành HTML5, người ta có thể chỉ cần làm:

<div hidden>This div is hidden</div>

Lưu ý: Điều này không được hỗ trợ bởi một số trình duyệt cũ, đáng chú ý nhất là IE <11.

Tài liệu thuộc tính ẩn ( MDN , W3C )


1
Điều này đúng về mặt ngữ nghĩa hơn là ẩn bằng CSS, nó tốt hơn cho khả năng truy cập và nó được hỗ trợ bởi tất cả các trình duyệt chính. Nó sẽ là câu trả lời được chấp nhận vào năm 2020.
Robin Métral

29

Sử dụng style="display: none;". Ngoài ra, có lẽ bạn không cần phải có DIV, chỉ cần đặt kiểu display: nonetrên hộp kiểm có thể là đủ.


Tôi cần ẩn tôi thông báo cảnh báo khi tải trang và muốn hiển thị lại khi nhấp vào nút. Đã thử visibility: hiddennhưng đó là hiển thị không gian trống. style="display: none;"làm việc như một cơ duyên nhỏ :)
sohaiby

8

Ngoài câu trả lời CMS, bạn có thể muốn xem xét đưa kiểu vào biểu định kiểu bên ngoài và gán kiểu cho id, như sau:

#divCheckbox {
display: none;
}

+1, đó thực sự là một gợi ý hay, nhưng làm thế nào để chỉ hiển thị một hộp kiểm mà không ảnh hưởng đến tất cả các hộp kiểm khác?
Owais Qureshi

1
@dotNetSoldier Câu hỏi cũ nhưng cần có câu trả lời ở đây. Bạn có một lớp css được gọi là invis và bạn thêm / xóa nó khỏi hộp kiểm hoặc div theo id bằng cách sử dụng JS.
DanielST

8

Vì bạn nên tập trung vào tính khả dụng và tính tổng quát trong CSS, thay vì sử dụng id để trỏ đến một thành phần bố cục cụ thể (dẫn đến các tệp css lớn hoặc nhiều), thay vào đó, bạn có thể nên sử dụng một lớp thực trong tệp .css được liên kết của mình:

.hidden {
visibility: hidden;
display: none;
}

hoặc cho tối giản:

.hidden {
display: none;
}

Bây giờ bạn có thể chỉ cần áp dụng nó thông qua:

<div class="hidden"> content </div>

Mã này trông sạch sẽ hơn rất nhiều theo cách này! Tôi thích có một lớp học hơn phong cách nội tuyến
Harry Cho

5

Cân nhắc sử dụng <span>để cách ly các phân đoạn đánh dấu nhỏ được tạo kiểu mà không phá vỡ bố cục. Điều này dường như là thành ngữ hơn là cố gắng buộc <div>không hiển thị chính nó - nếu trên thực tế, hộp kiểm tự nó không thể được tạo kiểu theo cách bạn muốn.


4

Hiển thị / ẩn bằng cách nhấp chuột:

<script language="javascript">

    function toggle() {

        var ele = document.getElementById("toggleText");
        var text = document.getElementById("displayText");

        if (ele.style.display == "block") {

            ele.style.display = "none";
            text.innerHTML = "show";
        }
        else {

            ele.style.display = "block";
            text.innerHTML = "hide";
        }
    }
</script>

<a id="displayText" href="javascript:toggle();">show</a> <== click Here

<div id="toggleText" style="display: none"><h1>peek-a-boo</h1></div>

Nguồn: Tại đây


4

Để ngăn hộp kiểm chiếm bất kỳ khoảng trống nào mà không xóa nó khỏi DOM, hãy sử dụng hidden.

<div hidden id="divCheckbox">

Để ngăn hộp kiểm chiếm bất kỳ dung lượng nào và cũng xóa nó khỏi DOM, hãy sử dụng display: none.

<div id="divCheckbox" style="display:none">

3

Để ẩn phần tử một cách trực quan , nhưng giữ nó trong html, bạn có thể sử dụng:

<div style='visibility:hidden; overflow:hidden; height:0; width:0;'>
  [content]
</div>

hoặc là

<div style='visibility:hidden; overflow:hidden; position:absolute;'>
  [content]
</div>

Điều gì có thể đi sai với display:none? Nó loại bỏ hoàn toàn phần tử khỏi html, vì vậy một số chức năng có thể bị phá vỡ nếu chúng cần truy cập vào phần tử ẩn.


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.