มีสิ่งที่ตรงกันข้ามไหมที่จะแสดง: ไม่มี?


197

ตรงข้ามคือvisibility: hidden visibility: visibleในทำนองเดียวกันมีสิ่งใดที่ตรงกันข้ามdisplay: noneหรือ?

หลายคนสับสนในการหาวิธีแสดงองค์ประกอบเมื่อมีdisplay: noneเนื่องจากไม่ชัดเจนเท่ากับการใช้visibilityคุณสมบัติ

ฉันสามารถใช้visibility: hiddenแทนได้display: noneแต่มันไม่ได้ให้ผลเหมือนกันดังนั้นฉันจึงไม่ไปด้วย


35
ไม่แน่ใจว่าทำไมสิ่งนี้ถึงได้ลงคะแนนเสียงและคำขอปิด มันเป็นหัวข้อ (ปัจจุบันมี 143,368 คำถาม CSS เกี่ยวกับ Stack Overflow) มันเป็นปัญหาจริงของโลกและเป็นคำถามที่ดีที่ช่วยให้ผู้คนเรียนรู้ภาษาได้อย่างถูกต้อง
Paul D. Waite

4
@ Paul บางทีคนที่ไม่ได้แจ้งให้ทราบว่ามันเป็นคำตอบของตัวเองและคิดว่ามันเป็นความพยายามของการวิจัยในระดับต่ำ (เพราะความพยายามทั้งหมดวิจัยที่อยู่ในคำตอบ)
ริชาร์ดซ่า

11
ทำไมต้องถามคำถามหากคำตอบของคุณคือการคัดลอก / วางตารางจากw3schools.com/cssref/pr_class_display.asp ?
Bill the Lizard

1
@ RichardTingle: อาจุดดี @MohammadAreebSiddiq: แย่ฉันไม่คิดว่าคำตอบของคุณจะต้องถูกลบ เพียงแค่ลบรายการใหญ่ของdisplayค่าที่เป็นไปได้ทั้งหมดจะถูกปรับ (และเป็นเพียงความเห็นของฉันแน่นอน: บางทีคนชอบรายการที่อยู่ในนั้นจริงๆ)
Paul D. Waite

คุณควรจะทำให้คำตอบของ Ilya Streltsyn เป็นที่ยอมรับ Ilya แสดง "รุ่น" ของการแสดงผล: ไม่มีสิ่งใดที่ตรงข้ามกันซึ่งจะแก้ปัญหาที่เกิดขึ้นจริงในเชิงคำถามของคุณในขณะที่คำตอบที่คุณเลือกที่จะยอมรับเป็นสาระสำคัญเพียงแค่พูดว่า "ไม่" ซึ่งแน่นอนว่าเป็นเรื่องจริง แต่มีประโยชน์น้อยกว่ามาก นี่สำหรับโปรแกรมเมอร์ไม่ใช่สำหรับนักภาษาศาสตร์
mathheadinclouds

คำตอบ:


178

display: noneไม่ได้มีตัวอักษรเหมือนvisibility:hiddenกัน

visibilityคุณสมบัติตัดสินใจว่าองค์ประกอบที่สามารถมองเห็นได้หรือไม่ ดังนั้นจึงมีสองสถานะ ( visibleและhidden) ซึ่งอยู่ตรงข้ามกัน

อย่างไรก็ตามdisplayคุณสมบัติจะตัดสินใจว่าสิ่งใดจะเป็นไปตามกฎการจัดวางองค์ประกอบ มีกฎหลายชนิดที่แตกต่างกันสำหรับองค์ประกอบที่จะวางโครงสร้างตัวเองใน CSS ดังนั้นจึงมีค่าที่แตกต่างกัน (block , inline, inline-blockฯลฯ - ดูเอกสารสำหรับค่าเหล่านี้ได้ที่นี่ )

display:none ลบองค์ประกอบออกจากเค้าโครงหน้าทั้งหมดราวกับว่าไม่ได้อยู่ที่นั่น

ค่าอื่น ๆ ทั้งหมดสำหรับ displayสาเหตุองค์ประกอบจะเป็นส่วนหนึ่งของหน้าดังนั้นในความรู้สึกที่พวกเขากำลังทั้งหมดที่display:noneตรงข้ามกับ

แต่ไม่มีค่าใดที่เป็นการสนทนาโดยตรงdisplay:noneเช่นเดียวกับที่ไม่มีทรงผมที่ตรงข้ามกับ "หัวล้าน"


2
ผมสังเกตเห็นคุณกล่าวถึงdisplay: initialในที่ถูกลบคำตอบตัวเอง - เบราว์เซอร์ดำเนินการ CSS2.1 display: inlineก็ตรงกันกับ ไม่ได้รีเซ็ตdisplayเป็นค่าเริ่มต้นของเบราว์เซอร์สำหรับองค์ประกอบที่กำหนดนั่นไม่ใช่ความหมาย "ค่าเริ่มต้น"
BoltClock

26
การลงคะแนนของฉันสำหรับตัวอย่าง 'หัวล้าน' :) ตัวอย่างที่เข้าใจง่ายมาก!
Jesper Rønn-Jensen

1
การอ่านทั้งหมดที่ฉันคิดกับตัวเองของฉัน "ตัวอย่างที่ยอดเยี่ยมอ๋อใช่พวกเขาทั้งหมดตรงข้ามกับdisplay:none" แล้วคุณอ่าน "เหมือนไม่มีทรงผมที่ตรงข้ามกับหัวล้าน " ว้าวบวก 1 ใส่อย่างดี
Chef_Code

2
ทรงผมใด ๆ ที่อยู่ตรงข้ามกับหัวล้าน
AdjunctProfessorFalcon

@AdjunctProfessorFalcon: ก็ดี ฉันว่าหัวโกนที่หมายเลขหนึ่งน้อยกว่าหัวล้านกว่ากระบอก
Paul D. Waite

84

ตรงกันข้ามกับที่แท้จริงdisplay: noneยังไม่มี (ยัง)

แต่display: unsetใกล้มากและใช้งานได้ในกรณีส่วนใหญ่

จากMDN (Mozilla Developer Network):

คำหลัก CSS ที่ไม่ได้ตั้งค่าคือการรวมกันของคำหลักเริ่มต้นและสืบทอด เช่นเดียวกับคำสำคัญอื่น ๆ ของ CSS กว้าง ๆ มันสามารถใช้กับคุณสมบัติ CSS ใด ๆ รวมถึง CSS ย่อทั้งหมด คีย์เวิร์ดนี้รีเซ็ตคุณสมบัติเป็นค่าที่สืบทอดถ้ามันสืบทอดจากพาเรนต์หรือเป็นค่าเริ่มต้นหากไม่ใช่ กล่าวอีกนัยหนึ่งมันจะทำงานเหมือนคำหลักที่สืบทอดในกรณีแรกและเหมือนคำหลักเริ่มต้นในกรณีที่สอง

(ที่มา: https://developer.mozilla.org/docs/Web/CSS/unset )

โปรดทราบว่าdisplay: revertขณะนี้มีการพัฒนา ดูMDNสำหรับรายละเอียด


เกี่ยวกับdisplay: initialอะไร
Flimm

31

เมื่อมีการเปลี่ยนแปลงขององค์ประกอบdisplayใน Javascript ในหลายกรณีเป็นตัวเลือกที่เหมาะสมในการ 'ยกเลิก' ผลมาจากการมีelement.style.display = "none" element.style.display = ""สิ่งนี้จะลบการdisplayประกาศจากstyleแอ็ตทริบิวต์ซึ่งจะคืนค่าdisplayคุณสมบัติที่แท้จริงให้กลับเป็นค่าที่ตั้งไว้ในสไตล์ชีทสำหรับเอกสาร (เป็นค่าเริ่มต้นของเบราว์เซอร์ แต่วิธีการที่เชื่อถือได้มากขึ้นคือการมีคลาสใน CSS เช่น

.invisible { display: none; }

และเพิ่ม / element.classNameไปลบชื่อชั้นนี้จาก


2
หากคุณต้องการแทนที่.element { display: none }(เช่นกำหนดใน CSS lib) .element { display: '' !important }จะไม่สามารถใช้งานได้ คุณต้องใช้.element { display: unset !important }
tanguy_k

2
ฉันบอกเกี่ยวกับ "การเลิกทำ" display:noneใน JavaScript เท่านั้น แน่นอนสตริงว่างจะไม่ทำงานใน CSS เนื่องจากเป็นค่าที่ไม่ถูกต้อง อย่างไรก็ตามdisplay: unsetคุณแนะนำว่าจะไม่กู้คืนเช่นค่าเริ่มต้นdisplay:blockสำหรับ a <div>หรือค่าเริ่มต้นdisplay:table-rowสำหรับ a <tr>จะเปลี่ยนทุกอย่างให้เป็นdisplay:inline(อย่างเช่นdisplay:initial) หากต้องการคืนค่าเริ่มต้นของเบราว์เซอร์สำหรับองค์ประกอบมีอยู่display:revertแต่ก็ไม่ได้รับการสนับสนุนอย่างดี ( caniuse.com/#feat=css-revert-value )
Ilya Streltsyn

นี่ควรเป็นคำตอบที่ยอมรับได้ คำตอบที่ได้รับการยอมรับมีการเปรียบเทียบที่ดีกับ 'ตรงข้ามกับหัวล้าน' แต่ไม่ทำอะไรเลยที่จะช่วยโปรแกรมเมอร์ที่ยากจนในการจัดการกับการใช้ "ทำให้หัวล้าน" - "ตอนนี้เอาผมกลับ" คำตอบนี้บอกวิธีการจัดการกับปัญหาที่เกิดขึ้นจริง Element.style.display = '' เกิดข้อผิดพลาดได้ง่ายเพราะ "ผมเก่า" อาจไม่ใช่จอแสดงผลเริ่มต้น แต่ 'บล็อก' หรือ 'เซลล์ตาราง' หรืออะไรก็ตาม การลบคลาส ".invisible" ที่นี่เป็นเพียงการดำเนินการโดยไม่มีข้อบกพร่องของ "ใส่ผมกลับมาตอนนี้" เท่าที่ฉันเห็น ดังนั้นทำแบบนี้เสมอ
mathheadinclouds

6

คุณสามารถใช้ได้

display: normal;

มันทำงานได้ตามปกติ .... มันเป็นแฮ็คขนาดเล็กใน css;)


2
ทำไมสิ่งนี้ถึงได้รับการโหวตต่ำ นี่เป็นวิธีที่ไม่ดีที่จะทำหรือ? มันใช้งานได้ดีสำหรับ tablerows แต่ฉันควรใช้อย่างอื่นหรือไม่
Benjamin Karlog

4
ค่า 'ปกติ' ไม่ใช่ค่าที่ถูกต้องสำหรับdisplayคุณสมบัติดังนั้นมันจึงถูกละเว้นและทำงานได้อย่างมีประสิทธิภาพเช่นการelement.style.display = ''มอบหมาย (ดูคำตอบของฉันด้านบน)
Ilya Streltsyn

27
ดังนั้นอาจกล่าวได้ว่าคุณสามารถใช้เอdisplay: chunk norris;ฟเฟกต์เดียวกันได้ด้วยการเตะเพิ่มอีกเล็กน้อย
Kevin B

1
หากคุณต้องการแทนที่.element { display: none }(เช่นกำหนดใน CSS lib) .element { display: normal !important }จะไม่สามารถใช้งานได้ คุณต้องใช้.element { display: unset !important }
tanguy_k

4

ฉันใช้ display:block; มันได้ผลกับฉัน


เท่านั้นที่จะเป็นประโยชน์สำหรับองค์ประกอบที่คุณต้องการที่จะแสดงเป็นblockมันไม่ใช่สิ่งที่คุณต้องการโดยทั่วไปสำหรับinlineองค์ประกอบเหมือน<span>เช่น
Flimm

3

เช่นเดียวกับ Paul อธิบายว่าไม่มีตัวอักษรตรงข้ามกับจอแสดงผล: ไม่มีใน HTML เนื่องจากแต่ละองค์ประกอบมีจอแสดงผลเริ่มต้นที่แตกต่างกันและคุณสามารถเปลี่ยนการแสดงผลด้วยคลาสหรืออินไลน์สไตล์เป็นต้น

อย่างไรก็ตามหากคุณใช้บางอย่างเช่น jQuery ฟังก์ชั่นการแสดงและซ่อนของพวกเขาจะทำงานเหมือนกับว่าไม่มีการแสดงผลที่ตรงกันข้าม เมื่อคุณซ่อนจากนั้นแสดงองค์ประกอบอีกครั้งมันจะแสดงในลักษณะเดียวกับที่ทำก่อนที่มันจะถูกซ่อน พวกเขาทำสิ่งนี้โดยการเก็บค่าเก่าของคุณสมบัติการแสดงผลในการซ่อนองค์ประกอบเพื่อที่เมื่อคุณแสดงมันอีกครั้งมันจะแสดงในลักษณะเดียวกับที่มันทำก่อนที่คุณจะซ่อนมัน https://github.com/jquery/jquery/blob/740e190223d19a114d5373758127285d14d6b71e/src/css.js#L180

ซึ่งหมายความว่าหากคุณตั้งค่า div เพื่อแสดง inline หรือ inline-block และคุณซ่อนมันแล้วแสดงอีกครั้งมันจะแสดงอีกครั้งเป็น display inline หรือ inline-block เหมือนเดิม

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

สคริปต์:

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

โปรดสังเกตว่าคุณสมบัติการแสดงผลของ div จะคงที่แม้จะถูกซ่อนอยู่ (display: none) และแสดงอีกครั้ง


1
"display: table-cell" เป็นสิ่งที่ฉันต้องการ ไม่ได้กล่าวถึงคำตอบอื่น ๆ
bendecko

1

ในกรณีของสไตล์ชีทที่เหมาะกับเครื่องพิมพ์ฉันใช้สิ่งต่อไปนี้:

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

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

ฉันใช้สิ่งนี้เมื่อฉันต้องการพิมพ์แบบฟอร์มที่มีค่าและฟิลด์อินพุตนั้นพิมพ์ได้ยาก ดังนั้นฉันจึงเพิ่มค่าที่ห่อไว้ในแท็ก span.print_only (div.print_only ถูกใช้ที่อื่น) จากนั้นนำคลาส. no_print ไปใช้กับฟิลด์อินพุต ดังนั้นบนหน้าจอคุณจะเห็นฟิลด์อินพุตและเมื่อพิมพ์จะมีเฉพาะค่า หากคุณต้องการจินตนาการคุณสามารถใช้ JS เพื่ออัปเดตค่าในแท็ก span เมื่อฟิลด์ถูกอัพเดต แต่นั่นไม่จำเป็นในกรณีของฉัน อาจไม่ใช่วิธีที่ดีที่สุด แต่มันใช้งานได้สำหรับฉัน!


1

คุณสามารถใช้ display: block

ตัวอย่าง:

<!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

ฉันพบกับความท้าทายนี้เมื่อสร้างแอพที่ฉันต้องการตารางที่ซ่อนอยู่สำหรับผู้ใช้บางคน แต่ไม่ใช่สำหรับคนอื่น

ตอนแรกฉันตั้งค่าเป็น display: none แต่แล้ว display: inline-block สำหรับผู้ใช้ที่ฉันต้องการเห็น แต่ฉันประสบปัญหาการจัดรูปแบบที่คุณอาจคาดหวัง (คอลัมน์รวมหรือยุ่งโดยทั่วไป)

วิธีที่ฉันหลีกเลี่ยงมันคือการแสดงตารางก่อนแล้วจึงทำ "display: none" สำหรับผู้ใช้ที่ฉันไม่ต้องการเห็นมัน วิธีนี้มันจัดรูปแบบตามปกติ แต่ก็หายไปได้ตามต้องการ

บิตของการแก้ปัญหาด้านข้าง แต่อาจช่วยใครบางคน!



-2

ทัศนวิสัย: ซ่อนจะซ่อนองค์ประกอบ แต่องค์ประกอบเป็นของพวกเขากับ DOM และในกรณีที่แสดง: ไม่มีมันจะลบองค์ประกอบจาก DOM

ดังนั้นคุณมีตัวเลือกสำหรับองค์ประกอบที่จะซ่อนหรือเลิกซ่อน แต่เมื่อคุณลบ (ฉันหมายถึงไม่แสดงเลย) มันจะไม่ตรงข้ามกับค่าที่ชัดเจน จอแสดงผลมีหลายค่าเช่น display: block, display: inline, display: inline-block และอื่น ๆ อีกมากมาย คุณสามารถตรวจสอบได้จาก W3C


2
ทำไมไม่ให้ค่าอื่น ๆ มาdisplay?
Paul D. Waite

1
นี่ควรจะเป็นรายการที่ครอบคลุมหรือไม่? มันไม่ใช่.
Ry-


-3

คุณสามารถใช้สิ่งนี้display:block;และเพิ่มoverflow:hidden;


1
โปรดอ่านคำตอบที่มีอยู่ก่อนที่จะมีส่วนร่วมของคุณเอง มีคำตอบที่ดีดีโหวตได้ดีและเป็นที่ยอมรับ ตั้งแต่เดือนพฤษภาคมที่ผ่านมาและยังมีคำตอบที่มีคะแนนโหวตติดลบที่เหมือนกันกับคุณมากขึ้นหรือน้อยลง
เควนติ

ฉันเห็นคำตอบ Display: Unset ใช้งานไม่ได้รวมทั้ง Display: block ความคิดเห็นของฉัน :) @Quentin
Bel

และdisplay: blockไม่สามารถทำงานได้ดีบน<span>หรือ<td>... display: blockและคำตอบที่ก่อนหน้านี้ได้กล่าวถึงแล้ว
เควนติ

2
overflow: hiddenคุณได้แก้ไขคำตอบต้องพูดถึง ทำไม? จุดประสงค์ของการเพิ่มสิ่งนั้นคืออะไร? display: noneมันมีอะไรจะทำอย่างไรกับความหายนะ
เควนติ

-4

"ตรงกันข้าม" ที่ดีที่สุดจะกลับไปเป็นค่าเริ่มต้นซึ่งก็คือ:

display: inline

เพียงแค่ต้องการทำให้ชัดเจนว่าคุณสมบัติการแสดงผลไม่มีค่าเริ่มต้นองค์ประกอบ html จะทำอย่างไร ค่าเริ่มต้นของ DIV จะแสดง: block SPAN จะเริ่มต้นที่จะแสดง: inline แต่คุณสมบัติการแสดงผลของมันเองไม่มีค่าเริ่มต้น
kevinius
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.