Aşağıdaki CSS kuralı ne işe yarar:
.clear { clear: both; }
Ve neden kullanmamız gerekiyor?
Aşağıdaki CSS kuralı ne işe yarar:
.clear { clear: both; }
Ve neden kullanmamız gerekiyor?
Yanıtlar:
Bu soru şamandıraların burada nasıl çalıştığını (ayrıntılı olarak) açıklamayacağım, çünkü bu soru genellikle neden kullanıyoruz clear: both;
VEYA clear: both;
tam olarak ne işe yarar ...
Bu cevabı basit ve noktaya saklayacağım ve size niçin clear: both;
gerekli olduğunu veya ne yaptığını grafik olarak açıklayacağım ...
Genellikle tasarımcılar elemanları sağa veya sola kaydırır, bu da diğer tarafta boş alan yaratır ve bu da diğer elemanların kalan alanı kaplamasını sağlar.
Tasarımcının yan yana 2 blok seviyeli elemanlara ihtiyacı olduğunda elemanlar yüzer. Örneğin, aşağıdaki gibi bir düzene sahip temel bir web sitesi tasarlamak istediğimizi varsayalım ...
Demo görüntüsünün canlı örneği .
Demo Kodu
Not: ekleyebilir gerekebilir header
, footer
, aside
, section
(ve diğer HTML5 öğeleri) olarakdisplay: block;
açıkça elemanları blok seviyesi unsurlardır söz için stil.
Temel bir düzen, 1 üstbilgi, 1 kenar çubuğu, 1 içerik alanı ve 1 altbilgim var.
Şamandıra yok header
, daha sonra aside
web sitem kenar çubuğu için kullanacağım etiket geliyor , bu yüzden öğeyi sola kayarım.
Not: Varsayılan olarak, blok düzeyi öğesi belgeyi% 100 genişlik alır, ancak sola veya sağa kaydırıldığında, içerdiği içeriğe göre yeniden boyutlandırılır.
Not ettiğiniz gibi, sol yüzen div
alan boşluğu kullanılmamış olarak bırakır, bu da div
sonradan kalan alanda kaymasına izin verir .
Tamam, öyleyse blok seviyesi elemanları sola veya sağa doğru yüzerken böyle davranır, şimdi neden clear: both;
gerekli ve neden?
Yani düzen demosunda not ederseniz - unutmanız durumunda, işte ..
Ben denilen bir sınıf kullanıyorum .clear
ve clear
değeri ile denilen bir özellik tutar both
. Öyleyse neden ihtiyacı olduğunu görelim both
.
Ben yüzen aside
ve section
sola elemanları, bu yüzden bir havuz var, burada header
katı arazi, aside
ve section
havuzda yüzen ve altbilgi tekrar katı arazi, böyle bir şey var ..
Yani mavi suyun yüzen elemanların alanının ne olduğu hakkında hiçbir fikri yok, havuzdan daha büyük veya daha küçük olabilirler, bu yüzden burada CSS yeni başlayanların% 90'ını rahatsız eden ortak bir sorun geliyor: neden bir konteyner elemanının arka planı gerilmedi yüzen elemanları tutarken. Konteyner elemanının burada bir HAVUZ olması ve HAVUZ'un kaç nesnenin yüzdüğünü veya yüzen öğelerin uzunluğunun veya genişliğinin ne olduğunu bilmediği için, gerilmeyecektir.
( Bunu yapmak için düzgün bir yol için bu cevabın [Clearfix] bölümüne bakın . div
Açıklama amacıyla bilerek boş bir örnek kullanıyorum )
Yukarıda 3 örnek verdim, 1'inci, red
kapta yüzen nesneler olmadığı için arka planın beklendiği gibi oluşturulacağı normal belge akışıdır .
İkinci örnekte, nesne sola kayarken, konteyner elemanı (POOL) kayan elemanların boyutlarını bilemez ve bu nedenle kayan elemanların yüksekliğine uzanmaz.
Kullandıktan sonra clear: both;
kap elemanı, yüzer eleman boyutlarına gerilecektir.
Başka bir neden clear: both;
kullanılmasının bir elemanın kalan boşlukta yukarı kaymasını önlemektir.
Diyelim ki 2 eleman yan yana ve altlarında başka bir eleman ... Yani 2 elemanı sola yüzdüreceksin ve alt kısımlarını da altta istiyorsun.
div
section
Kalan sola doğru kayar ve kalan boşluğa geçerdiv
böylece temizlenmiş section
etiketi süzülüyor aşağıda verecek div
s Son fakat en az değil, footer
etiket, kayan öğelerden sonra , etiketlerimi clear
bildirmeden önce sınıfı kullandığım için oluşturulacak footer
, bu da tüm kayan öğelerin (sol / sağ) o noktaya kadar temizlenmesini sağlar.
Şamandıralarla ilgili düzeltmeye geliyor. @Elky tarafından daha önce belirtildiği gibi , bu şamandıraları temizleme şeklimiz bunu yapmanın temiz bir yolu div
değildir, çünküdiv
eleman . İşte burada düzeltme geliyor.
Üst öğeniz bitmeden sizin için boş bir öğe oluşturacak bir sanal öğe olarak düşünün. Bu, yüzen elemanları tutan sarma elemanınızı kendiliğinden temizleyecektir. Bu öğe DOM'nizde tam anlamıyla mevcut olmayacak, ancak işi yapacak.
Yüzen elemanlara sahip herhangi bir sargı elemanını kendi kendini temizlemek için kullanabiliriz
.wrapper_having_floated_elements:after { /* Imaginary class name */
content: "";
clear: both;
display: table;
}
Bunun :after
için benim tarafımdan kullanılan sahte öğeye dikkat edin class
. Bu, sarma öğesi için kendisini kapatmadan hemen önce sanal bir öğe oluşturur. Dom'a bakarsak, Belge ağacında nasıl göründüğünü görebilirsiniz.
Görüyorsanız, yüzen çocuktan sonra, bunun div
için de kullandığımız özelliğe sahip boş bir div
elemana eşdeğer olmayan şamandıraları temizlediğimiz yerde render clear: both;
edilir. Şimdi neden display: table;
ve content
bu cevapların kapsamı dışındadır, ancak sözde öğe hakkında daha fazla bilgi edinebilirsiniz .
IE8 :after
sözde desteği desteklediğinden, bunun IE8'de de çalışacağını unutmayın .
Geliştiricilerin çoğu, içeriklerini sayfalarında sola veya sağa yüzer, muhtemelen logo, kenar çubuğu, içerik vb. Kalan alanda da yüzer, bu yüzden clear: both;
kullanılmasını önlemek için sola veya sağa yüzen tüm elemanları temizler.
------------------ ----------------------------------
div1(Floated Left) Other div takes up the space here
------------------ ----------------------------------
Şimdi div1
, aşağıdaki diğer div clear: both;
işlemesini yapmak istiyorsanız , böylece tüm şamandıraları sola veya sağa temizlemenizi sağlayacak şekilde kullanırsınız.
------------------
div1(Floated Left)
------------------
<div style="clear: both;"><!--This <div> acts as a separator--></div>
----------------------------------
Other div renders here now
----------------------------------
display: inline-block
Bir öğeyi ve ebeveyn üzerinde kullanabileceğiniz text-align: left
, text-align: center
ya text-align: right
örneğin.
clear
Özelliği, bir elemanın sağdan sola, ya da her iki tarafında aynı blok biçimlendirme kapsamında daha önce yüzen elemanlara bitişik olamaz gösterir. Temizlenen elemanlar karşılık gelen yüzen elemanların altına itilir. Örnekler:
clear: none;
Eleman yüzen elemanlara bitişik kalırclear: left;
Sol yüzen elemanların altına itilen elemanclear: right;
Sağ kayan elemanların altına itilen elemanclear: both;
Yüzen tüm elemanların altına itilen elemanclear
geçerli blok biçimlendirme bağlamının dışındaki kaydırmaları etkilemezdisplay: inline-block;
Bu senaryodan css özelliğini kaldırırsak ne olur ? inline-block
Üst öğeyi sınıfı olan kardeş öğesine gerer float-left
. Bu da "açık, geçerli blok biçimlendirme bağlamı dışındaki kayan noktaları etkilemez" deyimini yanlış yapar. Birisi açıklayabilir mi lütfen?
display: inline-block
, artık bir blok biçimlendirme bağlamı (b) o öğenin içindeki yüzer / temizler oluşturmaz ve ilk şamandıra aynı blok biçimlendirme bağlamının (görünüm alanı) bir parçası haline gelir.
Sadece ile clear:both
özelliğini kaldırmaya çalışın ve nasıl yüzdüğünü izleyin .div
class
sample
divs
Bay Alien'in cevabı mükemmel, ama yine de kullanmanızı tavsiye etmiyorum <div class="clear"></div>
çünkü sadece işaretlemenizi kirleten bir hack. Bu, div
kötü yapı ve anlamsal açıdan işe yaramaz , kodunuzu esnek hale getirmez. Bazı tarayıcılarda bu div ek yüksekliğe neden olur ve height: 0;
hangisini daha da kötüye eklemeniz gerekir . Ancak gerçek sorunlar, yüzen öğelerinize arka plan veya kenarlık eklemek istediğinizde başlar - web kötü tasarlandığı için çökecek . Kayan öğeleri clearfix CSS kuralı olan kaba sarmanızı öneririm . Bu da kesmek, ama güzel, kullanımı daha esnek ve insan ve SEO robotları için okunabilir.
clearfix
: stackoverflow.com/questions/211383/…
Bir öğenin diğer öğenin altına yerleştirilmesini istediğinizde bu kodu CSS'de kullanırsınız. Şamandıralar için kullanılır.
İçeriği yüzerseniz sola veya sağa yüzebilirsiniz ... yani ortak bir düzende sol gezinme bölmesi, içerik bölmesi ve altbilgi olabilir.
Altbilginin bu yüzenlerin her ikisinin altında kalmasını sağlamak için (sağa ve sola yüzdüyseniz), altbilgiyi şu şekilde koyarsınız clear: both
.
Bu şekilde her iki şamandıranın altında kalacaktır.
(Sadece sola temizliyorsanız, sadece gerçekten yapmanız gerekir clear: left;
.)
Bu eğiticiyi gözden geçirin:
float
ve sağda veya solda değil, aşağıdaki sonraki öğeyi istediğinizde.