Mam coś takiego:
<div style="width:100px;float:left">menu</div>
<div style="float:left">content</div>
oba pływaki są konieczne. Chcę, aby element div zawartości wypełniał cały ekran bez tych 100 pikseli dla menu. Jeśli nie użyję float, div rozwija się dokładnie tak, jak powinien. Ale jak to ustawić, gdy ustawiono wartość zmiennoprzecinkową? Jeśli używam czegoś podobnego
style=width:100%
wtedy element div zawartości otrzymuje rozmiar elementu nadrzędnego, którym jest body lub inny element div, który również wypróbowałem, więc oczywiście nie mieści się na prawo od menu i jest pokazany poniżej.
Najbardziej kompatybilny sposób, jaki znalazłem, nie jest oczywisty. Musisz usunąć pływak z drugiej kolumny i nałożyć
overflow:hidden
na niego. Chociaż wydaje się, że ukrywa to zawartość wychodzącą poza element div, w rzeczywistości zmusza go do pozostania w swoim rodzicu.Używając Twojego kodu, oto przykład, jak można to zrobić:
Mam nadzieję, że przydaje się to każdemu, kto ma ten problem, uważam, że działa najlepiej w witrynie, którą budowałem, po próbie dostosowania jej do innych rozdzielczości. Niestety, to nie zadziała, jeśli dołączysz również prawy element zmienny
div
po treści, jeśli ktoś zna dobry sposób na to, aby to zadziałało, z dobrą kompatybilnością z IE, byłbym bardzo szczęśliwy, mogąc to usłyszeć.Nowa, lepsza opcja przy użyciu
display: flex;
Teraz, gdy model Flexbox jest dość szeroko wdrożony, w rzeczywistości zalecałbym jego użycie, ponieważ pozwala na znacznie większą
flex
elastyczność z układem. Oto prosta dwukolumnowa wersja, taka jak oryginał:A oto trzy kolumny ze środkową kolumną o zmiennej szerokości!
źródło
Rozwiązanie bez ustalania rozmiaru na marginesie
+1 dla Merkuro, ale jeśli rozmiar pływaka zmieni się, ustalony margines nie powiedzie się. Jeśli użyjesz powyższego CSS po prawej
div
stronie, ładnie zmieni rozmiar ze zmianą rozmiaru na lewym pływającym. Jest w ten sposób bardziej elastyczny. Sprawdź skrzypce tutaj: http://jsfiddle.net/9ZHBK/144/źródło
overflow: hidden
ioverflow auto
skutkują tym samym zachowaniem. Myślę też, że ludzie doceniają Skrzypce.Elementy pływające są usuwane z normalnego układu przepływu, a elementy blokowe, takie jak DIV, nie obejmują już szerokości swojego rodzica. W tej sytuacji zasady się zmieniają. Zamiast wymyślać koło na nowo, odwiedź tę stronę, aby poznać możliwe rozwiązania umożliwiające utworzenie układu dwóch kolumn, którego szukasz: http://www.maxdesign.com.au/presentation/page_layouts/
W szczególności „Układ dwóch kolumn w płynie”.
Twoje zdrowie!
źródło
Jest to zaktualizowane rozwiązanie dla HTML 5, jeśli ktoś jest zainteresowany i nie lubi "pływania".
Tabela działa świetnie w tym przypadku, ponieważ możesz ustawić stałą szerokość tabeli i komórki tabeli.
http://jsfiddle.net/EAEKc/596/ oryginalny kod źródłowy z @merkuro
źródło
to użycie może rozwiązać twój problem.
źródło
Opierając się na
merkuro
rozwiązaniu, jeśli chcesz zmaksymalizować to po lewej stronie, powinieneś użyć:Nie był testowany w IE, więc może wyglądać na uszkodzony w IE.
źródło
Przyjęta odpowiedź może zadziałać, ale nie podoba mi się pomysł nakładania się marginesów. W HTML5 zrobiłbyś to z
display: flex;
. To czyste rozwiązanie. Wystarczy ustawić szerokość dla jednego elementu iflex-grow: 1;
dla elementu dynamicznego. Zmodyfikowana wersja skrzypiec merkuros: https://jsfiddle.net/EAEKc/1499/źródło
Cześć, jest łatwy sposób z ukrytą metodą przepełnienia na prawym elemencie.
źródło
To może zadziałać:
źródło