Mam kontener div ze stałym width
i 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, height
gdy 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.
Odpowiedzi:
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>
źródło
width: 200%;
elementami potomnymiwidth: 50%;
. Następnie mogę użyćtransform: translateX(n%);
na kontenerze, aby naśladować efekt karuzeli, o ile mam kontener nadrzędny zoverflow: hidden;
style="overflow:hidden"
dla rodzicówdiv
istyle="float: left"
dla wszystkich dziecidivs
są ważne, abydivs
wyró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 dzieckadivs
i renderowałoby się prawidłowo w poziomie.źródło
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>
źródło
możesz korzystać z
clip
nieruchomości:#container { position: absolute; clip: rect(0px,200px,100px,0px); overflow: hidden; background: red; }
zanotuj
position: absolute
ioverflow: hidden
potrzebne, aby dostać sięclip
do pracy.źródło
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
źródło
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 */ ; }
źródło
Wypuść je w lewo. Przynajmniej w Chrome nie musisz mieć opakowania
id="container"
, jak w przykładzie LucaM.źródło
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>
źródło