อะไรคือความแตกต่างระหว่างคุณสมบัติการแสดงผลกับคุณสมบัติการมองเห็น?
อะไรคือความแตกต่างระหว่างคุณสมบัติการแสดงผลกับคุณสมบัติการมองเห็น?
คำตอบ:
visibility
คุณสมบัติเพียงบอกเบราว์เซอร์ว่าจะแสดงองค์ประกอบหรือไม่ สามารถมองเห็นได้ ( visible
- คุณสามารถมองเห็นได้) หรือมองไม่เห็น ( hidden
- คุณมองไม่เห็น)
display
คุณสมบัติบอกเบราว์เซอร์วิธีการวาดและแสดงองค์ประกอบถ้าที่ทั้งหมด - ไม่ว่าจะควรจะแสดงเป็นinline
องค์ประกอบ (คือมันไหลกับข้อความและองค์ประกอบอื่น ๆ แบบอินไลน์) หรือblock
องค์ประกอบระดับพื้นดิน (คือมันมีความสูงและความกว้างคุณสมบัติที่ คุณสามารถตั้งค่าก็ลอย ฯลฯ ) หรือinline-block
(คือมันทำหน้าที่เหมือนกล่องบล็อก แต่จะวางแบบอินไลน์แทน) และบางคนอื่น ๆ ( list-item
, table
, table-row
, table-cell
, flex
ฯลฯ )
เมื่อคุณตั้งค่าองค์ประกอบการdisplay: block
แต่ยังตั้งค่าvisibility: hidden
เบราว์เซอร์ยังคงถือว่าเป็นองค์ประกอบบล็อกยกเว้นคุณก็ไม่เห็นมัน คล้ายกับวิธีที่คุณวางกล่องสีแดงไว้บนกล่องที่มองไม่เห็น: กล่องสีแดงดูเหมือนว่ามันลอยอยู่กลางอากาศเมื่อในความเป็นจริงมันนั่งอยู่บนกล่องจริงที่คุณมองไม่เห็น
กล่าวอีกนัยหนึ่งหมายถึงองค์ประกอบdisplay
ที่ไม่มีnone
ผลต่อการไหลเวียนขององค์ประกอบในหน้าเว็บไม่ว่าจะมองเห็นได้หรือไม่ก็ตาม กล่องที่อยู่รอบ ๆ องค์ประกอบที่มีdisplay: none
จะทำงานราวกับว่าองค์ประกอบนั้นไม่เคยอยู่ที่นั่น (แม้ว่าจะยังคงอยู่ใน DOM ก็ตาม)
display: none;
องค์ประกอบนั้นจะถูกลบออกจาก DOM? หรือฉันสับสนไปหมด?
ทัศนวิสัย: ซ่อนอยู่;
แสดง: ไม่มี;
หมายเหตุพิเศษ:
display: ไม่มีการนำองค์ประกอบออกจากโฟลว์ของ html ในขณะที่ visibility: hidden ไม่ได้
แสดง: ไม่มี; จะลบสไตล์ภาพ / พื้นที่ทางกายภาพขององค์ประกอบ DOM ออกจาก DOM ในขณะที่การมองเห็น: ซ่อน; จะไม่ลบองค์ประกอบ แต่เพียงแค่ซ่อนไว้ ดังนั้น div ที่ใช้พื้นที่แนวตั้ง 300px ใน DOM ของคุณจะยังคงใช้ความกว้างแนวตั้ง 300px เมื่อตั้งค่าเป็น visibility: hidden; แต่เมื่อตั้งค่าให้แสดง: ไม่มี; รูปแบบภาพและพื้นที่ว่างถูกซ่อนไว้และจากนั้นพื้นที่ดังกล่าวก็ "ว่าง" ขึ้นโดยขาดคำที่ดีกว่า
[แก้ไข] - ฉันเขียนข้อความข้างต้นไปสักพักแล้วและไม่ว่าฉันจะมีความรู้ไม่เพียงพอหรือมีวันที่เลวร้ายฉันก็ไม่รู้ แต่ความจริงก็คือองค์ประกอบนั้นจะไม่ถูกลบออกจากลำดับชั้นของ DOM 'สไตล์' การแสดงระดับบล็อกทั้งหมดจะถูก 'ซ่อน' อย่างสมบูรณ์เมื่อใช้การแสดงผล: ไม่มีในขณะที่การมองเห็น: ซ่อน; องค์ประกอบนั้นถูกซ่อนไว้ แต่ยังคงใช้พื้นที่ภาพใน DOM ฉันหวังว่านี่จะช่วยให้ทุกอย่างกระจ่างขึ้น
display: none
จะไม่ลบองค์ประกอบออกจาก DOM องค์ประกอบยังคงอยู่ที่นั่น แต่ก็ไม่ปรากฏขึ้น