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 asideweb 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 divalan boşluğu kullanılmamış olarak bırakır, bu da divsonradan 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 .clearve cleardeğeri ile denilen bir özellik tutar both. Öyleyse neden ihtiyacı olduğunu görelim both.
Ben yüzen asideve sectionsola elemanları, bu yüzden bir havuz var, burada headerkatı arazi, asideve sectionhavuzda 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 . divAçıklama amacıyla bilerek boş bir örnek kullanıyorum )
Yukarıda 3 örnek verdim, 1'inci, redkapta 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.
divsectionKalan sola doğru kayar ve kalan boşluğa geçerdivböylece temizlenmiş sectionetiketi süzülüyor aşağıda verecek divs 

Son fakat en az değil, footeretiket, kayan öğelerden sonra , etiketlerimi clearbildirmeden ö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 divdeğ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 :afteriç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 diviçin de kullandığımız özelliğe sahip boş bir divelemana eşdeğer olmayan şamandıraları temizlediğimiz yerde render clear: both;edilir. Şimdi neden display: table;ve contentbu cevapların kapsamı dışındadır, ancak sözde öğe hakkında daha fazla bilgi edinebilirsiniz .
IE8 :aftersö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-blockBir öğeyi ve ebeveyn üzerinde kullanabileceğiniz text-align: left, text-align: centerya 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 .divclass sampledivs
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, divkö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:
floatve sağda veya solda değil, aşağıdaki sonraki öğeyi istediğinizde.