Mam trochę osobliwy problem, który obecnie rozwiązuję za pomocą table
, patrz poniżej. Zasadniczo chcę, aby dwa elementy div zajmowały 100% dostępnej szerokości, ale zajmowały tylko tyle miejsca w pionie, ile potrzeba (co nie jest tak oczywiste na rysunku). Obydwa powinny zawsze mieć dokładnie tę samą wysokość z niewielką linią między nimi, jak pokazano.
(źródło: pici.se )
To wszystko jest bardzo łatwe do zrobienia przy użyciu table
, co obecnie robię. Nie jestem jednak zbytnio zainteresowany rozwiązaniem, ponieważ semantycznie nie jest to w rzeczywistości tabela.
html
css
html-table
Deniz Dogan
źródło
źródło
Odpowiedzi:
Możesz uzyskać kolumny o równej wysokości w CSS, stosując dolne wypełnienie dużej ilości, dolny ujemny margines o tej samej wartości i otaczając kolumny elementem div, który ma ukryte przepełnienie. Wyśrodkowanie tekstu w pionie jest trochę trudniejsze, ale powinno ci to pomóc.
Myślę, że warto o tym wspomnieć
poprzednia odpowiedź Streetpc ma nieprawidłowy html, typ dokumentu to XHTML, a atrybuty są otoczone pojedynczymi cudzysłowami. Warto również to zauważyćnie potrzebujesz dodatkowego elementu przyclear
włączonym, aby wyczyścić wewnętrzne pływaki pojemnika. Jeśli użyjesz przepełnienia ukrytego, wyczyści to elementy pływające we wszystkich przeglądarkach innych niż IE, a następnie po prostu dodasz coś, co ma dać hasLayout, takie jak szerokość lub powiększenie: 1 spowoduje, że IE wyczyści swoje wewnętrzne elementy pływające.Przetestowałem to we wszystkich nowoczesnych przeglądarkach FF3 + Opera9 + Chrome Safari 3+ i IE6 / 7/8. Może się to wydawać brzydką sztuczką, ale działa dobrze i często go używam w produkcji.
Mam nadzieję, że to pomoże.
źródło
Jest rok 2012 + n, więc jeśli nie troska o IE6 / 7
display:table
,display:table-row
adisplay:table-cell
praca we wszystkich nowoczesnych przeglądarek:http://www.456bereastreet.com/archive/200405/equal_height_boxes_with_css/
Aktualizacja 17.06.2016: Jeśli myślisz, że nadszedł czas
display:flex
, sprawdź Flexbox Froggy .źródło
display: flex
?Aby to osiągnąć, powinieneś użyć flexbox. Nie jest obsługiwany w IE8 i IE9 i tylko z prefiksem -ms w IE10, ale wszystkie inne przeglądarki go obsługują. W przypadku prefiksów dostawców należy również użyć autoprefiksera .
źródło
możesz to uzyskać pracując z js:
źródło
To klasyczny problem w CSS. Naprawdę nie ma na to rozwiązania.
Ten artykuł z A List Apart to dobra lektura na ten problem. Wykorzystuje technikę zwaną „fałszywymi kolumnami”, polegającą na umieszczeniu jednego obrazu tła ułożonego pionowo na elemencie zawierającym kolumny, co tworzy iluzję kolumn o równej długości. Ponieważ znajduje się na owijce elementów pływających, jest tak długi, jak najdłuższy element.
Redaktorzy A List Apart mają w artykule następującą uwagę:
Technika ta wymaga projektów o całkowicie statycznej szerokości, które nie działają dobrze z układami płynnymi i elastycznymi technikami projektowania, które są obecnie popularne w witrynach obsługujących różne urządzenia. Jednak w przypadku witryn o statycznej szerokości jest to niezawodna opcja.
źródło
Miałem podobny problem i moim zdaniem najlepszą opcją jest użycie trochę javascript lub jquery.
Możesz uzyskać tę samą wysokość, aby pożądane elementy DIV miały taką samą wysokość, uzyskując najwyższą wartość i stosując ją do wszystkich innych elementów div. Jeśli masz wiele elementów div i wiele rozwiązań, sugeruję napisanie niewielkiego zaawansowanego kodu js, aby dowiedzieć się, który ze wszystkich elementów div jest najwyższy, a następnie użyć jego wartości.
Z jquery i 2 divami jest to bardzo proste, oto przykładowy kod:
$('.smaller-div').css('height',$('.higher-div').css('height'));
I na koniec ostatnia rzecz. Ich wypełnienie (góra i dół) muszą być takie same! Jeśli ktoś ma większe wypełnienie, musisz wyeliminować różnicę wypełnienia.
źródło
O ile wiem, nie można tego zrobić przy użyciu obecnych implementacji CSS. Aby utworzyć dwie kolumny o równej wysokości, potrzebujesz JS.
źródło
To działa dla mnie w IE 7, FF 3.5, Chrome 3b, Safari 4 (Windows).
Działa również w IE 6, jeśli odkomentujesz wyraźniejszy element div na dole. Edit : jak Natalie Downe powiedział, można po prostu dodać
width: 100%;
do#container
zamiast.Nie znam sposobu CSS na wyśrodkowanie w pionie tekstu w prawym elemencie div, jeśli element div nie ma stałej wysokości. Jeśli tak, możesz ustawić tę
line-height
samą wartość co wysokość div i wstawić wewnętrzny div zawierający tekst za pomocądisplay: inline; line-height: 110%
.źródło
Używając JavaScript, możesz ustawić dwa znaczniki DIV na tę samą wysokość. Mniejszy element div zostanie dopasowany do tej samej wysokości, co najwyższy znacznik div, używając kodu pokazanego poniżej:
Z „left” i „right” są identyfikatorami tagów div.
źródło
Używając właściwości css -> display: table-cell
źródło
Używając JS, użyj
data-same-height="group_name"
we wszystkich elementach, które chcesz mieć taką samą wysokość .Przykład: https://jsfiddle.net/eoom2b82/
Kod:
źródło
Musiałem zrobić coś podobnego, oto moja realizacja. Podsumowując, chodzi o to, aby dwa elementy zajmowały szerokość danego kontenera nadrzędnego, a wysokość była tak wysoka, jak to konieczne. Zasadniczo wysokość równa maksymalnej wysokości największej ilości zawartości, ale drugi pojemnik jest równy.
html
css
źródło
Kilka lat temu,
float
nieruchomość wykorzystywana do rozwiązania tego problemu ztable
podejściem użyciudisplay: table;
idisplay: table-row;
idisplay: table-cell;
.Ale teraz, dzięki właściwości flex, możesz rozwiązać to za pomocą 3 linii kodu:
display: flex;
iflex-wrap: wrap;
iflex: 1 0 50%;
1 0 50%
toflex
wartości, którym nadaliśmy:flex-grow flex-shrink flex-basis
odpowiednio. Jest to stosunkowo nowy skrót w flexboksie, aby uniknąć wpisywania ich indywidualnie. Mam nadzieję, że to komuś pomożeźródło