Mam 2 div: jeden po lewej stronie i jeden po prawej stronie mojej strony. Ten po lewej stronie ma stałą szerokość i chcę, aby ten po prawej stronie wypełniał pozostałą przestrzeń.
#search {
width: 160px;
height: 25px;
float: left;
background-color: #ffffff;
}
#navigation {
width: 780px;
float: left;
background-color: #A53030;
}
<div id="search">Text</div>
<div id="navigation">Navigation</div>
html
css
width
responsive
alexchenco
źródło
źródło
Odpowiedzi:
To wydaje się osiągać to, do czego dążysz.
źródło
Problem, który znalazłem z odpowiedzią Boushleya, polega na tym, że jeśli prawa kolumna jest dłuższa niż lewa, po prostu owinie się wokół lewej i wznowi wypełnianie całej przestrzeni. Nie takiego zachowania szukałem. Po przeszukaniu wielu „rozwiązań” znalazłem samouczek (teraz link nie działa) na temat tworzenia trzech kolumn.
Autor oferuje trzy różne sposoby, jeden ze stałą szerokością, jeden z trzema zmiennymi kolumnami i jeden ze stałymi kolumnami zewnętrznymi i środkową o zmiennej szerokości. O wiele bardziej elegancki i skuteczny niż inne przykłady, które znalazłem. Znacząco poprawiło moje zrozumienie układu CSS.
Zasadniczo, w prostym przypadku powyżej, przestaw pierwszą kolumnę w lewo i nadaj jej stałą szerokość. Następnie nadaj kolumnie po prawej lewy margines, który jest nieco szerszy niż pierwsza kolumna. Otóż to. Gotowy. Kod Ala Boushleya:
Oto demo w Stack Snippets & jsFiddle
Na przykładzie Boushleya lewa kolumna trzyma drugą kolumnę po prawej. Jak tylko lewa kolumna się skończy, prawa znów zaczyna wypełniać całą przestrzeń. Tutaj prawa kolumna po prostu wyrównuje się głębiej na stronie, a lewa kolumna zajmuje duży margines tłuszczu. Nie są wymagane interakcje przepływowe.
źródło
Rozwiązanie pochodzi z właściwości display.
Zasadniczo musisz sprawić, aby dwa div działały jak komórki tabeli. Zamiast używać
float:left
, musisz użyćdisplay:table-cell
obu div, a dla dynamicznej szerokości div musiszwidth:auto;
także ustawić . Oba elementy div należy umieścić w pojemniku o szerokości 100% zdisplay:table
właściwością.Oto css:
I HTML:
WAŻNE: W przypadku przeglądarki Internet Explorer musisz określić właściwość float na dynamicznej szerokości div, w przeciwnym razie miejsce nie zostanie wypełnione.
Mam nadzieję, że to rozwiąże twój problem. Jeśli chcesz, możesz przeczytać pełny artykuł, który o tym napisałem na moim blogu .
źródło
W dzisiejszych czasach powinieneś skorzystać z
flexbox
metody (może być dostosowany do wszystkich przeglądarek z prefiksem przeglądarki).Więcej informacji: https://css-tricks.com/snippets/css/a-guide-to-flexbox/
źródło
Ponieważ jest to dość popularne pytanie, jestem skłonny podzielić się dobrym rozwiązaniem za pomocą BFC.
Codepen próbka z następujących tutaj .
W takim przypadku
overflow: auto
wyzwala zachowanie kontekstowe i powoduje, że prawy element rozszerza się tylko do dostępnej pozostałej szerokości i naturalnie rozszerzy się do pełnej szerokości, jeśli.left
zniknie. Bardzo przydatna i czysta sztuczka dla wielu układów interfejsu użytkownika, ale na początku trudno zrozumieć „dlaczego to działa”.źródło
auto
może to spowodować w zależności od jego zawartości. Możesz również użyć dowolnej innej wartości przepełnienia, aby uzyskać ten sam efekt,hidden
może lepiej działać w twoim przypadku.Jeśli nie potrzebujesz zgodności ze starszymi wersjami niektórych przeglądarek ( na przykład IE
108 lub mniejszej), możesz użyćcalc()
funkcji CSS:źródło
Odpowiedź Boushleya była najbliższa, jednak wskazano jeden problem, który nie został rozwiązany. Prawy div zajmuje całą szerokość przeglądarce; zawartość przyjmuje oczekiwaną szerokość. Aby lepiej zobaczyć ten problem:
http://jsfiddle.net/79hpS/
Zawartość znajduje się we właściwym miejscu (w przeglądarce Firefox), jednak szerokość jest niepoprawna. Kiedy elementy potomne zaczną dziedziczyć szerokość (np. Tabela z
width: 100%
), otrzymują szerokość równą szerokości przeglądarki, co powoduje, że przelewają się z prawej strony i tworzą poziomy pasek przewijania (w przeglądarce Firefox) lub nie pływają i są przesuwane w dół ( w chromie).Możesz to łatwo naprawić , dodając
overflow: hidden
do prawej kolumny. Zapewnia to prawidłową szerokość zarówno zawartości, jak i div. Ponadto stół otrzyma prawidłową szerokość i wypełni pozostałą dostępną szerokość.Wypróbowałem niektóre z powyższych rozwiązań, nie działały one w pełni z niektórymi przypadkami na krawędziach i były zbyt skomplikowane, aby uzasadnić ich naprawę. To działa i jest proste.
Jeśli pojawią się jakiekolwiek problemy lub wątpliwości, możesz je zgłosić.
źródło
overflow: hidden
Naprawdę to naprawia, dziękuję. (Zaznaczona odpowiedź jest niepoprawna BTW, ponieważright
faktycznie zajmuje całą dostępną przestrzeń dla rodzica, możesz to zobaczyć we wszystkich przeglądarkach podczas sprawdzania elementów)overflow: hidden
umieszcza właściwą kolumnę we własnym kontekście formatowania bloku. Elementy blokowe zajmują całą dostępną dla nich przestrzeń poziomą. Zobacz: developer.mozilla.org/en-US/docs/Web/Guide/CSS/…overflow:xxx
Atrybut jest kluczem. Jak mówisz, przestaje się#right
rozszerzać pod spodem#left
. Bardzo starannie rozwiązuje problem, który miałem przy użyciu jQuery UI o zmiennym rozmiarze - z#right
zestawem z atrybutem przepełnienia i#left
ustawionym jako zmienny, masz prostą ruchomą granicę. Zobacz jsfiddle.net/kmbro/khr77h0t .Oto mała poprawka do zaakceptowanego rozwiązania, która zapobiega wpadnięciu prawej kolumny pod lewą kolumnę. Zastąpione
width: 100%;
zoverflow: hidden;
pomocą trudne rozwiązania, jeśli ktoś nie wiedział.http://jsfiddle.net/MHeqG/2600/
[edytuj] Sprawdź także przykład układu trzech kolumn: http://jsfiddle.net/MHeqG/3148/
źródło
Jeśli próbujesz wypełnić pozostałe miejsce w Flexbox między 2 elementami, dodaj następującą klasę do pustego div między 2 elementami, które chcesz oddzielić:
źródło
Posługiwać się
display:flex
źródło
Odpowiedź Boushleya wydaje się być najlepszym sposobem, aby to zrobić za pomocą pływaków. Jednak nie jest bez problemów. Zagnieżdżone elementy pływające w rozwiniętym elemencie nie będą dostępne; spowoduje to uszkodzenie strony.
Metoda pokazana w zasadzie „udaje”, jeśli chodzi o element rozwijający się - w rzeczywistości nie jest pływający, po prostu bawi się z elementami pływającymi o stałej szerokości, używając jego marginesów.
Problem polega właśnie na tym, że element rozwijający się nie jest pływający. Jeśli spróbujesz mieć dowolne zagnieżdżone elementy pływające w rozwijanym elemencie, te „zagnieżdżone” elementy pływające nie są tak naprawdę wcale zagnieżdżone; kiedy próbujesz przykleić
clear: both;
pływające przedmioty pod „zagnieżdżone” elementy, skończysz również czyszczeniem pływaków najwyższego poziomu.Następnie, aby skorzystać z rozwiązania Boushleya, chciałbym dodać, że powinieneś umieścić div, takie jak: .fakeFloat {height: 100%; szerokość: 100%; float: left; } i umieść to bezpośrednio w rozszerzonym div; cała zawartość rozwiniętego div powinna zatem znajdować się w tym fałszywym elemencie.
Z tego powodu polecam używanie tabel w tym konkretnym przypadku. Elementy pływające tak naprawdę nie są zaprojektowane do przeprowadzania ekspansji, którą chcesz, podczas gdy rozwiązanie wykorzystujące tabelę jest trywialne. Generalnie argumentuje się, że pływanie jest bardziej odpowiednie dla układów, a nie tabel. Ale i tak nie używasz tutaj pływania, oszukujesz go - i to w pewnym sensie przeczy celowi stylistycznego argumentu w tym konkretnym przypadku, w moja skromna opinia.
źródło
overflow: hidden
. jsfiddle.net/dave2/a5jbpc85Próbowałem powyższych rozwiązań dla płynu po lewej stronie, a naprawiony prawy, ale żaden z nich nie zadziałał (wiem, że pytanie jest odwrotne, ale myślę, że to jest istotne). Oto, co zadziałało:
źródło
Miałem podobny problem i znalazłem rozwiązanie tutaj: https://stackoverflow.com/a/16909141/3934886
Rozwiązanie jest dla stałych środkowych kolumn div i ciekłych.
Jeśli chcesz naprawić lewą kolumnę, po prostu zmień odpowiednio formułę.
źródło
Możesz użyć właściwości Grid CSS, jest to najbardziej przejrzysty, czysty i intuicyjny sposób strukturyzowania twoich pudeł.
źródło
Zastanawiam się, że nikt nie używany
position: absolute
zposition: relative
Tak więc innym rozwiązaniem byłoby:
HTML
CSS
Przykład Jsfiddle
źródło
/ * * css * /
/ * * html * /
źródło
Mam na to bardzo proste rozwiązanie! // HTML
// CSS
Link: http://jsfiddle.net/MHeqG/
źródło
Miałem podobny problem i wymyśliłem następujące, które działały dobrze
CSS:
HTML:
Ta metoda nie zawinie się, gdy okno zostanie zmniejszone, ale automatycznie rozszerzy obszar „zawartości”. Zachowa statyczną szerokość dla menu strony (po lewej).
A w przypadku automatycznego rozwijania pola zawartości i lewego pola pionowego (menu witryny):
https://jsfiddle.net/tidan/332a6qte/
źródło
Spróbuj dodać pozycję
relative
, usuńwidth
ifloat
właściwości po prawej stronie, a następnie dodajleft
i dodaj wartośćright
z0
wartością.Możesz także dodać
margin left
regułę o wartości opartej na szerokości lewego elementu (+ niektóre piksele, jeśli potrzebujesz miejsca między nimi), aby utrzymać jego pozycję.Ten przykład działa dla mnie:
źródło
Spróbuj tego. To zadziałało dla mnie.
źródło
Pracuję nad tym problemem od dwóch dni i mam rozwiązanie, które może działać dla Ciebie i wszystkich innych osób, które chcą sprawić, by responsywna stała szerokość była w lewo i aby prawa strona wypełniała pozostałą część ekranu bez owijania się wokół lewej strony. Zakładam, że zamierzam sprawić, aby strona reagowała w przeglądarkach i urządzeniach mobilnych.
Oto kod
Oto moje skrzypce, które mogą działać dla ciebie tak samo jak dla mnie. https://jsfiddle.net/Larry_Robertson/62LLjapm/
źródło
Zasady dotyczące przedmiotów i pojemników;
Użyj białych znaków: nowrap; dla tekstów w ostatnich pozycjach za ich niezorganizowanie.
Pozycja X% | Pozycja Y% | Pozycja Z%
Całkowita długość zawsze = 100%!
gdyby
następnie
Pozycja X = 70%
Pozycja X jest dominująca (pierwsze elementy dominują w układzie CSS tabeli)!
Wypróbuj max-content; właściwość div div do rozłożenia div w kontenerze:
}
źródło
Najłatwiejszym rozwiązaniem jest użycie marginesu. To również będzie responsywne!
źródło
Najprostszym rozwiązaniem jest wyrównanie szerokości lewego diva do 100% - szerokości prawego diva oraz marginesu między nimi.
https://codepen.io/tamjk/pen/dybqKBN
źródło
Natknąłem się na ten sam problem, próbując rozmieścić niektóre elementy sterujące interfejsu jqueryUI . Chociaż powszechną filozofią jest teraz „używaj
DIV
zamiastTABLE
”, w moim przypadku użycie TABELI działało znacznie lepiej. W szczególności, jeśli potrzebujesz prostego wyrównania między dwoma elementami (np. Centrowanie w pionie, centrowanie w poziomie itp.), Opcje dostępne w TABELI dają proste, intuicyjne sterowanie.Oto moje rozwiązanie:
źródło
<font>
,<b>
itp HTML Evolved przeszłość mniej koncentrować się na prezentacji.overflow
.display:table
osiągnięcie pożądanego wyglądu danych nie tabelarycznych jest czyste. Zmuszanie danych nie tabelarycznych, takich jak kolumny stron lub formanty do tabel HTML do kontrolowania układu, jest nieczyste.