Wszystkie elementy w środku .track-container
powinny być ładnie ustawione w jednej linii, każdy obok siebie, ograniczone przez wysokość 200 pikseli, które otrzymały, bez żadnych dziwnych marginesów lub dopełnienia. Zamiast tego masz dziwność, która pojawia się we wspomnianych skrzypcach.
Co jest tego przyczyną .album-artwork
i co jest .track-info
wypychane do połowy strony i jak mogę to naprawić? Przyznaję również, że tabela może być lepszym sposobem podejścia do całej tej konfiguracji, ale chcę rozwiązać problem na podstawie powyższego kodu, aby móc wyciągnąć wnioski z tego błędu.
.track-container {
padding:0;
width: 600px;
height: 200px;
border: 1px solid black;
list-style-type: none;
margin-bottom: 10px;
}
.position-data {
overflow: none;
display: inline-block;
width: 12.5%;
height: 200px;
margin: 0;
padding: 0;
border: 1px solid black;
}
.current-position, .position-movement {
height: 100px;
width: 100%;
margin: 0;
padding: 0;
border: 1px solid black;
}
.album-artwork {
display: inline-block;
height: 200px;
width: 20%;
border: 1px solid black;
}
.track-info {
display: inline-block;
padding-left: 10px;
height: 200px;
border: 1px solid black;
}
<div class="track-container">
<div class="position-data">
<div class="current-position">1</div>
<div class="position-movement">2</div>
</div>
<div class="album-artwork">fdasfdsa</div>
<div class="track-info">fdafdsa</div>
</div>
Oto JSFiddle .
Elementy wewnątrz
.track-container
są polami na poziomie liniowym w tym samym polu liniowym .Dlatego ich wyrównanie w pionie jest określone przez
vertical-align
właściwość:Domyślnie jego wartość to
baseline
:W tym przypadku wszystkie mają wartości bazowe, które są obliczane zgodnie z
Poniższy obraz wyjaśnia, co się dzieje (czerwona linia to linia bazowa):
Dlatego możesz
Zmienić pionowe wyrównanie elementów, np
top
,middle
lubbottom
.track-container > * { vertical-align: middle; }
Pokaż fragment kodu
.track-container { padding: 0; width: 600px; height: 200px; border: 1px solid black; list-style-type: none; margin-bottom: 10px; } .position-data { overflow: none; display: inline-block; width: 12.5%; height: 200px; margin: 0; padding: 0; border: 1px solid black; } .current-position, .position-movement { height: 100px; width: 100%; margin: 0; padding: 0; border: 1px solid black; } .album-artwork { display: inline-block; height: 200px; width: 20%; border: 1px solid black; } .track-info { display: inline-block; padding-left: 10px; height: 200px; border: 1px solid black; } .track-container > * { vertical-align: middle; }
<div class="track-container"> <div class="position-data"> <div class="current-position">1</div> <div class="position-movement">2</div> </div> <div class="album-artwork">fdasfdsa</div> <div class="track-info">fdafdsa</div> </div>
Ustaw
overflow
elementy na coś innego niżvisible
np.hidden
Lubauto
, tak aby ich linia bazowa była dolną krawędzią marginesu..track-container > * { overflow: hidden; }
Pokaż fragment kodu
.track-container { padding: 0; width: 600px; height: 200px; border: 1px solid black; list-style-type: none; margin-bottom: 10px; } .position-data { overflow: none; display: inline-block; width: 12.5%; height: 200px; margin: 0; padding: 0; border: 1px solid black; } .current-position, .position-movement { height: 100px; width: 100%; margin: 0; padding: 0; border: 1px solid black; } .album-artwork { display: inline-block; height: 200px; width: 20%; border: 1px solid black; } .track-info { display: inline-block; padding-left: 10px; height: 200px; border: 1px solid black; } .track-container > * { overflow: hidden; }
<div class="track-container"> <div class="position-data"> <div class="current-position">1</div> <div class="position-movement">2</div> </div> <div class="album-artwork">fdasfdsa</div> <div class="track-info">fdafdsa</div> </div>
Upewnij się, że elementy nie mają pola liniowego przepływu, tak aby ich linia bazowa była ich dolną krawędzią marginesu. Oznacza to, że zawartość powinna zniknąć :
Na przykład możesz umieścić zawartość elementów w opakowaniu i nadać mu styl
float: left
:.track-container > * > .wrapper { float: left; }
Pokaż fragment kodu
.track-container { padding: 0; width: 600px; height: 200px; border: 1px solid black; list-style-type: none; margin-bottom: 10px; } .position-data { overflow: none; display: inline-block; width: 12.5%; height: 200px; margin: 0; padding: 0; border: 1px solid black; } .current-position, .position-movement { height: 100px; width: 100%; margin: 0; padding: 0; border: 1px solid black; } .album-artwork { display: inline-block; height: 200px; width: 20%; border: 1px solid black; } .track-info { display: inline-block; padding-left: 10px; height: 200px; border: 1px solid black; } .track-container > * > .wrapper { float: left; }
<div class="track-container"> <div class="position-data"> <div class="current-position wrapper">1</div> <div class="position-movement wrapper">2</div> </div> <div class="album-artwork"> <span class="wrapper">fdasfdsa</span> </div> <div class="track-info"> <span class="wrapper">fdafdsa</span> </div> </div>
źródło
Musisz dodać vertical-align: top do tych dwóch elementów:
.album-artwork, .track-info { vertical-align:top; }
Przykład jsFiddle
Domyślne wyrównanie w pionie to linia bazowa, ale zamiast tego szukasz góry.
źródło
Albo możesz ustawić
float:left;
na 3 elementy.http://jsfiddle.net/fC2nt/
źródło
inline-block
elementów.overflow:hidden
może być konieczne dodanie do elementu nadrzędnego, aby zawierał elementy pływające. Powinieneś jednak dodać demo, które to demonstruje.Upewnij się, że stosunek wysokości linii na wszystkich elementach, które próbujesz wyrównać, jest również taki sam. Jeśli używasz kombinacji znaczników DIV, P, H1-5, DT, DD, INPUT, BUTTON, spowoduje to również nieregularności w wyrównaniu w pionie w zależności od tego, co już zdefiniowałeś w innym miejscu.
źródło