Все элементы внутри .track-container
должны быть хорошо выстроены в линию, каждый бок о бок, ограниченный высотой 200 пикселей, без каких-либо странных полей или отступов. Вместо этого у вас есть странность, которая возникает в вышеупомянутой скрипке.
Что вызывает .album-artwork
и .track-info
получить толкнул на полпути вниз страницы, и как я могу это исправить? Кроме того, я признаю, что таблица может быть лучшим способом приблизиться ко всей этой настройке, но я хочу выяснить проблему из приведенного выше кода, чтобы я мог извлечь уроки из этой ошибки.
.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>
Вот JSFiddle .
Элементы внутри
.track-container
- это блоки встроенного уровня в одном строчном блоке .Поэтому их вертикальное выравнивание задается
vertical-align
свойством:По умолчанию его значение
baseline
:В этом случае все они имеют базовые значения, которые рассчитываются согласно
Следующее изображение поясняет, что происходит (красная линия - базовая линия):
Следовательно, вы можете
Измените вертикальное выравнивание элементов, например, на
top
,middle
илиbottom
.track-container > * { vertical-align: middle; }
Показать фрагмент кода
.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>
Установите
overflow
элементы, отличные отvisible
, например,hidden
илиauto
, чтобы их базовая линия была их нижним краем поля..track-container > * { overflow: hidden; }
Показать фрагмент кода
.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>
Убедитесь, что у элементов нет проходной линейной рамки, так что их базовая линия будет их нижним краем поля. То есть содержимое должно быть вне потока :
Так, например, вы можете поместить содержимое элементов в оболочку и стилизовать его с помощью
float: left
:.track-container > * > .wrapper { float: left; }
Показать фрагмент кода
.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>
источник
Вам нужно добавить vertical-align: top к этим двум элементам:
.album-artwork, .track-info { vertical-align:top; }
jsFiddle пример
Вертикальное выравнивание по умолчанию - базовое, но вместо этого вы ищите верх.
источник
Или вы можете установить
float:left;
до 3 элементов.http://jsfiddle.net/fC2nt/
источник
inline-block
элементов.overflow:hidden
может потребоваться добавить к родительскому элементу, чтобы содержать плавающие элементы. Вы должны добавить демо, демонстрирующее это.Убедитесь, что соотношение высоты строки для всех элементов, которые вы пытаетесь выровнять, одинаковое. Если вы используете сочетание тегов DIV, P, H1-5, DT, DD, INPUT, BUTTON, это также вызовет неровности в вертикальном выравнивании в зависимости от того, что вы уже определили в другом месте.
источник