Carduelis
@Carduelis
Web-developer, front-end, js, less

Поведение высоты контейнера при выравнивании текста, почему так?

Много лет в верстке, но, порой сталкиваюсь с непонятным поведением. Чаще всего такое встречается с родовой травмой css -- вертикальным выравниванием.
Собственно, сразу к делу: https://jsfiddle.net/71e6h4n2/2
По какой-то причине, высота кнопки, где применено vertical-align: middle - правило у дочернего элемента, увеличивает высоту родителя. Другие его значения (top, bottom ,baseline) такого не делают.
Также приведу код здесь:
<div>
  <i>35px</i>
  <button>
    <span>default</span>
  </button>
  <button>
    <span class="middle">middle</span>
  </button>
  <button>
    <span class="bottom">bottom</span>
  </button>
  <button class="flex">
    <span>flex</span>
  </button>
</div>

* {
  box-sizing: border-box;
}
div > * {
  vertical-align: top;
}
div {
  border: 1px solid #aaa;
  background: #ffe;
}
button {
    line-height: 15px;
    padding: 10px;
    outline: none;
    border: none;
    background; #ccc;
}
.middle {
  vertical-align: middle;
}
.bottom {
  vertical-align: bottom;
}
.flex {
  display: inline-flex;
  align-items: center;
  justify-content: space-around;
}
i {
  width: 35px;
  height: 35px;
  display: inline-block;
  line-height: 35px;
  text-align: center;
  background: #cc8;
}

P.s. Может забить, и в кнопках тоже использовать flex? он вроде как стабильно работает
  • Вопрос задан
  • 117 просмотров
Пригласить эксперта
Ответы на вопрос 2
Negwereth
@Negwereth
lvivcss.com.ua
Забейте. Уже сто лет не видел вертикальное выравнивание на vertical-align.
Флекс сейчас дайте наиболее точное выравнивание.
Ответ написан
Комментировать
@maxIvanenqo
Как вариант - использование table-cell для span, если он будет табличным элементом, высота не будет меняться.. попробуй так. а вообще, флексы, конечно лучше
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы