Chcę mieć dwukolumnowy układ div, w którym każdy może mieć zmienną szerokość, np
div {
float: left;
}
.second {
background: #ccc;
}
<div>Tree</div>
<div class="second">View</div>
Chcę, aby div „view” rozszerzył się na całą szerokość dostępną po tym, jak div „tree” wypełnił potrzebną przestrzeń.
Obecnie mój div „view” jest przeskalowany do zawartości, która zawiera. Dobrze będzie, jeśli oba div zajmą całą wysokość.
Nie powielane zastrzeżenie:
- Rozwiń div do maksymalnej szerokości, gdy ustawiony jest float: left, ponieważ tam lewy ma stałą szerokość.
- Pomoc z div - dopasuj div do pozostałej szerokości, ponieważ potrzebuję dwóch kolumn wyrównanych do lewej
html
css
multiple-columns
Anurag Uniyal
źródło
źródło
overflow hidden
Odpowiedzi:
Rozwiązaniem tego problemu jest rzeczywiście bardzo proste, ale nie na wszystko oczywiste. Musisz uruchomić coś, co nazywa się „kontekstem formatowania bloku” (BFC), który współdziała z elementami zmiennoprzecinkowymi w określony sposób.
Po prostu weź ten drugi div, usuń pływak i daj go
overflow:hidden
zamiast tego. Każda wartość przepełnienia inna niż widoczna powoduje, że ustawiony blok staje się BFC. BFC nie pozwalają pływakom potomnym na ucieczkę od nich, ani nie pozwalają intruzom rodzeństwa / przodkom na ingerencję w nie. Efektem netto jest to, że pływający div będzie robił swoje, wtedy drugi div będzie zwykłym blokiem, zajmującym całą dostępną szerokość oprócz tej zajmowanej przez float .Powinno to działać we wszystkich obecnych przeglądarkach, chociaż może być konieczne wyzwolenie hasLayout w IE6 i 7. Nie pamiętam.
Dema:
źródło
Właśnie odkryłem magię elastycznych pudełek (display: flex). Spróbuj tego:
Pudełka Flex dają mi kontrolę, jakiej życzyłem sobie css od 15 lat. W końcu jest tutaj! Więcej informacji: https://css-tricks.com/snippets/css/a-guide-to-flexbox/
źródło
flex-grow: 100;
zamiastflex-grow: 1;
?flex-grow:10
a następnie ustawiłbym #b naflex-grow: 90
tak, aby #a wynosiłaby 10% szerokości linii, a #b byłby 90% szerokości linii. Jeśli żaden inny element nie ma stylu elastycznej szerokości, to nie ma znaczenia technicznego.Rozwiązanie Flexbox
Po to jest ta
flex-grow
właściwość.Uwaga: Dodaj prefiksy dostawcy elastycznego, jeśli jest to wymagane obsługiwane przeglądarki .
źródło
Byłby to dobry przykład czegoś, co jest trywialne w stosunku do tabel i trudne (jeśli nie niemożliwe, przynajmniej w sensie różnych przeglądarek) do CSS.
Gdyby obie kolumny miały stałą szerokość, byłoby to łatwe.
Gdyby jedna z kolumn miała stałą szerokość, byłoby to nieco trudniejsze, ale całkowicie wykonalne.
Przy zmiennej szerokości obu kolumn IMHO wystarczy użyć tabeli dwukolumnowej.
źródło
display:none;
Mimo że w miarę możliwości reaguję w 100% na ruchomej skali, czasem lepiej jest całkowicie zmienić projekt na urządzenie mobilne wykorzystujące dotyk ekranu dotykowego i styl przycisku.Sprawdź to rozwiązanie
źródło
Użyj
calc
:Problem polega na tym, że wszystkie szerokości muszą być wyraźnie zdefiniowane, albo jako wartość (px i em działają dobrze), albo jako procent czegoś wyraźnie zdefiniowanego.
źródło
Tutaj może to pomóc ...
źródło
<div class="clear" style="clear: both; height: 1px; overflow: hidden; font-size:0pt; margin-top: -1px;"></div>
Nie rozumiem, dlaczego ludzie tak ciężko pracują, aby znaleźć rozwiązanie czysto CSS dla prostych układów kolumnowych, które są TAK ŁATWE przy użyciu starego
TABLE
znacznika.Wszystkie przeglądarki nadal mają logikę układu tabeli ... Może nazywaj mnie dinozaurem, ale mówię, że ci to pomoże.
O wiele mniej ryzykowne również pod względem zgodności z różnymi przeglądarkami.
źródło
media-queries
umieścić obie kolumny jedna nad drugą na małych urządzeniach, to jest niemożliwe ze starymtable
znacznikiem. Aby to działało, musisz zastosowaćCSS
style tabel. Tak więc na dzień dzisiejszy lepiej to rozwiązać,CSS
jeśli chcesz responsywny układ dla dowolnego rozmiaru ekranu.Jeśli szerokość drugiej kolumny jest stała, skorzystaj z
calc
funkcji CSS działającej we wszystkich popularnych przeglądarkach :W ten sposób szerokość drugiego rzędu zostanie obliczona (tj. Pozostała szerokość) i zastosowana odpowiednio.
źródło
css-grid
. Działa również z tym,position: fixed
co czyni go idealnym wyborem! Dziękuję Ci!źródło
Możesz wypróbować układ siatki CSS .
źródło
flex-grow - określa zdolność do wzrostu elementu flex w razie potrzeby. Akceptuje wartość jednostkową, która służy jako proporcja. To określa, jaka ilość dostępnego miejsca w elastycznym pojemniku powinien zająć przedmiot.
Jeśli wszystkie elementy mają Flex-Grow ustawioną na 1, pozostała przestrzeń w pojemniku zostanie równo rozdzielona na wszystkie dzieci. Jeśli jedno z dzieci ma wartość 2, pozostałe miejsce zajmie dwa razy więcej miejsca niż inne (lub przynajmniej spróbuje to zrobić). Zobacz więcej tutaj
źródło
Nieco inna implementacja,
Dwa panele div (zawartość + dodatkowe), obok siebie,
content panel
rozwija jeśliextra panel
nie są obecne.jsfiddle: http://jsfiddle.net/qLTMf/1722/
źródło
Pat - masz rację. Dlatego to rozwiązanie zadowoli zarówno „dinozaury”, jak i współczesnych. :)
źródło
Możesz użyć biblioteki CSS W3, która zawiera klasę o nazwie,
rest
która robi tylko to:Nie zapomnij połączyć biblioteki CSS na stronie
header
:Oto oficjalne demo: W3 School Tryit Editor
źródło
Nie jestem pewien, czy jest to odpowiedź, której oczekujesz, ale dlaczego nie ustawisz szerokości drzewa na „auto” i szerokości „widoku” na 100%?
źródło
Zobacz dostępne struktury układu CSS. Polecam Simpl Lub nieco bardziej skomplikowane, ramy Blueprint.
Jeśli używasz Simpl (co wymaga importu tylko jednego pliku simpl.css ), możesz to zrobić:
, dla układu 50–50 lub:
, dla 25-75.
To takie proste.
źródło
Dzięki za wtyczkę Simpl.css!
pamiętaj, aby tak zawinąć wszystkie kolumny
ColumnWrapper
.Mam zamiar wydać wersję 1.0 Simpl.css, więc pomóżcie rozpowszechniać!
źródło
Napisałem funkcję javascript, którą wywołuję z jQuery $ (document) .ready (). Spowoduje to przeanalizowanie wszystkich dzieci div rodzica i zaktualizuje tylko najbardziej odpowiednie dziecko.
HTML
javascript
źródło
Jest to dość łatwe w użyciu Flexboksa. Zobacz fragment poniżej. Dodałem pojemnik owijający, aby kontrolować przepływ i ustawić wysokość globalną. Dodano również granice w celu identyfikacji elementów. Zauważ, że div div również teraz rozwija się do pełnej wysokości, zgodnie z wymaganiami. W scenariuszu rzeczywistym należy używać prefiksów dostawców dla Flexbox, ponieważ nie jest jeszcze w pełni obsługiwany.
Opracowałem bezpłatne narzędzie do rozumienia i projektowania układów za pomocą Flexboksa. Sprawdź to tutaj: http://algid.com/Flex-Designer
źródło
stretch
ponieważ jest to wartość domyślna i nie trzebadisplay:flex
Jeśli obie szerokości mają zmienną długość, dlaczego nie obliczyć szerokości za pomocą skryptów lub serwera?
<div style="width: <=% getTreeWidth() %>">Tree</div>
źródło