2012-03-12 3 views
107

Я пытаюсь получить несколько компонентов inline и выровненных по вертикали в div. Почему в этом примере span настаивает на том, чтобы быть нажатой? Я пробовал оба vertical-align:middle; и vertical-align:top;, но ничего не меняется.CSS вертикальное выравнивание элементов inline/inline-block

HTML:

<div> 
    <a></a><a></a> 
    <span>Some text</span> 
</div>​ 

CSS:

a { 
    background-color:#FFF; 
    width:20px; 
    height:20px; 
    display:inline-block; 
    border:solid black 1px; 
} 

div { 
    background:yellow; 
    vertical-align:middle; 
} 
span { 
    background:red; 
} 

РЕЗУЛЬТАТ:
enter image description here

FIDDLE

ответ

217

vertical-align относится к выравниваемым элементам, а не к их родительскому элементу. Для вертикального выравнивания детей в Див, сделайте это вместо:

div > * { 
    vertical-align:middle; // Align children to middle of line 
} 

См: http://jsfiddle.net/dfmx123/TFPx8/1186/

ПРИМЕЧАНИЕ: vertical-align является относительно текущей текстовой строки, а не на всю высоту родителя div. Если вы хотите, чтобы родительский div был выше и все еще имел элементы с вертикальной ориентацией, установите для него line-height, а не его height. Следуйте jsfiddle см. Ссылку выше для примера.

+0

Это перестает работать, если вы укажете высота для внешнего 'div'. –

+2

@AbhranilDas 'vertical-align' относится к текущей текстовой строке, а не к родительскому элементу. Чтобы сделать эту работу по своему усмотрению, установите «line-height» div вместо «height». – Diego

3

Просто плавающие оба элемента влево достигают тот же результат.

div { 
background:yellow; 
vertical-align:middle; 
margin:10px; 
} 

a { 
background-color:#FFF; 
width:20px; 
height:20px; 
display:inline-block; 
border:solid black 1px; 
float:left; 
} 

span { 
background:red; 
display:inline-block; 
float:left; 
} 
+0

Проблема с перемещением их влево состоит в том, что они будут переноситься на следующую строку, когда браузер становится слишком маленьким. Иногда вам нужны элементы, чтобы оставаться inline даже за пределами браузера, и, таким образом, 'inline-block' является единственным решением. –

+0

Хотя проблема с упаковкой может быть проблемой, я бы сказал, что это действительно хорошее решение для тех случаев, когда упаковка в порядке. Он элегантный, говорит о духе желаемого эффекта и не требует изменений родителя. –

Смежные вопросы