2015-11-25 3 views
3

Я пытаюсь получить вертикальное выравнивание, подобное исходной, но в первой строке текста, а не в последней. Ни top, ни text-top не получают право выравнивания. Есть идеи? Благодаря!базовый вертикальный выровнять, но вверху

Редактировать: Это предполагает, что размер шрифта одинаков для выравниваемых элементов. См. Комментарий ниже от @FelipeAls о принятом ответе.

изменения: теперь с образцом кода и изображения:

То, что я пытаюсь сделать, это вертикально выровнять текст в нескольких рядный блочных элементов, так что их исходные условия все в том же положении. Я бы предпочел не делать что-то вроде подталкивания вещей, используя поля и отступы, потому что я нахожу каждый раз, когда я это делаю, в итоге я играл с разными браузерами.

HTML:

<div class="foo"> 
    <span>one</span> 
    <span>two two two two</span> 
    <span>three three three three three three three three three</span> 
    <button type="button">action</button> 
</div> 

<div class="bar"> 
    <span>one</span> 
    <span>two two two two</span> 
    <span>three three three three three three three three three</span> 
    <button type="button">action</button> 
</div> 

CSS:

body { 
    font-family: sans-serif; 
    font-size: 12px; 
} 

button { 
    font-family: inherit; 
    font-size: inherit; 
} 

div { 
    position: relative; 
    width: 500px; 
    text-align: center; 
} 

div.foo, div.bar { 
    margin-bottom: 2em; 
} 

div span { 
    text-align: center; 
} 

div.foo span { 
    display: inline-block; 
    width: 50px; 
    vertical-align: top; 
} 

div.bar span { 
    display: inline-block; 
    width: 50px; 
    vertical-align: baseline; 
} 

div button { 
    display: inline-block; 
    width: 125px; 
} 

enter image description here

http://jsfiddle.net/don01001100/3t8v5L1j/3/ См.

+4

Пожалуйста, включите пример кода, а не ссылку на код. И будьте более конкретными: какой элемент вы хотите согласовать с чем? –

+1

@ Джонатан, извините за это! Я добавил соответствующие HTML и CSS. В jsfiddle есть дополнительный код, но то, что я ставлю здесь, является тем, что актуально. –

+0

Спасибо. Что помогает. –

ответ

2

Боюсь, что вы можете сделать это только с помощью CSS-модели, например margin, padding.

Это связано с тем, что различные элементы встроенного блока выровнены по базовой линии, но у них разные настройки padding/margin, поэтому их текст слегка выровнен по вертикали. Если вы меняете padding и margin<button> s и <span> s должны быть одинаковыми, тогда это должно сработать.


EDIT1

На самом деле, теперь, когда я думаю об этом, вы можете быть в состоянии вручную установить значение vertical-align в пикселях. Поэкспериментируйте с ним (включая отрицательные значения), чтобы увидеть, что вы хотите. Это будет зависеть от padding s и margin s от <span> s и <div> s.


EDIT2

На самом деле, vertical-align: text-top работает довольно хорошо для меня:

enter image description here

+0

Меня не осенило изменить их, чтобы они были разными. Когда я настроил 'text-top', я бы тоже изменил вертикальное выравнивание кнопки. Когда я сменил первый пример на 'top', я должен был удалить все правило, а не только объявление для' vertical-align'.Это работает для Chrome 46, IE 10 и Firefox 41 в Windows 8 и Safari на моем устройстве iOS. Благодаря! –

+1

И вот рабочий пример: http://jsfiddle.net/don01001100/3t8v5L1j/6/ –

+0

@ Don01001100 Может быть ограничение: элементы с разным размером шрифта не отображаются в одной строке, увы, http: // jsfiddle.net/3t8v5L1j/7/ (я еще не исследовал) – FelipeAls

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