วิธีการซ่อนองค์ประกอบโดยไม่ต้องใช้พื้นที่ในหน้า?


228

ฉันใช้visibility:hiddenเพื่อซ่อนองค์ประกอบบางอย่าง แต่พวกเขายังคงใช้พื้นที่บนหน้าเว็บในขณะที่ซ่อนอยู่

ฉันจะทำให้พวกเขาหายตัวไปอย่างสิ้นเชิงได้อย่างไรราวกับว่าพวกเขาไม่ได้อยู่ใน DOM เลย (แต่ถ้าไม่ได้ลบพวกเขาออกจาก DOM)?


คำถามนี้ตายไปแล้ว แต่ฉันกำลังเพิ่มความคิดเห็นเพราะฉันเพิ่งพบว่าตัวเองอยู่ในสถานการณ์ที่คนอื่นอาจพบ ฉันต้องการซ่อนองค์ประกอบและรักษามันไว้offsetTopและdisplay:noneตั้งค่าเป็นoffsetTop0 วิธีแก้ปัญหาของฉันที่นี่คือใช้visibility: hiddenจากนั้นตั้งค่าความกว้างและความสูงเป็น 0 เมื่อฉันต้องการให้องค์ประกอบมองเห็นได้อีกครั้งฉันลบแอตทริบิวต์สามรายการโดยใช้ จาวาสคริ โซลูชันแฮ็คเล็กน้อย แต่ใช้ได้ดีสำหรับกรณีใช้งานเกือบทั้งหมด
rappatic

คำตอบ:


302

ลองตั้งค่าdisplay:noneให้ซ่อนและตั้งค่าdisplay:blockให้แสดง


มันเป็นไปไม่ได้ที่จะลบองค์ประกอบออกจาก dom man โดยใช้ตัวเลือกนี้ อ่านคำถาม
Pranay Rana

26
ไม่ได้ทุกรายการที่ควรจะเป็นdisplay: blockบางส่วนจะต้องมีการตั้งค่าให้display: inline(เช่น<span>หรือ<a>หรือ<img>องค์ประกอบ DOM)
Mauro

2
@prayay คำถามบอกว่าจะซ่อนไม่ให้ลบออกจาก DOM
Mauro

6
@pranay: คำถามไม่ได้แสดงออกมาดีนัก แต่ Huusom กำลังแก้ปัญหาที่ผู้ใช้กำลังมีอยู่
Claudio Redi

1
การปรับปรุง: สร้างคลาส CSS ที่เรียกว่ามีhidden display: noneเพิ่มคลาสลงในองค์ประกอบเพื่อซ่อนลบออกแสดง เมื่อลบออกdisplayคุณสมบัติจะถูกกู้คืนเป็นองค์ประกอบเริ่มต้น
Alejandro C De Baca

44

ใช้สไตล์แทนเช่น

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

1
น่าเสียดายที่นี่ใช้ไม่ได้กับฉัน - ใช้จอแสดงผล: ยังไม่มีพื้นที่ว่างเหลืออยู่
mbuc91

15

เพื่อใช้display:noneเป็นตัวเลือกที่ดีเพียงเพื่อเอาองค์ประกอบ แต่มันจะเป็นยังลบออก screenreaders นอกจากนี้ยังมีการอภิปรายหากมีผลกระทบต่อ SEO มีบทความสั้น ๆ ที่ดีเกี่ยวกับหัวข้อนั้นใน A List Apart

หากคุณต้องการซ่อนและไม่ลบองค์ประกอบจริงๆควรใช้:

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

เช่นนี้มันสามารถอ่านได้โดยโปรแกรมอ่านหน้าจอ

ข้อเสียเพียงอย่างเดียวของวิธีนี้คือการแสดงผล DIV จริงและอาจส่งผลต่อประสิทธิภาพโดยเฉพาะบนโทรศัพท์มือถือ


2
ถ้าคุณเลือกที่จะตำแหน่งอะไรบางอย่างแน่นอนคุณสามารถในกรณีส่วนใหญ่ทำงานกับvisibility: hidden;ช่วยบอกว่าคุณมีองค์ประกอบอื่น ๆ z-indexแน่นอนพวกเขาจะไม่ได้มีความขัดแย้งสำหรับพื้นที่เพียงความขัดแย้งทางผล เพียงเพื่อซ่อนองค์ประกอบที่ฉันจะไปด้วยvisibility
Dejan.S

10

ดูแทนการใช้การใช้งานvisibility: hidden; display: none;ตัวเลือกแรกจะซ่อน แต่ยังคงใช้พื้นที่และตัวเลือกที่สองจะซ่อนและไม่ใช้พื้นที่ใด ๆ


6

คำตอบสำหรับคำถามนี้บอกว่าใช้ display: none และ display: block แต่สิ่งนี้ไม่ได้ช่วยใครบางคนที่พยายามใช้การเปลี่ยน css เพื่อแสดงและซ่อนเนื้อหาโดยใช้คุณสมบัติการมองเห็น

สิ่งนี้ทำให้ฉันบ้าด้วยการใช้จอแสดงผลฆ่าการเปลี่ยน CSS ใด ๆ

ทางออกหนึ่งคือการเพิ่มสิ่งนี้ลงในคลาสที่ใช้การมองเห็น:

overflow:hidden

เพื่อให้การทำงานนี้ขึ้นอยู่กับเค้าโครง แต่ควรเก็บเนื้อหาว่างไว้ใน div ที่อยู่


3
ถ้าคุณเล่นด้วยทัศนวิสัย: ซ่อนเร้นและทัศนวิสัย: มองเห็นและกำหนดตำแหน่งองค์ประกอบของคุณ: แก้ไขแล้วคุณจะไม่มีปัญหานั้นมันเหมือนเวทมนตร์
John Balvin Arias

6

จอแสดงผล: ไม่มีวิธีการแก้ปัญหาที่ซ่อนองค์ประกอบอย่างสมบูรณ์ด้วยพื้นที่ของมัน

เรื่องราวเกี่ยวกับdisplay:noneและvisibility: hidden

visibility:hidden หมายความว่ามองไม่เห็นแท็ก แต่มีการจัดสรรพื้นที่บนแท็ก

display:noneหมายถึงการซ่อนองค์ประกอบอย่างสมบูรณ์ด้วยพื้นที่ของมัน (แม้ว่าคุณจะยังสามารถโต้ตอบกับมันผ่าน DOM)


3

display:noneเพื่อซ่อนและตั้งค่าdisplay:blockให้แสดง


1
เขาถามเกี่ยวกับการลบมันด้วยสายตา "ราวกับว่าพวกเขาไม่ได้อยู่ใน DOM" ไม่เกี่ยวกับการลบออกจาก DOM ที่แท้จริง
Arve Systad

คำถามจะไม่ลบออกจาก DOM เท่านั้นเพื่อทำให้หายไป as though they are not in the DOM at all (but without actually removing them from the DOM)
Mauro

@pranay: visibility: hiddenหยุดการแสดงเนื้อหาเท่านั้น แต่ยังคงใช้พื้นที่แนวตั้ง / แนวนอนแสดง: ไม่มีลบพื้นที่แนวตั้ง / แนวนอนสำหรับองค์ประกอบ
Mauro

ไม่มันไม่ ทัศนวิสัย: ซ่อนอยู่; ทำให้องค์ประกอบที่มองไม่เห็น แต่ก็ยังใช้พื้นที่ แสดง: ไม่มี; ทำให้เอกสารทำงานราวกับว่ามันไม่เคยมี
Olly Hodgson

1
ลบคำตอบนี้แล้ว
BalusC

3

การสลับdisplayไม่อนุญาตสำหรับการเปลี่ยน CSS ที่ราบรื่น แต่สลับทั้งในและvisibilitymax-height

visibility: hidden;
max-height: 0;

สิ่งนี้มีประโยชน์เมื่อคุณทำงานกับแอนิเมชั่น transform: translateX(-100%)เพราะเราจะซ่อนองค์ประกอบที่อยู่นอกพื้นที่ที่มองเห็นโดยใช้สิ่งที่ต้องการ เราไม่ต้องการdisplay: none
zhuhang.jasper

2

นี่คือสิ่งที่แตกต่างออกไปในการนำพวกเขากลับมาหลังจากที่แสดง: ไม่มี อย่าใช้ display: block / inline เป็นต้นแทน (หากใช้ javascript) ให้ตั้งค่าคุณสมบัติ css display เป็น '' (เช่นว่างเปล่า)



1

เหนือความรู้ของฉันมันเป็นไปได้ใน 4 วิธี

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

1

จอแสดงผล: ไม่มีสิ่งที่ดีที่สุดในการหลีกเลี่ยงพื้นที่สีขาวในเพจ


2
ดูเหมือนว่าจะเป็นเพียงแค่การทำซ้ำคำตอบอื่น ๆ
ปาง

0

ใช้!importantหากคุณถูกบังคับให้แทนที่สไตล์ CSS ที่มีอยู่

display: none !important;
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.