Có một điều ngược lại để hiển thị: không?


196

Ngược lại visibility: hiddenvisibility: visible. Tương tự như vậy, có bất kỳ ngược lại cho display: none?

Nhiều người trở nên bối rối khi tìm ra cách hiển thị một yếu tố khi có display: none, vì nó không rõ ràng như sử dụng visibilitytài sản.

Tôi chỉ có thể sử dụng visibility: hiddenthay vì display: none, nhưng nó không mang lại hiệu quả tương tự, vì vậy tôi sẽ không sử dụng nó.


35
Không chắc chắn lý do tại sao điều này đang nhận được phiếu bầu và yêu cầu đóng. Đó là chủ đề (hiện có 143.368 câu hỏi CSS về Stack Overflow), đây là vấn đề thực tế và là câu hỏi hay để giúp mọi người học ngôn ngữ đúng cách.
Paul D. Chờ đợi

4
@Paul Có lẽ mọi người đã không nhận thấy đó là một câu trả lời tự cho mình và nghĩ rằng đó là một nỗ lực nghiên cứu thấp (vì tất cả nỗ lực nghiên cứu nằm trong câu trả lời)
Richard Tingle

11
Tại sao phải hỏi một câu hỏi nếu câu trả lời của bạn là sao chép / dán bảng từ w3schools.com/cssref/pr_group_display.asp ?
Bill the Lizard

1
@RichardTingle: à, điểm tốt. @MohammadAreebSiddiq: aw, tôi không nghĩ câu trả lời của bạn cần phải xóa. Chỉ cần loại bỏ danh sách lớn của tất cả các displaygiá trị có thể sẽ ổn. (Và đó chỉ là ý kiến ​​của tôi tất nhiên: có lẽ mọi người thực sự thích danh sách đó ở đó.)
Paul D. Waite

bạn thực sự thực sự thực sự nên làm cho câu trả lời của Ilya Streltsyn được chấp nhận. Ilya đưa ra một "phiên bản" hiển thị: không có cái nào ngược lại, giải quyết vấn đề thực tế nằm dưới câu hỏi của bạn, trong khi câu trả lời bạn chọn chấp nhận, về bản chất, chỉ nói "không". Điều chắc chắn là đúng, nhưng rất ít hữu ích hơn nhiều. Điều này là dành cho các lập trình viên, không phải cho các nhà ngôn ngữ học.
mathheadinclouds

Câu trả lời:


176

display: nonekhông có nghĩa đen giống như visibility:hiddenkhông.

Các visibilitybất động sản quyết định liệu một yếu tố có thể nhìn thấy hay không. Do đó, nó có hai trạng thái ( visiblehidden) trái ngược với nhau.

Các displaybất động sản, tuy nhiên, quyết định những gì quy tắc bố trí một phần tử sẽ làm theo. Có nhiều loại khác nhau của quy tắc cho cách yếu tố sẽ đặt mình ra trong CSS, do đó là những giá trị khác nhau ( block, inline, inline-blockvv - xem tài liệu cho các giá trị ở đây ).

display:none loại bỏ hoàn toàn một yếu tố khỏi bố cục trang, như thể nó không có ở đó.

Tất cả các giá trị khác displaykhiến cho phần tử trở thành một phần của trang, do đó, theo một nghĩa nào đó, tất cả chúng đều ngược lại display:none.

Nhưng không có một giá trị nào là điều ngược lại trực tiếp display:none- giống như không có kiểu tóc nào trái ngược với "hói".


2
Tôi nhận thấy bạn đã đề cập display: initialtrong phần tự trả lời đã bị xóa - đối với các trình duyệt triển khai CSS2.1, điều đó đồng nghĩa với display: inline. Nó không đặt lại displayvề mặc định của trình duyệt cho một thành phần nhất định - đó không phải là "giá trị ban đầu" nghĩa là gì.
BoltClock

26
phiếu bầu của tôi cho ví dụ 'hói' :) Ví dụ rất dễ hiểu!
Jesper Rønn-Jensen

1
Toàn bộ đọc qua tôi đang nghĩ về bản thân mình "ví dụ tuyệt vời, vâng, tất cả đều trái ngược với display:none" sau đó bạn đọc "giống như không có kiểu tóc nào trái ngược với hói " Wow cộng 1, độc đáo.
Chef_Code

2
Bất kỳ kiểu tóc là đối nghịch của hói.
AdjuncProfigatorFalcon

@AdjuncProfigatorFalcon: tốt, loại. Tôi muốn nói rằng một cái đầu cạo ở vị trí số một ít hơn nhiều so với hói so với cá đối.
Paul D. Chờ

83

Một điều ngược lại thực sự display: nonelà không có (chưa).

Nhưng display: unsetlà rất gần và làm việc trong hầu hết các trường hợp.

Từ MDN (Mạng lưới nhà phát triển Mozilla):

Từ khóa CSS không được đặt là sự kết hợp của các từ khóa ban đầu và kế thừa. Giống như hai từ khóa toàn CSS này, nó có thể được áp dụng cho bất kỳ thuộc tính CSS nào, bao gồm cả tốc ký CSS. Từ khóa này đặt lại thuộc tính về giá trị được kế thừa của nó nếu nó kế thừa từ cha mẹ của nó hoặc thành giá trị ban đầu nếu không. Nói cách khác, nó hoạt động giống như từ khóa kế thừa trong trường hợp đầu tiên và giống như từ khóa ban đầu trong trường hợp thứ hai.

(nguồn: https://developer.mozilla.org/docs/Web/CSS/unset )

Cũng lưu ý rằng display: reverthiện đang được phát triển. Xem MDN để biết chi tiết.


Thế còn display: initial?
Flimm

31

Khi thay đổi thành phần displaytrong Javascript, trong nhiều trường hợp, một tùy chọn phù hợp để 'hoàn tác' kết quả element.style.display = "none"element.style.display = "". Thao tác này sẽ xóa displaykhai báo khỏi stylethuộc tính, hoàn nguyên giá trị thực của thuộc displaytính về giá trị được đặt trong biểu định kiểu cho tài liệu (về mặc định của trình duyệt nếu không được xác định lại ở nơi khác). Nhưng cách tiếp cận đáng tin cậy hơn là có một lớp trong CSS như

.invisible { display: none; }

và thêm / xóa tên lớp này thành / từ element.className.


2
Nếu bạn muốn ghi đè .element { display: none }(ví dụ như được định nghĩa trong CSS lib) .element { display: '' !important }thì nó sẽ không hoạt động. Bạn phải sử dụng.element { display: unset !important }
tanguy_k

2
Tôi đã nói về "hoàn tác" chỉ display:nonetrong JavaScript. Tất nhiên, chuỗi trống sẽ không hoạt động trong CSS, vì đó là giá trị không hợp lệ. Hovewer, display: unsetbạn đề nghị sẽ không khôi phục, ví dụ: mặc định display:blockcho a <div>hoặc mặc định display:table-rowcho a <tr>, nó thực sự biến mọi thứ thành display:inline(giống như display:initial). Để khôi phục giá trị mặc định của trình duyệt cho phần tử, có display:revert, nhưng nó không được hỗ trợ tốt ( caniuse.com/#feat=css-revert-value ).
Ilya Streltsyn

Đây phải là câu trả lời được chấp nhận. Câu trả lời được chấp nhận có một so sánh tốt với 'ngược lại với hói', nhưng không giúp được gì cho lập trình viên nghèo khi phải đối phó với việc thực hiện "làm hói" - "bây giờ, đưa tóc trở lại". Câu trả lời này cho bạn biết làm thế nào để đối phó với vấn đề thực tế đó. Element.style.display = '' dễ bị lỗi, vì "tóc cũ" có thể không phải là màn hình mặc định, nhưng 'chặn' hoặc 'ô bảng' hoặc bất cứ điều gì. Loại bỏ lớp ".invisible", như ở đây, là cách thực hiện miễn phí lỗi "đưa tóc trở lại ngay bây giờ", theo như tôi có thể thấy. Vì vậy, hãy làm như thế này, luôn luôn
mathheadinclouds

6

bạn có thể dùng

display: normal;

Nó hoạt động như bình thường .... Đó là một hack nhỏ trong css;)


2
Tại sao điều này nhận được xuống cấp? Đây có phải là một cách xấu để làm điều đó hay? Nó hoạt động tốt cho các tablerows, nhưng tôi có nên sử dụng cái gì khác không?
Benjamin Karlog

4
Giá trị 'bình thường' không phải là giá trị hợp lệ cho thuộc displaytính, vì vậy nó chỉ bị bỏ qua và hoạt động hiệu quả như element.style.display = ''chuyển nhượng (xem câu trả lời của tôi ở trên).
Ilya Streltsyn

27
Vì vậy, nói cách khác, bạn có thể đã sử dụng display: chunk norris;cho cùng một hiệu ứng, với một cú đá nhiều hơn một chút.
Kevin B

1
Nếu bạn muốn ghi đè .element { display: none }(ví dụ như được định nghĩa trong CSS lib) .element { display: normal !important }thì nó sẽ không hoạt động. Bạn phải sử dụng.element { display: unset !important }
tanguy_k

4

Tôi sử dụng display:block; nó làm việc cho tôi


Điều đó chỉ hữu ích cho các yếu tố mà bạn muốn được hiển thị block, ví dụ , đó không phải là những gì bạn muốn cho một inlineyếu tố như <span>.
Flimm

3

Giống như Paul giải thích không có nghĩa đen đối với màn hình: không có gì trong HTML vì mỗi thành phần có màn hình mặc định khác nhau và bạn cũng có thể thay đổi màn hình với kiểu lớp hoặc kiểu nội tuyến, v.v.

Tuy nhiên, nếu bạn sử dụng một cái gì đó như jQuery, các hàm hiển thị và ẩn của chúng hoạt động như thể không có gì trái ngược với hiển thị. Khi bạn ẩn, và sau đó hiển thị lại một phần tử, nó sẽ hiển thị chính xác theo cách tương tự như trước khi nó bị ẩn. Họ làm điều này bằng cách lưu trữ giá trị cũ của thuộc tính hiển thị khi ẩn phần tử để khi bạn hiển thị lại, nó sẽ hiển thị giống như trước khi bạn ẩn nó. https://github.com/jquery/jquery/blob/740e190223d19a114d5373758127285d14d6b71e/src/css.js#L180

Điều này có nghĩa là nếu bạn đặt div chẳng hạn để hiển thị nội tuyến hoặc khối nội tuyến và bạn ẩn nó và sau đó hiển thị lại, nó sẽ lại hiển thị dưới dạng hiển thị nội tuyến hoặc khối nội tuyến giống như trước đây

<div style="display:inline" >hello</div>
<div style="display:inline-block">hello2</div>
<div style="display:table-cell" >hello3</div>

kịch bản:

  $('a').click(function(){
        $('div').toggle();
    });

Lưu ý rằng thuộc tính hiển thị của div sẽ không đổi ngay cả sau khi nó bị ẩn (display: none) và hiển thị lại.


1
"Hiển thị: ô bảng" là cái tôi cần. Không được đề cập đến bất kỳ câu trả lời khác.
uốn cong

1

Trong trường hợp biểu định kiểu thân thiện với máy in, tôi sử dụng như sau:

/* screen style */
.print_only { display: none; }

/* print stylesheet */
div.print_only { display: block; }
span.print_only { display: inline; }
.no_print { display: none; }

Tôi đã sử dụng điều này khi tôi cần in một biểu mẫu có chứa các giá trị và các trường đầu vào rất khó in. Vì vậy, tôi đã thêm các giá trị được bọc trong thẻ span.print_only (div.print_only đã được sử dụng ở nơi khác) và sau đó áp dụng lớp .no_print cho các trường đầu vào. Vì vậy, trên màn hình, bạn sẽ thấy các trường đầu vào và khi được in, chỉ có các giá trị. Nếu bạn muốn nhận được sự ưa thích, bạn có thể sử dụng JS để cập nhật các giá trị trong thẻ span khi các trường được cập nhật nhưng điều đó không cần thiết trong trường hợp của tôi. Có lẽ không phải là giải pháp thanh lịch nhất nhưng nó hiệu quả với tôi!


1

Bạn có thể sử dụng display: block

Thí dụ :

<!DOCTYPE html>
<html>
<body>

<p id="demo">Lorem Ipsum</p>

<button type="button" 
onclick="document.getElementById('demo').style.display='none'">Click Me!</button>
<button type="button" 
onclick="document.getElementById('demo').style.display='block'">Click Me!</button>

</body>
</html> 

0

Tôi gặp phải thử thách này khi xây dựng một ứng dụng mà tôi muốn ẩn một bảng cho một số người dùng nhất định nhưng không phải cho những người khác.

Ban đầu tôi thiết lập nó dưới dạng display: none nhưng sau đó display: inline-block cho những người dùng tôi muốn xem nhưng tôi gặp phải sự cố định dạng mà bạn có thể mong đợi (các cột hợp nhất hoặc nói chung là lộn xộn).

Cách tôi làm việc xung quanh nó là hiển thị bảng trước và sau đó thực hiện "display: none" cho những người dùng mà tôi không muốn nhìn thấy nó. Bằng cách này, nó được định dạng bình thường nhưng sau đó biến mất khi cần thiết.

Một chút giải pháp bên nhưng có thể giúp được ai đó!


0

ngược lại với 'none' là 'flex' trong khi làm việc với phản ứng gốc.


-2

khả năng hiển thị: ẩn sẽ ẩn phần tử nhưng phần tử là của chúng với DOM. Và trong trường hợp hiển thị: không có phần nào sẽ xóa phần tử khỏi DOM.

Vì vậy, bạn có tùy chọn cho phần tử để ẩn hoặc bỏ ẩn. Nhưng một khi bạn xóa nó (ý tôi là không hiển thị) thì nó không có giá trị ngược lại. display có một vài giá trị như display: block, display: inline, display: inline-block và nhiều cái khác. bạn có thể kiểm tra nó từ W3C.


2
Tại sao không phải là bất kỳ giá trị khác cho display?
Paul D. Chờ đợi

1
Đây có phải là một danh sách toàn diện? Nó không thể.
Ry-


-3

Bạn có thể sử dụng display:block;và cũng có thể thêmoverflow:hidden;


1
Xin vui lòng đọc câu trả lời hiện có trước khi đóng góp của riêng bạn. Có một câu trả lời hay , được đánh giá cao và được chấp nhận từ tháng 5 năm ngoái và cũng có một câu trả lời với tổng số phiếu tiêu cực ít nhiều giống với bạn.
Quentin

Tôi thấy câu trả lời. Hiển thị: Unset không hoạt động tốt như khối Display :. Ý kiến ​​của tôi :) @Quentin
Bel

display: blockkhông hoạt động tốt trên một <span>hoặc một <td>câu trả lời và câu trả lời trước đó đã được đề cập display: block.
Quentin

2
Bạn đã chỉnh sửa câu trả lời để đề cập overflow: hidden. Tại sao? Điểm thêm vào đó là gì? Nó không có gì để làm với hoàn tác a display: none.
Quentin

-4

"Ngược lại" tốt nhất sẽ là trả nó về giá trị mặc định là:

display: inline

Chỉ muốn làm rõ rằng thuộc tính hiển thị không có giá trị mặc định, tuy nhiên phần tử html có. Giá trị mặc định của DIV sẽ được hiển thị: block, SPAN sẽ mặc định hiển thị: inline. Nhưng thuộc tính hiển thị trên chính nó không có giá trị mặc định.
kevinius
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.