problem
bez określania szerokości szerokość bloku liniowego jest określana automatycznie przez jego zawartości. W twoim przypadku czerwony blok zawiera długą linię, co sprawia, że wypełnia (prawie) całą dostępną przestrzeń. Niebieski blok jest szerszy niż przestrzeń pozostawiona do dyspozycji przez czerwony blok, powodując zawijanie do następnej linii.
Roztwór 1: określający szerokość obu elementów
W poniższym fragmencie oba pustak szerokości. Możesz określić szerokość piksela, ponieważ znasz także rozmiar kontenera, ale procenty też by działały, o ile dodadzą do 100%, a nie więcej.
Zauważ, że musiałem trochę zmodyfikować HTML, aby usunąć spacje między nimi. Jest to częsta pułapka przy wyborze tego rozwiązania.
.container {
width: 200px;
border: 1px solid black;
}
.a {
display: inline-block;
width: 180px;
background: red;
}
.b {
display: inline-block;
width: 20px;
background: blue;
}
<div class="container">
<div class="a">hello hello hello hello hello hello hello
</div><div class="b">aaa</div>
</div>
Rozwiązanie 2: wyświetlanie elementów jak komórki tabeli w wierszu
Alternatywnie, można uczynić je zachowywać się jak wiersz tabeli. Ma to tę zaletę, że ich wysokość również się do siebie dopasuje, i że można łatwo dać jedną z nich szerokość, a drugą nie. Ponadto nie będziesz mieć problemu białych znaków między elementami, które musisz rozwiązać, korzystając z pierwszego rozwiązania.
.container {
width: 200px;
border: 1px solid black;
display: table;
}
.a {
display: table-cell;
background: red;
}
.b {
width: 20px;
display: table-cell;
background: blue;
}
<div class="container">
<div class="a">hello hello hello hello hello hello hello
</div><div class="b">aaa</div>
</div>
div '.a' nie mają max szerokość lub szerokość tak ustawiony tekst w nim będzie nadal wypełniać przestrzeń aż pojemnik ma zawinąć. – lemieuxster
Jeśli chcesz, aby 'b' pojawił się po' a' spróbowałeś ustawić je tak, aby były tylko 'inline'? – j08691
Proste, ponieważ zawartość pierwszego div przekracza 200px, a jako blok inline, każdy * blok * przesuwa się jako cały blok. – Stickers