Düzgün CSS çözümü
İçeriği olmayan bir ilk alt öğeyi istemeden hareket eden div öğesine eklemek için aşağıdaki kodu kullanın:
.parent:before
{content: '';position: relative;height: 0px;width: 0px;overflow: hidden;white-space: pre;}
Bu yöntemin avantajı, mevcut herhangi bir öğenin CSS'sini değiştirmenize gerek olmaması ve bu nedenle tasarım üzerinde minimum etkiye sahip olmasıdır. Bunun yanında, eklenen öğe DOM ağacında olmayan bir sözde öğedir .
Sahte öğeler için destek yaygındır: Firefox 3+, Safari 3+, Chrome 3+, Opera 10+ ve IE 8+. Bu, herhangi bir modern tarayıcıda çalışacaktır ( ::before
IE8'de desteklenmeyen yeni tarayıcılara dikkat edin ).
bağlam
Bir öğenin ilk alt öğesinde margin-top
, üst konumunu, gereksiz kenar boşluklarını daraltmanın bir yolu olarak ayarlar. Neden? Aynen öyle.
Aşağıdaki sorun göz önüne alındığında:
<style type="text/css">
div {position: relative;}
.parent {background-color: #ccc;}
.child {margin-top: 40px;}
</style>
<div class="parent"><!--This div moves 40px too-->
<div class="child">Hello world!</div>
</div>
Basit bir alan gibi içeriğe sahip bir çocuk ekleyerek düzeltebilirsiniz. Ancak hepimiz, sadece tasarımla ilgili bir konu için alan eklemekten nefret ediyoruz. Bu nedenle, white-space
içeriği sahte yapmak için özelliği kullanın.
<style type="text/css">
div {position: relative;}
.parent {background-color: #ccc;}
.child {margin-top: 40px;}
.fix {position: relative;white-space: pre;height: 0px;width: 0px;overflow: hidden;}
</style>
<div class="parent"><!--This div won't move anymore-->
<div class="fix"></div>
<div class="child">Hello world!</div>
</div>
Burada position: relative;
, sabitlemenin doğru konumlandırılmasını sağlar. Ve white-space: pre;
düzeltmeye beyaz boşluk gibi herhangi bir içerik eklemenize gerek kalmaz. Ve height: 0px;width: 0px;overflow: hidden;
düzeltmeyi asla görmeyeceğinizden emin olur.
Sen eklemeniz gerekebilir line-height: 0px;
veya max-height: 0px;
yükseklik antik IE tarayıcıları (ben emin değilim) aslında sıfırdır sağlamak için. Ve isteğe bağlı olarak <!--dummy-->
, işe yaramazsa eski IE tarayıcılarda ekleyebilirsiniz .
Kısacası, tüm bunları yalnızca CSS ile yapabilirsiniz (bu, HTML DOM ağacına gerçek bir çocuk ekleme ihtiyacını ortadan kaldırır):
<style type="text/css">
div {position: relative;}
.parent {background-color: #ccc;}
.child {margin-top: 40px;}
.parent:before {content: '';position: relative;height: 0px;width: 0px;overflow: hidden;white-space: pre;}
</style>
<div class="parent"><!--This div won't move anymore-->
<div class="child">Hello world!</div>
</div>