CSS - wyrównaj elementy DIV w poziomie


84

Mam kontener div ze stałym widthi height, z overflow: hidden.

Chcę, aby w tym kontenerze znajdował się poziomy rząd zmiennej typu float: left divs. Elementy Div, które są pływające po lewej stronie, w naturalny sposób przechodzą do „wiersza” poniżej po przeczytaniu prawej krawędzi ich elementu nadrzędnego. Stanie się tak nawet wtedy, heightgdy rodzic nie powinien na to pozwolić. Oto jak to wygląda:

! [Wrong] [1] - usunięto obraz szopki, który został zastąpiony reklamą

Jak chciałbym to wyglądać:

! [Right] [2] - usunięto obraz szopki, który został zastąpiony reklamą

Uwaga: pożądany efekt można osiągnąć za pomocą elementów inline & white-space: no-wrap(tak to zrobiłem na pokazanym obrazku). Nie jest to jednak dla mnie dobre (z powodów zbyt długich, by tu wyjaśnić), ponieważ podrzędne elementy div muszą być pływającymi elementami blokowymi.


8
Wydaje się, że linki do Twojego obrazu są uszkodzone. Jeśli nadal masz oryginały, prześlij je ponownie do stack.imgur. Dzięki!
Ilmari Karonen

Odpowiedzi:


99

Możesz umieścić wewnętrzny element DIV w pojemniku, który jest wystarczająco szeroki, aby pomieścić wszystkie pływające elementy DIV.

#container {
  background-color: red;
  overflow: hidden;
  width: 200px;
}

#inner {
  overflow: hidden;
  width: 2000px;
}

.child {
  float: left;
  background-color: blue;
  width: 50px;
  height: 50px;
}
<div id="container">
  <div id="inner">
    <div class="child"></div>
    <div class="child"></div>
    <div class="child"></div>
  </div>
</div>


jak mogę więc ustawić zewnętrzne centrum div? Próbowałem dodać align = "center" do zewnętrznego div, wygląda na to, że nie działa.
hakunami

1
Działa to również dla szerokości procentowych. W moim przypadku używam kontenera div z width: 200%;elementami potomnymi width: 50%;. Następnie mogę użyć transform: translateX(n%);na kontenerze, aby naśladować efekt karuzeli, o ile mam kontener nadrzędny zoverflow: hidden;
evolross

31

style="overflow:hidden"dla rodziców divi style="float: left"dla wszystkich dzieci divssą ważne, aby divswyrównać poziomo w starszych przeglądarkach, takich jak IE7 i starsze.

W przypadku nowoczesnych przeglądarek można użyć style="display: table-cell"dla całego dziecka divsi renderowałoby się prawidłowo w poziomie.


6

To wydaje się bliskie temu, czego chcesz:

#foo {
  background: red;
  max-height: 100px;
  overflow-y: hidden;
}

.bar {
  background: blue;
  width: 100px;
  height: 100px;
  float: left;
  margin: 1em;
}
<div id="foo">
  <div class="bar"></div>
  <div class="bar"></div>
  <div class="bar"></div>
  <div class="bar"></div>
  <div class="bar"></div>
  <div class="bar"></div>
</div>


5

możesz korzystać z clipnieruchomości:

#container {
  position: absolute;
  clip: rect(0px,200px,100px,0px);
  overflow: hidden;
  background: red;
}

zanotuj position: absolutei overflow: hiddenpotrzebne, aby dostać się clipdo pracy.


4
jaka jest obsługa przeglądarki klipu?
Alex

1
Od w3schools.com/cssref/pr_pos_clip.asp : Właściwość clip jest obsługiwana we wszystkich głównych przeglądarkach. Uwaga: wartość „dziedziczenie” nie jest obsługiwana w przeglądarce IE7 i starszych. IE8 wymaga! DOCTYPE. IE9 obsługuje „dziedziczenie”.
dsomnus

4

Float: left, display: inline-block nie wyrówna elementów w poziomie, jeśli przekroczą szerokość kontenera.

Należy pamiętać, że pojemnik nie powinien być zawijany, jeśli elementy MUSZĄ być wyświetlane poziomo: white-space: nowrap


4

Możesz teraz używać css flexbox do wyrównywania elementów div w poziomie i w pionie, jeśli zajdzie taka potrzeba. ogólna formuła wygląda następująco

parent-div {
  display: flex;
  flex-wrap: wrap;
  /* for horizontal aligning of child divs */
  justify-content: center;
  /* for vertical aligning */
  align-items: center;
}

child-div {
  width: /* yoursize for each div */
  ;
}

eleganckie rozwiązanie.
zawhtut

1

Wypuść je w lewo. Przynajmniej w Chrome nie musisz mieć opakowania id="container", jak w przykładzie LucaM.


0

Możesz zrobić coś takiego:

#container {
  background-color: red;
  width: 200px;
}

.child {
  background-color: blue;
  width: 150px;
  height: 50px;
}
<div id="container">
  <div id="inner">
    <div class="child"></div>
    <div class="child"></div>
    <div class="child"></div>
  </div>
</div>

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.