Yüzen elemanlar kap elemanının yüksekliğine eklenmez ve bu nedenle bunları temizlemezseniz kap yüksekliği artmaz ...
Size görsel olarak göstereceğim:
Daha Fazla Açıklama:
<div>
<div style="float: left;"></div>
<div style="width: 15px;"></div> <!-- This will shift
besides the top div. Why? Because of the top div
is floated left, making the
rest of the space blank -->
<div style="clear: both;"></div>
<!-- Now in order to prevent the next div from floating beside the top ones,
we use `clear: both;`. This is like a wall, so now none of the div's
will be floated after this point. The container height will now also include the
height of these floated divs -->
<div></div>
</div>
overflow: hidden;
Konteyner öğeleri de ekleyebilirsiniz , ancak clear: both;
bunun yerine kullanmanızı öneririz .
Ayrıca, bir öğeyi kendiliğinden temizlemek isterseniz
.self_clear:after {
content: "";
clear: both;
display: table;
}
CSS Float Nasıl Çalışır?
Şamandıra tam olarak nedir ve ne işe yarar?
float
Mülkiyet çoğu başlayanlar tarafından yanlış anlaşılır. Peki, tam olarak ne yapar float
? Başlangıçta, float
özellik kayan left
ya da görüntülerin etrafındaki metin akışına sokuldu right
. @Madara Uchicha'nın başka bir açıklaması .
Peki, float
kutuları yan yana yerleştirmek için özelliği kullanmak yanlış mı? Cevap hayırdır ; float
kutuları yan yana ayarlamak için özelliği kullanırsanız sorun yoktur .
Bir inline
veya block
seviye elemanını yüzmek, elemanın eleman gibi davranmasını sağlar inline-block
.
gösteri
Bir öğeyi yüzer ise left
veya right
, width
elemanın sürece, içerik işlediğini ile sınırlı olacaktır width
açıkça tanımlanır ...
float
Bir element olamaz center
. Bu, yeni başlayanlar ile her zaman gördüğüm en büyük sorun float: center;
, bu float
özellik için geçerli bir değer değil . float
Genellikle için kullanılır float
çok için / taşı içeriği sola ya da çok için sağa . Sadece vardır dört için geçerli değerler float
mülkiyet yani left
, right
, none
(varsayılan) ve inherit
.
Üst öğe, kayan alt öğeler içerdiğinde, bunu önlemek clear: both;
için, her iki taraftaki kayan öğeleri temizlemek için özelliği kullanırız , bu da üst öğenin çökmesini önler. Daha fazla bilgi için, başka bir cevabımı buraya başvurabilirsiniz .
(Önemli) Çeşitli elemanlardan oluşan bir yığınımız olduğunu düşünün. Kullandığımızda float: left;
veya float: right;
öğe yığının üzerinde birer birer hareket ettiğinde . Bu nedenle, normal belge akışındaki öğeler yüzen öğelerin arkasına gizlenecektir, çünkü normal yüzen öğelerin üstündeki yığın seviyesindedir. (Lütfen bunu z-index
tamamen farklı olduğu için ilişkilendirmeyin .)
Üstbilgi, altbilgi ve 2 sütun içeren basit bir 2 sütun düzenine ihtiyacımız olduğunu varsayarak, CSS'nin nasıl çalıştığını açıklamak için örnek olarak bir örnek almak, bu yüzden planın görünüşü şöyle ...
Yukarıdaki örnekte, biz sadece kırmızı kutuları yüzen olmak ya yapabilirsiniz olacak float
hem left
veya mümkünse float
üzerine left
kadar ve başka right
bunun 3 sütun ise şunları yapabilirsiniz, düzen bağlıdır sıra float
için 2 sütun left
nerede başka biri right
bu duruma bağlıdır, ancak bu örnekte, basitleştirilmiş 2 sütun düzenine sahibiz, böylece float
biri diğerine left
ve diğerine right
.
Düzeni oluşturmak için işaretleme ve stiller aşağıda açıklanmıştır ...
<div class="main_wrap">
<header>Header</header>
<div class="wrapper clear">
<div class="floated_left">
This<br />
is<br />
just<br />
a<br />
left<br />
floated<br />
column<br />
</div>
<div class="floated_right">
This<br />
is<br />
just<br />
a<br />
right<br />
floated<br />
column<br />
</div>
</div>
<footer>Footer</footer>
</div>
* {
-moz-box-sizing: border-box; /* Just for demo purpose */
-webkkit-box-sizing: border-box; /* Just for demo purpose */
box-sizing: border-box; /* Just for demo purpose */
margin: 0;
padding: 0;
}
.main_wrap {
margin: 20px;
border: 3px solid black;
width: 520px;
}
header, footer {
height: 50px;
border: 3px solid silver;
text-align: center;
line-height: 50px;
}
.wrapper {
border: 3px solid green;
}
.floated_left {
float: left;
width: 200px;
border: 3px solid red;
}
.floated_right {
float: right;
width: 300px;
border: 3px solid red;
}
.clear:after {
clear: both;
content: "";
display: table;
}
Düzenle adım adım gidelim ve şamandıranın nasıl çalıştığını görelim ..
Her şeyden önce, biz ana sarıcı eleman kullanmak, sadece o zaman kullandığımız, bu Görünümünüzün olduğunu varsayabiliriz header
ve bir atama height
ait 50px
hiçbir şey fantezi yani orada. Bu kadar sürer sadece normal olmayan süzülüyor blok düzeyinde eleman var 100%
o süzülüyor sürece yatay alan ya da biz atamak inline-block
ona.
İlk geçerli bir değer float
olduğunu left
bizim örneğimizde bu yüzden, kullandığımız float: left;
için .floated_left
biz bir blok yüzer niyetinde böylece, left
bizim muhafaza elemanının.
Sütun sola yüzer
Ve evet, görürseniz, .wrapper
daraltılmış olan üst öğe, yeşil bir kenarlıkla gördüğünüz genişlemedi, ancak doğru olmalı? Bir süre sonra buna geri dönecek, şimdilik, üzerinde yüzen bir sütun var left
.
İkinci sütuna geliyor, bunu sağlayan float
bu birright
Sağa yüzen başka bir sütun
Burada, bir var 300px
biz geniş sütun float
için right
o kadar süzülüyor oluyor olarak ilk sütunda yanında oturacak, left
ve o kadar süzülüyor beri left
, bu kadar boş oluk oluşturulan right
ve üzerinde alanı geniş olduğundan right
, bizim right
yüzer eleman bir yanında mükemmel oturdu left
.
Yine de, üst öğe çöktü, şimdi bunu düzeltelim. Üst öğenin daraltılmasını önlemenin birçok yolu vardır.
- Boş bir blok seviyesi öğesi ekleyin ve
clear: both;
kayan öğeleri tutan üst öğe bitmeden önce kullanın , şimdi bu clear
sizin için işi yapacak yüzen öğelerinize ucuz bir çözümdür, ancak bunu kullanmamanızı tavsiye ederim.
Ekleme <div style="clear: both;"></div>
önce .wrapper
div
olduğu gibi, uçları
<div class="wrapper clear">
<!-- Floated columns -->
<div style="clear: both;"></div>
</div>
gösteri
Eh, bu çok iyi bir şekilde düzeldi, artık çökmüş bir overflow: hidden;
üst öğe yok, ancak DOM'a gereksiz işaretleme ekliyor, bu nedenle bazıları, amaçlandığı gibi çalışan kayan alt öğeleri tutan üst öğe üzerinde kullanılmasını önermektedir .
Kullanım overflow: hidden;
ile ilgili.wrapper
.wrapper {
border: 3px solid green;
overflow: hidden;
}
gösteri
Bu bize her ihtiyaç duyduğumuzda bir öğe kazandırır, clear
float
ancak bununla çeşitli vakaları test ettiğim box-shadow
için, alt öğeler üzerinde kullanılan belirli bir birinde başarısız oldu .
Demo (Gölgeyi 4 tarafta da göremiyorum,overflow: hidden;
bu soruna neden oluyor)
Peki şimdi ne olacak? Bir öğeyi kaydedin, overflow: hidden;
açık bir düzeltme kesmek için gitmeyin, CSS'nizde aşağıdaki snippet'i kullanın ve tıpkı overflow: hidden;
üst öğe için kullandığınız gibi , class
kendi kendini temizlemek için üst öğede aşağıdakileri arayın .
.clear:after {
clear: both;
content: "";
display: table;
}
<div class="wrapper clear">
<!-- Floated Elements -->
</div>
gösteri
Burada gölge amaçlandığı gibi çalışır, ayrıca çökmeyi önleyen ana öğeyi kendiliğinden temizler.
Ve son olarak, clear
kayan elemanlardan sonra altbilgiyi kullanıyoruz .
gösteri
float: none;
Zaten ne zaman kullanılır, varsayılan olduğu gibi, bildirmek için herhangi bir kullanım float: none;
?
Duyarlı bir tasarıma gidiyorsanız, kayan öğelerinizin belirli bir çözünürlükte birbirinin altında olmasını istediğinizde, bu değeri birçok kez kullanacaksınız. Çünkü bu float: none;
mülk burada önemli bir rol oynamaktadır.
Nasıl float
faydalı olduğuna dair birkaç gerçek dünya örneği .
- Daha önce gördüğümüz ilk örnek, bir veya daha fazla sütun düzeni oluşturmaktır.
- Kullanılması
img
süzülüyor içini p
etrafında akmaya içeriğimizi sağlayacaktır.
Demo (Kayanimg
)
Demo 2 (img
yüzerleft
)
float
Yatay menü oluşturmak için kullanma - Demo
İkinci öğeyi de yüzdürün veya "kenar boşluğu" kullanın
Son fakat en az değil, float
sadece tek bir öğeye sahip olduğunuz left
ancak float
diğerini yapmadığınız bu özel durumu açıklamak istiyorum , ne olacak?
Biz kaldırırsanız varsayalım float: right;
kızımız gelen .floated_right
class
, div
aşırı gelen işlenecek left
o süzülüyor çekmemektedir.
gösteri
Yani bu durumda, ya olabildiğince float
için left
de
VEYA
Sen edebilirsiniz kullanmak margin-left
yani süzülüyor sol sütunda büyüklüğüne eşit olacak 200px
geniş .