inline-block и vertical-align

208
22 марта 2017, 15:01

Проблема заключается в том что, не понятно как работает свойство vertical-align.

Тут пример:

div 
{ 
    display:inline-block; 
    border:1px solid red; 
    padding:5px; 
} 
div.main 
{ 
    padding:10px; 
} 
.first 
{ 
    width:100px; 
    height:100px; 
} 
.second 
{ 
    width:100px; 
    height:100px; 
} 
.third 
{ 
    width:110px; 
    height:50px; 
} 
.four 
{ 
    width:110px; 
    height:50px; 
}
<div class="main"> 
Hello world! 
  <div class="first">Hello world 1! Hello world 1! Hello world 1!</div> 
  <div class="second">Hello world 2!</div> 
  <div class="third">Hello world 3!</div> 
  <div class="four"></div> 
</div>

Как можно увидеть блоки идут в ряд как и требуется от display:inline-block; Но нужно же как-то задать выравнивание этих блоков: выровнять по верху, по низу, по середине. И тут нам должно помочь свойство vertical-align, т.к свойство display:inline-block;дает нам природу inline объектов. Но не тут то и было проблема заключается в том что если блок и является inline-block то если внутри будет какой-то текст то выравнивание будет равняться по этому тексту, а не по блоку.

Объясните мне как работает vertical-align при inline-block.

Как игнорировать содержимое (текст) внутри inline-block элемента?

Answer 1

Есть выравнивание по тексту, есть по блоку. По-умолчанию, vertical-align: baseline. baseline - означает линию текста внутри инлайнблока.

Если вам это не нужно, ставьте vertical-align с другим значением: Остальные свойства типа top, middle, bottom никак не зависят от содержимого блока и выравниваются по границам элементов.

В отличие от таблиц, vertical-align назначается на сам элемент, а не на родитель.

Смотрите разные свойства vertical-align в моем сниппете:

$('a').click(function(){$('.main > div').css("vertical-align",$(this).data("align"))})
div 
{ 
    display:inline-block; 
    border:1px solid red; 
    padding:5px; 
} 
div.main 
{ 
    padding:10px; 
} 
.first 
{ 
    width:100px; 
    height:100px; 
} 
.second 
{ 
    width:100px; 
    height:100px; 
} 
.third 
{ 
    width:110px; 
    height:50px; 
} 
.four 
{ 
    width:110px; 
    height:50px; 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
<div class="main"> 
Hello world! 
  <div class="first">Hello world 1! Hello world 1! Hello world 1!</div> 
  <div class="second">Hello world 2!</div> 
  <div class="third">Hello world 3!</div> 
  <div class="four"></div> 
</div> 
 
 
<a href="javascript:;" data-align="baseline">baseline</a> 
<a href="javascript:;" data-align="top">top</a> 
<a href="javascript:;" data-align="bottom">bottom</a> 
<a href="javascript:;" data-align="middle">middle</a>

Answer 2

Сравнение свойств "display" наглядно показано тут http://htmlbook.ru/css/display . На сколько я знаю "vertical-align" корректно работает только для таблиц, к сожалению. В остальных случаях придётся использовать padding/margin или js

READ ALSO
Умножение матриц разной размерности

Умножение матриц разной размерности

Как умножить матрицу на матрицу разной размерности? У меня есть матрицы [200,3] и [3,3]Можно ли их перемножить?

561
Почему удаляется процесс?

Почему удаляется процесс?

Приложение написано на WinFormsПри запуске приложения процесс появляется в диспетчере задач и через секунду удаляется

202
Microsoft Report Viewer как установить DPI

Microsoft Report Viewer как установить DPI

Есть задача сделать накладную в приложении C# WinFormsВерстку документа хочу сделать в пикселях

389