Esnek bir öğenin doğru yüzmesini sağlamak


103

Bende var

<div class="parent">
    <div class="child" style="float:right"> Ignore parent? </div>
    <div> another child </div>
</div>

Ebeveyn var

.parent {
    display: flex;
}

İlk çocuğum için öğeyi sağa doğru kaydırmak istiyorum.

Ve diğer div'lerim, ebeveyn tarafından belirlenen esneklik kuralını takip edecek.

Bu mümkün bir şey mi?

Değilse, nasıl düşük float: rightesneklik yaparım ?

Yanıtlar:


194

Sen kullanamazsınız floatiçindeki esnek konteyner ve sebebi olmasıdır esnek düzey kutuları için geçerli değildir şamandıra özelliği burada gördüğünüz gibi Fiddle.

Öyleyse child, parentöğeyi öğenin sağına yerleştirmek istiyorsanız kullanabilirsiniz, margin-left: autoancak şimdi childöğe de divburada gördüğünüz gibi diğerini sağa itecektir Fiddle.

Şimdi yapabileceğiniz şey, ikinci div'i etkilememesi için öğelerin sırasını değiştirmek ve öğeye ayarlamaktır order: 2.child

.parent {
  display: flex;
}
.child {
  margin-left: auto;
  order: 2;
}
<div class="parent">
  <div class="child">Ignore parent?</div>
  <div>another child</div>
</div>


Teşekkürler ilk çözüme bir göz atabilirim. Ekranı kullanmak istemiyorum: mutlak, çünkü diğer çocuklarım ilk çocuğun kapsamına girmemeli.
Zhen Liu

4
" şamandıralar esnek kabın içine girmez ". Bu doğru, ancak nedeni bu değil. Bunun nedeni, floatözelliğin esnek seviyeli kutular için geçerli olmamasıdır.
Oriol

Bu işe yarıyor, teşekkürler! Neden justify-self: end;(veya benzeri bir şey) çocuk için işe yaramıyor? Bu, flexbox problemine pek esnek olmayan bir çözüm gibi görünüyor.
Brady Dowling

1
@BradyDowling Bunun geç bir cevap olduğunu biliyorum, ancak kendini sonlandırmak için ekranın bir ızgaraya ayarlanmasını gerektiriyor. Flexbox'lar justify-self: end'i göz ardı eder. Buraya bakın: developer.mozilla.org/en-US/docs/Web/CSS/justify-self
Paul

<div> başka bir alt </div> <div class = "child"> Ebeveyni yoksaymak mı? </div> U iki
div'i

23

Şamandıralara ihtiyacınız yok. Aslında, flexbox'ta kayan değerler göz ardı edildiği için işe yaramazlar .

Ayrıca CSS konumlandırmaya ihtiyacınız yoktur.

Çeşitli esnek yöntemler mevcuttur. autokenar boşluklarından başka bir cevapta bahsedilmiştir .

İşte diğer iki seçenek:

  • Kullanım justify-content: space-betweenve ordermülkiyet.
  • justify-content: space-betweenDiv'lerin sırasını kullanın ve tersine çevirin.

.parent {
    display: flex;
    justify-content: space-between;
}

.parent:first-of-type > div:last-child { order: -1; }

p { background-color: #ddd;}
<p>Method 1: Use <code>justify-content: space-between</code> and <code>order-1</code></p>

<div class="parent">
    <div class="child" style="float:right"> Ignore parent? </div>
    <div>another child </div>
</div>

<hr>

<p>Method 2: Use <code>justify-content: space-between</code> and reverse the order of 
             divs in the mark-up</p>

<div class="parent">
    <div>another child </div>
    <div class="child" style="float:right"> Ignore parent? </div>
</div>

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.