Apakah ada kebalikan dari tampilan: tidak ada?


196

Kebalikan dari visibility: hiddenadalah visibility: visible. Demikian pula, adakah yang sebaliknyadisplay: none ?

Banyak orang menjadi bingung mencari tahu bagaimana menunjukkan elemen ketika itu memiliki display: none , karena itu tidak sejelas menggunakan visibilityproperti.

Saya hanya bisa menggunakan visibility: hiddenbukan display: none, tetapi tidak memberikan efek yang sama, jadi saya tidak akan menggunakannya.


35
Tidak yakin mengapa ini mendapatkan suara turun dan menutup permintaan. Ini sesuai topik (saat ini ada 143.368 pertanyaan CSS tentang Stack Overflow), ini adalah masalah dunia nyata, dan ini adalah pertanyaan yang bagus untuk membantu orang mempelajari bahasa dengan benar.
Paul D. Waite

4
@ Paul Mungkin orang tidak menyadari itu adalah jawaban sendiri dan berpikir itu adalah upaya penelitian yang rendah (karena semua upaya penelitian ada di jawabannya)
Richard Tingle

11
Mengapa repot-repot mengajukan pertanyaan jika jawaban Anda adalah menyalin / menempelkan tabel dari w3schools.com/cssref/pr_class_display.asp ?
Bill the Lizard

1
@ RichardTingle: ah, poin bagus. @MohammadAreebSiddiq: aw, saya kira jawaban Anda tidak perlu dihapus. Hanya menghapus daftar besar semua displaynilai yang mungkin akan baik-baik saja. (Dan itu hanya pendapat saya tentu saja: mungkin orang-orang benar-benar menyukai daftar itu ada di sana.)
Paul D. Waite

Anda benar-benar benar-benar harus membuat jawaban Ilya Streltsyn diterima. Ilya memberikan "versi" tampilan: tidak ada yang TIDAK berlawanan, yang memecahkan masalah praktis yang mendasari pertanyaan Anda, sedangkan jawaban yang Anda pilih untuk menerima, pada dasarnya, hanya mengatakan "tidak". Yang pasti benar, tetapi jauh lebih sedikit membantu. Ini untuk programmer, bukan untuk ahli bahasa.
mathheadinclouds

Jawaban:


176

display: nonetidak memiliki lawan literal seperti visibility:hiddenhalnya.

The visibilityproperti memutuskan apakah elemen terlihat atau tidak. Karena itu ia memiliki dua negara ( visibledan hidden), yang berseberangan satu sama lain.

The displayproperti, bagaimanapun, memutuskan apa aturan tata letak elemen akan mengikuti. Ada beberapa jenis aturan untuk bagaimana elemen akan meletakkan diri dalam CSS, sehingga ada beberapa nilai yang berbeda ( block, inline, inline-blockdll - lihat dokumentasi untuk nilai-nilai ini di sini ).

display:none menghapus elemen dari tata letak halaman sepenuhnya, seolah-olah tidak ada di sana.

Semua nilai lain untuk displaymenyebabkan elemen menjadi bagian dari halaman, jadi dalam arti semuanya berlawanan display:none.

Tetapi tidak ada satu nilai pun yang menjadi kebalikannya display:none- sama seperti tidak ada satu gaya rambut yang bertolak belakang dengan "botak".


2
Saya perhatikan Anda sebutkan display: initialdalam jawaban-sendiri yang dihapus - untuk browser yang menerapkan CSS2.1 identik dengan itu display: inline. Itu tidak mengatur ulang displayke default browser untuk elemen yang diberikan - bukan itu yang dimaksud dengan "nilai awal".
BoltClock

26
suara saya untuk contoh 'botak' :) Contoh yang sangat mudah dipahami!
Jesper Rønn-Jensen

1
Seluruh membaca saya berpikir untuk diri saya "contoh yang bagus, ya, ya, mereka semua berlawanan dengan display:none" maka Anda membaca "sama seperti tidak ada satu gaya rambut yang kebalikan dari botak " Wow plus 1, dengan baik menempatkan.
Chef_Code

2
Gaya rambut apa pun adalah kebalikan dari kebotakan.
AdjunctProfessorFalcon

@ AdjunctProfessorFalcon: yah, agak. Saya akan mengatakan kepala dicukur di nomor satu adalah jauh lebih sedikit kebalikan dari botak daripada belanak.
Paul D. Waite

83

Kebalikan dari display: none sana belum (belum).

Tapi display: unset sangat dekat dan berfungsi dalam banyak kasus.

Dari MDN (Jaringan Pengembang Mozilla):

Kata kunci CSS yang tidak disetel adalah kombinasi dari kata kunci awal dan inherit. Seperti dua kata kunci lainnya yang menggunakan CSS, kata kunci ini dapat diterapkan ke properti CSS apa pun, termasuk steno semua CSS. Kata kunci ini me-reset properti ke nilai yang diwarisi jika itu mewarisi dari induknya atau ke nilai awal jika tidak. Dengan kata lain, ini berperilaku seperti kata kunci inherit dalam kasus pertama dan seperti kata kunci awal dalam kasus kedua.

(sumber: https://developer.mozilla.org/docs/Web/CSS/unset )

Perhatikan juga bahwa display: revertsaat ini sedang dikembangkan. Lihat MDN untuk detailnya.


Bagaimana dengan display: initial?
Flimm

31

Saat mengubah elemen displaydalam Javascript, dalam banyak kasus pilihan yang cocok untuk 'membatalkan' hasilnya element.style.display = "none"adalah element.style.display = "". Ini menghapus displaydeklarasi dari styleatribut, mengembalikan nilai aktual displayproperti ke nilai yang ditetapkan dalam stylesheet untuk dokumen (ke default browser jika tidak didefinisikan ulang di tempat lain). Tetapi pendekatan yang lebih dapat diandalkan adalah memiliki kelas seperti CSS

.invisible { display: none; }

dan menambahkan / menghapus nama kelas ini ke / dari element.className.


2
Jika Anda ingin mengganti .element { display: none }(didefinisikan dalam CSS lib misalnya) dengan .element { display: '' !important }itu tidak akan berfungsi. Anda harus menggunakan.element { display: unset !important }
tanguy_k

2
Saya mengatakan tentang "undoing" display:nonehanya dalam JavaScript. Tentu saja, string kosong tidak akan berfungsi di CSS, karena itu nilai yang tidak valid. Namun, display: unsetAnda menyarankan untuk tidak mengembalikan, misalnya, default display:blockuntuk a <div>atau default display:table-rowuntuk a <tr>, secara efektif mengubah semuanya menjadi display:inline(seperti display:initial). Untuk mengembalikan nilai default browser untuk elemen, ada display:revert, tetapi tidak didukung dengan baik ( caniuse.com/#feat=css-revert-value ).
Ilya Streltsyn

Ini harus menjadi jawaban yang diterima. Jawaban yang diterima memiliki perbandingan yang baik dengan 'kebalikan dari botak', tetapi tidak melakukan apa pun untuk membantu programmer miskin dengan harus berurusan dengan penerapan "make botak" - "sekarang, kembalikan rambut". Jawaban ini memberi tahu Anda cara menangani masalah praktis itu. Element.style.display = '' rentan terhadap kesalahan, karena "rambut lama" mungkin bukan tampilan default, tetapi 'blok' atau 'sel tabel' atau apa pun. Menghapus kelas ".invisible", seperti di sini, adalah satu-satunya implementasi bebas bug dari "kembalikan rambut sekarang", sejauh yang saya bisa lihat. Jadi, lakukan seperti ini, selalu
mathheadinclouds

6

kamu bisa memakai

display: normal;

Ini berfungsi seperti biasa .... Ini peretasan kecil di css;)


2
Mengapa ini diturunkan? Apakah ini cara yang buruk untuk melakukannya atau? Ini berfungsi dengan baik untuk tablerows, tetapi haruskah saya menggunakan sesuatu yang lain?
Benjamin Karlog

4
Nilai 'normal' bukan nilai yang valid untuk displayproperti, jadi itu hanya diabaikan dan secara efektif berfungsi seperti element.style.display = ''penugasan (lihat jawaban saya di atas).
Ilya Streltsyn

27
jadi dengan kata lain Anda bisa menggunakan display: chunk norris;efek yang sama, dengan tendangan yang lebih banyak.
Kevin B

1
Jika Anda ingin mengganti .element { display: none }(didefinisikan dalam CSS lib misalnya) dengan .element { display: normal !important }itu tidak akan berfungsi. Anda harus menggunakan.element { display: unset !important }
tanguy_k

4

Saya menggunakan display:block; ini bekerja untuk saya


Itu hanya berguna untuk elemen yang ingin Anda tampilkan block, itu bukan apa yang Anda inginkan secara umum untuk inlineelemen seperti <span>misalnya.
Flimm

3

Seperti yang dijelaskan oleh Paul, tidak ada kebalikan dari tampilan: tidak ada dalam HTML karena setiap elemen memiliki tampilan default yang berbeda dan Anda juga dapat mengubah tampilan dengan gaya kelas atau inline dll.

Namun jika Anda menggunakan sesuatu seperti jQuery, fungsi show dan hide mereka berperilaku seolah-olah tidak ada tampilan yang berlawanan. Saat Anda bersembunyi, dan kemudian menampilkan elemen lagi, elemen itu akan ditampilkan dengan cara yang persis sama seperti sebelum disembunyikan. Mereka melakukan ini dengan menyimpan nilai lama dari properti tampilan pada persembunyian elemen sehingga ketika Anda menunjukkannya lagi itu akan ditampilkan dengan cara yang sama seperti sebelum Anda menyembunyikannya. https://github.com/jquery/jquery/blob/740e190223d19a114d5373758127285d14d6b71e/src/css.js#L180

Ini berarti bahwa jika Anda menetapkan div misalnya untuk menampilkan inline, atau inline-block dan Anda menyembunyikannya dan kemudian memperlihatkannya lagi, itu akan sekali lagi ditampilkan sebagai display inline atau inline-block sama seperti sebelumnya

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

naskah:

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

Perhatikan bahwa properti tampilan div akan tetap konstan bahkan setelah itu disembunyikan (tampilan: tidak ada) dan ditampilkan lagi.


1
"display: table-cell" adalah yang saya butuhkan. Tidak disebutkan pada jawaban lain.
bendecko

1

Dalam hal stylesheet ramah printer, saya menggunakan yang berikut ini:

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

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

Saya menggunakan ini ketika saya perlu mencetak formulir yang berisi nilai-nilai dan bidang input sulit untuk dicetak. Jadi saya menambahkan nilai-nilai yang terbungkus tag span.print_only (div.print_only digunakan di tempat lain) dan kemudian menerapkan kelas .no_print ke kolom input. Jadi pada layar Anda akan melihat kolom input dan ketika dicetak, hanya nilainya. Jika Anda ingin menjadi mewah, Anda bisa menggunakan JS untuk memperbarui nilai dalam tag rentang ketika bidang diperbarui tetapi itu tidak perlu dalam kasus saya. Mungkin bukan solusi yang paling elegan tetapi berhasil untuk saya!


1

Anda dapat menggunakan tampilan: blok

Contoh:

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

Saya mengalami tantangan ini ketika membangun aplikasi di mana saya ingin meja disembunyikan untuk pengguna tertentu tetapi tidak untuk orang lain.

Awalnya saya mengaturnya sebagai tampilan: tidak ada tetapi kemudian menampilkan: inline-block untuk para pengguna yang ingin saya lihat tetapi saya mengalami masalah pemformatan yang mungkin Anda harapkan (kolom konsolidasi atau umumnya berantakan).

Cara saya mengatasinya adalah dengan menunjukkan tabel terlebih dahulu dan kemudian melakukan "display: none" untuk para pengguna yang saya tidak ingin melihatnya. Dengan cara ini, itu diformat secara normal tetapi kemudian menghilang sesuai kebutuhan.

Sedikit solusi lateral tetapi mungkin bisa membantu seseorang!


0

kebalikan dari 'none' adalah 'flex' saat bekerja dengan reaksi asli.


-2

visibilitas: tersembunyi akan menyembunyikan elemen tetapi elemen adalah miliknya dengan DOM. Dan dalam hal tampilan: tidak ada yang akan menghapus elemen dari DOM.

Jadi, Anda memiliki opsi untuk elemen untuk menyembunyikan atau menyembunyikan. Tapi begitu Anda menghapusnya (maksud saya display tidak ada) itu tidak memiliki nilai yang berlawanan. display memiliki beberapa nilai seperti display: block, display: inline, display: inline-block dan banyak lainnya. Anda dapat memeriksanya dari W3C.


2
Mengapa tidak ada nilai-nilai lain untuk display?
Paul D. Waite

1
Apakah ini seharusnya daftar yang lengkap? Ini bukan.
Ry-


-3

Anda dapat menggunakan ini display:block;dan juga menambahkanoverflow:hidden;


1
Harap baca jawaban yang ada sebelum berkontribusi pada jawaban Anda. Ada jawaban yang baik, baik dipilih, dan diterima dari Mei lalu dan ada juga jawaban dengan total suara negatif yang lebih atau kurang identik dengan Anda.
Quentin

Saya melihat jawabannya. Tampilan: Tidak disetel tidak berfungsi sebaik blok Tampilan:. Pendapat saya :) @ Quentin
Bel

Dan display: blocktidak berfungsi dengan baik pada a <span>atau a <td>... dan jawaban sebelumnya telah disebutkan display: block.
Quentin

2
Anda telah mengedit jawaban untuk disebutkan overflow: hidden. Mengapa? Apa gunanya menambahkan itu? Ini tidak ada hubungannya dengan membatalkan a display: none.
Quentin

-4

"Lawan" terbaik adalah mengembalikannya ke nilai default yaitu:

display: inline

Hanya ingin menjelaskan bahwa properti tampilan tidak memiliki nilai default, elemen html tidak. Nilai default DIV akan ditampilkan: blok, SPAN akan default untuk ditampilkan: inline. Tetapi properti tampilan itu sendiri tidak memiliki nilai default.
kevinius
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.