Görüntülenecek bir tersi var mı: yok mu?


197

Karşıt visibility: hiddenIS visibility: visible. Benzer şekilde, tam tersi var display: nonemı?

Birçok insan display: none, visibilityözelliği kullanmak kadar net olmadığı için, bir öğeyi nasıl göstereceğini anlamaya karışır .

Bunun visibility: hiddenyerine sadece kullanabilirim display: none, ama aynı etkiyi vermez, bu yüzden onunla gitmiyorum.


35
Bunun neden aşağı oy ve yakın istekler aldığından emin değilim. Konu üzerine (şu anda Stack Overflow'da 143.368 CSS sorusu var), bu gerçek bir dünya sorunu ve insanların dili düzgün bir şekilde öğrenmelerine yardımcı olmak için iyi bir soru.
Paul D.Waite

4
@Paul Belki insanlar bunun kendi kendine bir cevap olduğunu fark etmediler ve bunun düşük bir araştırma çabası olduğunu düşündüler (çünkü tüm araştırma çabaları cevapta)
Richard Tingle

11
Cevabınızın w3schools.com/cssref/pr_class_display.asp adresinden bir tablo kopyalayıp yapıştırmak olup olmadığını neden bir soru sormaya zahmet ediyorsunuz ?
Kertenkele Bill

1
@RichardTingle: ah, iyi bir nokta. @MohammadAreebSiddiq: aw, cevabının silinmesi gerektiğini düşünmedim. Tüm olası displaydeğerlerin büyük listesinin kaldırılması iyi olurdu. (Ve bu sadece elbette benim fikrim: belki insanlar bu listenin orada olmasını gerçekten sevdiler.)
Paul D.Waite

gerçekten gerçekten gerçekten Ilya Streltsyn'in cevabını kabul edilene vermeliydin. Ilya bir “versiyon” sergiliyor: hiçbiri tersi olmayan, sorunuzun altında yatan pratik problemi çözerken, kabul etmeyi seçtiğiniz cevap özünde “hayır” der. Hangi emin doğrudur, ama çok daha az yararlı. Bu, dilbilimciler için değil programcılar içindir.
mathheadinclouds

Yanıtlar:


178

display: nonetam tersi gibi visibility:hidden.

visibilityTesiste eleman görünür olup olmadığına karar verir. Bu nedenle, birbirine zıt iki durumu ( visibleve hidden) vardır.

displayMülkiyet, ancak, düzen kuralları unsuru takip edecek karar verir. Elementler CSS kendilerini ortaya koymak nasıl kuralları birkaç farklı türü vardır, bu yüzden birkaç farklı değerler vardır ( block, inline, inline-blockvs - bu değerler burada belgelerine bakın ).

display:none bir öğeyi sayfa düzeninden, sanki orada değilmiş gibi tamamen kaldırır.

Diğer tüm değerler display, öğenin sayfanın bir parçası olmasına neden olur, bu nedenle bir bakıma hepsi zıttır display:none.

Ama doğrudan tersi olan bir değer display:noneyok - tıpkı "kel" in tersi tek bir saç stili yokmuş gibi.


2
display: initialSilinen kendi kendine yanıtta bahsettiğinizi fark ediyorum - eşanlamlı olarak CSS2.1 uygulayan tarayıcılar için display: inline. displayBelirli bir öğe için tarayıcı varsayılanına sıfırlanmaz - "başlangıç ​​değeri" nin anlamı bu değildir.
BoltClock

27
'kel' örnek için benim oyum :) Çok kolay anlaşılır örnek!
Jesper Rønn-Jensen

2
I yoluyla bütün okuma zaman kendini düşünüyorum "büyük örneği, evet, evet, onlar her ters display:noneo zaman" tam tersi kimse saç stili var gibi okuma " kel Vay artı 1, güzel koymak".
Chef_Code

2
Herhangi bir saç modeli kelin tam tersidir.
Mayıs

@AdjunctProfessorFalcon: iyi, biraz. Bir numarada traş edilen bir baş, kefalden kelden çok daha az zıttı diyebilirim.
Paul D.Waite

84

display: noneOrada gerçek bir zıtlık (henüz) yoktur.

Ama display: unsetçok yakın ve çoğu durumda çalışır.

Gönderen MDN'yi (Mozilla Geliştirici Ağı):

Unset CSS anahtar sözcüğü, başlangıç ​​ve devralma anahtar kelimelerinin birleşimidir. Diğer iki CSS geneli anahtar kelime gibi, CSS kısaltma da dahil olmak üzere herhangi bir CSS özelliğine uygulanabilir. Bu anahtar kelime, üst öğeden devralındığında mülkü devralınan değerine veya yoksa başlangıç ​​değerine sıfırlar. Başka bir deyişle, ilk durumda devral anahtar kelimesi gibi, ikinci durumda da ilk anahtar sözcük gibi davranır.

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

Ayrıca display: revertşu anda geliştirilmekte olduğunu unutmayın . Ayrıntılar için MDN'ye bakın.


Ne olmuş display: initial?
Flimm

31

Eleman en değiştirirken displayJavaScript, birçok durumda uygun bir seçenektir 'geri alma' olarak sonuç ait element.style.display = "none"olduğunu element.style.display = "". Bu display, styleözelliğin gerçek değerini displaybelgenin stil sayfasında ayarlanan değere (başka bir yerde yeniden tanımlanmamışsa tarayıcı varsayılanına) döndürerek özniteliği bildirimi kaldırır . Ancak daha güvenilir yaklaşım CSS'de bir sınıfa sahip olmaktır.

.invisible { display: none; }

ve bu sınıf adını / grubuna ekleme / kaldırma element.className.


2
Geçersiz kılmak istiyorsanız .element { display: none }(örneğin CSS lib'de tanımlanır) .element { display: '' !important }çalışmaz. Kullanmanız gerekir.element { display: unset !important }
tanguy_k

2
Sadece display:noneJavaScript'te "geri almayı" anlattım . Tabii ki, boş dize geçersiz değer olduğundan CSS'de çalışmaz. Hovewer, display: unsetsen örneğin varsayılan, geri alacağına dair display:blockbir için <div>ya da varsayılan display:table-rowbir için <tr>, etkili herşeyi döner display:inline(tıpkı display:initial). Öğenin tarayıcı varsayılan değerini geri yüklemek için var display:revert, ancak iyi desteklenmiyor ( caniuse.com/#feat=css-revert-value ).
Ilya Streltsyn

Bu kabul edilen cevap olmalı. Kabul edilen cevap 'kel karşısında' ile iyi bir karşılaştırma var, ama kötü programcı "kel yapmak" - "şimdi, saç geri koymak" uygulaması ile uğraşmak için yardımcı olmak için hiçbir şey yapmaz. Bu cevap size bu pratik problemle nasıl başa çıkacağınızı anlatır. Element.style.display = '' hataya yatkındır, çünkü "eski saç" varsayılan ekran değil, "blok" veya "tablo hücresi" veya başka bir şey olabilir. Burada gördüğüm gibi, ".invisible" sınıfının kaldırılması, "şimdi saçları geri koy" un tek hatasız uygulamasıdır. Yani, böyle yap, her zaman
mathheadinclouds

6

kullanabilirsiniz

display: normal;

Normal olarak çalışır .... Onun css küçük bir hack;)


2
Bu neden reddediliyor? Bunu yapmanın kötü bir yolu mu yoksa? Masaüstü için iyi çalışıyor, ama başka bir şey kullanmalı mıyım?
Benjamin Karlog

4
Değeri 'normal' için geçerli bir değer değil display, yani sadece göz ardı mülkiyet ve etkili gibi çalışır element.style.display = ''(bkz atama cevabımı yukarıda).
Ilya Streltsyn

27
başka bir deyişle display: chunk norris;, aynı etki için biraz daha fazla tekme ile kullanabilirsiniz.
Kevin B

1
Geçersiz kılmak istiyorsanız .element { display: none }(örneğin CSS lib'de tanımlanır) .element { display: normal !important }çalışmaz. Kullanmanız gerekir.element { display: unset !important }
tanguy_k

4

Kullandığım display:block; Bana uyar


Bu, yalnızca görüntülenmesini istediğiniz öğeler için yararlıdır block, örneğin örneğin bir inlineöğe için genellikle istediğiniz şey değildir <span>.
Flimm

3

Paul'un açıkladığı gibi, ekranın tam tersi yoktur: her öğenin farklı bir varsayılan ekranı olduğundan HTML'de hiçbiri yoktur ve ayrıca ekranı bir sınıf veya satır içi stille vb.

Ancak, jQuery gibi bir şey kullanırsanız, bunların show ve hide işlevleri, ekranın hiçbirinin tersi gibi davranır. Bir öğeyi gizleyip yeniden gösterdiğinizde, öğe gizlenmeden önce olduğu gibi görüntülenir. Bunu, elementin gizlenmesi sırasında display özelliğinin eski değerini saklayarak yaparlar, böylece tekrar gösterdiğinizde gizlemeden önce olduğu gibi görüntülenir. https://github.com/jquery/jquery/blob/740e190223d19a114d5373758127285d14d6b71e/src/css.js#L180

Bu, örneğin bir satır içi veya satır içi blok görüntülemek üzere bir div ayarlarsanız ve onu gizleyip tekrar gösterirseniz, bir kez daha ekran satır içi veya satır içi blok olarak önceki gibi görünür

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

senaryo:

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

Div'ın display özelliğinin gizlendikten (display: none) ve tekrar gösterildikten sonra bile sabit kalacağına dikkat edin.


1
"display: table-cell" ihtiyacım olan şeydi. Başka bir cevaptan bahsedilmedi.
bendecko

1

Yazıcı dostu bir stil sayfasında, aşağıdakileri kullanıyorum:

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

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

Değer içeren bir form yazdırmam gerektiğinde ve giriş alanlarının yazdırılması zor olduğunda bunu kullandım. Bu yüzden bir span.print_only etiketine (div.print_only başka bir yerde kullanıldı) sarılmış değerleri ekledim ve .no_print sınıfını giriş alanlarına uyguladım. Ekranda giriş alanlarını ve yazdırıldığında sadece değerleri görürsünüz. Fantezi almak istiyorsanız, alanlar güncellendiğinde span etiketlerindeki değerleri güncellemek için JS'yi kullanabilirsiniz, ancak bu benim durumumda gerekli değildi. Belki de en zarif çözüm değil ama benim için çalıştı!


1

Display: block komutunu kullanabilirsiniz

Misal :

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

Belirli kullanıcılar için gizli bir tablo istediğim, ancak diğerleri için değil bir uygulama istediğimde bu zorlukla karşılaştım.

Başlangıçta bunu display: none olarak ayarladım ama sonra display: block komutunu görmek istediğim kullanıcılar için ayarladım ama beklediğiniz biçimlendirme sorunlarını yaşadım (sütunları birleştiren veya genellikle dağınık).

Etrafımda çalışma şekli, önce tabloyu göstermek ve sonra görmek istemediğim kullanıcılar için "display: none" yapmaktı. Bu şekilde normal şekilde biçimlendirildi, ancak gerektiğinde kayboldu.

Biraz yanal bir çözüm ama birine yardım edebilir!



-2

görünürlük: gizli öğeyi gizler, ancak öğe DOM'dur. Ve görüntüleme durumunda: hiçbiri öğeyi DOM'dan kaldırmaz.

Böylece, öğenin gizlenmesi veya gösterilmesi için seçeneğiniz vardır. Ancak bir kez sildiğinizde (yani hiçbirini göstermiyorum) karşıt değeri net değil. display, display: block, display: inline, display: inline-block ve diğerleri gibi çeşitli değerlere sahiptir. W3C'den kontrol edebilirsiniz.


2
Neden diğer değerlerin hiçbiri için değil display?
Paul D.Waite

1
Bunun kapsamlı bir liste olması gerekiyor mu? Değil.
Ry-


-3

Bunu kullanabilir display:block;ve ayrıcaoverflow:hidden;


1
Lütfen kendinize katkıda bulunmadan önce mevcut cevapları okuyun. Geçtiğimiz Mayıs ayından itibaren iyi, iyi oylanmış ve kabul edilmiş bir cevap var ve sizin oyunuzla aşağı yukarı aynı olan toplam oyların negatif olduğu bir cevap da var .
Quentin

Cevabı gördüm. Display: Unset, Display: bloğunun yanı sıra çalışmaz. Benim fikrim :) @Quentin
Bel

Ve display: blocka <span>veya a üzerinde iyi çalışmıyor <td>... ve önceki bir cevaptan daha önce bahsetmiştik display: block.
Quentin

2
Bahsetmek için cevabı düzenlediniz overflow: hidden. Neden? Bunu eklemenin anlamı nedir? Geri alma ile ilgisi yoktur display: none.
Quentin

-4

En iyi "karşıt" değeri varsayılan değere döndürmek olacaktır:

display: inline

Ancak display özelliğinin varsayılan bir değere sahip olmadığını açıkça belirtmek isteriz, ancak html öğesi bunu yapar. Bir DIV'nin varsayılan değeri display: block, bir SPAN varsayılan olarak: inline olacaktır. Ancak, display özelliğinin tek başına varsayılan bir değeri yoktur.
kevinius
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.