Bunun eski bir sorun olduğunu biliyorum, birçok kez karşılaştım. Sorun şu ki, buradaki tüm düzeltmeler, potansiyel olarak istenmeyen sonuçlara yol açabilecek hackler.
Öncelikle, kök sorununun kolay bir açıklaması var. Kenar boşluğu daraltmanın çalışma şekli nedeniyle, bir konteynerin içindeki ilk öğenin bir üst kenar boşluğu varsa, bu üst kenar boşluğu üst kapsayıcının kendisine etkin bir şekilde uygulanır. Aşağıdakileri yaparak bunu kendi başınıza test edebilirsiniz:
<div>
<h1>Test</h1>
</div>
Bir hata ayıklayıcıda, bunu açın ve div'in üzerine gelin. Div'in kendisinin aslında H1 öğesinin üst kenar boşluğunun durduğu yere yerleştirildiğini fark edeceksiniz. . Bu davranış, tarayıcı tarafından amaçlanmıştır.
Bu yüzden, tuhaf saldırılara başvurmak zorunda kalmadan bunun kolay bir çözümü var, buradaki yayınların çoğunda olduğu gibi (hakaret amaçlanmadı, sadece gerçek) - sadece orijinal açıklamaya geri dönün - ...if the first element inside a container has a top margin...
- Bunu takiben, bu nedenle ihtiyacınız olacak bir kaptaki ilk öğe DEĞİL üst kenarı . Tamam, ama bunu anlamsal olarak belgenize müdahale etmeyen öğeler eklemeden nasıl yaparsınız?
Kolay! Sözde elemanlar! Bunu bir sınıf veya önceden tanımlanmış bir mixin aracılığıyla yapabilirsiniz. :before
Sözde öğe ekleyin :
Bir sınıf aracılığıyla CSS:
.top-margin-fix:before {
content: ' ';
display: block;
width: 100%;
height: .0000001em;
}
Bununla, yukarıdaki biçimlendirme örneğini izleyerek div'inizi şu şekilde değiştirirsiniz:
<div class="top-margin-fix">
<h1>Test</h1>
</div>
Bu neden işe yarıyor?
Bir kaptaki ilk öğe, üst kenar boşluğu yoksa, sonraki öğenin üst kenar boşluğunun başlangıç konumunu ayarlar. Bir :before
sözde öğe ekleyerek , tarayıcı aslında daha önce üst kapsayıcıya anlamsal olmayan (başka bir deyişle, SEO için iyi) bir öğe ekler. ilk öğenizden .
S. Neden yükseklik: .0000001em?
A. Tarayıcının kenar boşluğunu aşağı itmesi için bir yükseklik gereklidir. Bu yükseklik etkili bir şekilde sıfırdır, ancak yine de üst kapsayıcıya dolgu eklemenize izin verecektir. Etkili olarak sıfır olduğu için, konteynerin düzeni üzerinde de bir etkisi olmayacaktır. Güzel.
Artık öğelerinizle başka şeyler yapmak istediğinizde beklenmedik sonuçlara neden olacak garip görüntü stilleri eklemek yerine, bu sorunu çözmek için bir sınıf (veya daha iyisi, SASS / LESS'te bir mixin!) ve / veya bu sorunu gerçekten çözmeyi amaçlamayan dolgu veya garip konum / kayan stillerle değiştirme.
overflow:hidden
vakaların% 90'ı için daha iyidir.