Фантомные пиксели в родительском контейнере в css

Если вы проверите высоту значка, это 16 пикселей, но по какой-то причине родительский контейнер имеет размер 18 пикселей.

Я играл с css, пытаясь понять, почему это происходит, не повезло. Наверное, что-то глупое.

PD: Никаких хаков ... Я знаю, что могу изменить высоту контейнера, но не хочу. Я просто хочу понять, что генерирует лишние пиксели.

.container {
  background-color: green;
}
i {
  background-color: pink;
  display:inline-block;
  margin:0;
  padding:0;
}
<link rel = "stylesheet" href = "https://use.fontawesome.com/releases/v5.3.1/css/all.css" integrity = "sha384-mzrmE5qonljUremFsqc01SB46JvROS7bZs3IO2EmfFsd15uHvIt+Y8vEf7N7fWAU" crossorigin = "anonymous">

<div class = "container">
  <i class = "fas fa-angry"></i>
</div>

Я также проверил этот вопрос: Изображение внутри div имеет дополнительное пространство под изображением, но, похоже, он не решает проблему при настройке vertical-align (display:block устраняет проблему, но я не хочу превращать значок в элемент блока, поскольку он должен идти с текстом)

.container {
  background-color: green;
}
i {
  background-color: pink;
  display:inline-block;
  margin:0;
  padding:0;
  vertical-align:top;
}
<link rel = "stylesheet" href = "https://use.fontawesome.com/releases/v5.3.1/css/all.css" integrity = "sha384-mzrmE5qonljUremFsqc01SB46JvROS7bZs3IO2EmfFsd15uHvIt+Y8vEf7N7fWAU" crossorigin = "anonymous">

<div class = "container">
  <i class = "fas fa-angry"></i>
</div>
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
0
0
124
1

Ответы 1

Чтобы решить вашу проблему, мне потребовалось два шага.

Во-первых, у браузера есть собственные стили, которые он применяет к вашему контенту, и некоторые из них могут доставить вам проблемы. В вашем случае свойство line-height по умолчанию в вашем контейнере добавляет дополнительное пространство, поэтому установка его на 1 исправила это.

Во-вторых, даже после применения сброса высоты строки все еще оставался зазор в 1 пиксель, поэтому я провел некоторое исследование и, согласно этому ответу о Встроенные замененные элементы, из-за некоторого поведения элементов вам, возможно, придется также настроить свойство vertical-align.

В вашем случае применение свойства vertical-align к элементу i избавляет от 1 лишнего пикселя. Для свойства vertical-align можно задать значение top или bottom, и оно будет вести себя одинаково.

.container {
  background-color: green;
  line-height: 1;
}

i {
  background-color: pink;
  display: inline-block;
  margin: 0;
  padding: 0;
  vertical-align: top;
}
<link rel = "stylesheet" href = "https://use.fontawesome.com/releases/v5.3.1/css/all.css" integrity = "sha384-mzrmE5qonljUremFsqc01SB46JvROS7bZs3IO2EmfFsd15uHvIt+Y8vEf7N7fWAU" crossorigin = "anonymous">

<div class = "container">
  <i class = "fas fa-angry"></i>
</div>

сброс высоты строки - плохая идея очень .... как только вы начнете писать текст, вы увидите проблему, выравнивания достаточно

Temani Afif 06.10.2018 11:42

@TemaniAfif Он используется в Сброс CSS Эрика Мейера, который, возможно, является самым популярным сбросом CSS.

Robert Corponoi 06.10.2018 15:07

проверьте это: jsfiddle.net/xmhqe94r/2 вы четко заметите разницу и то, как сужается пространство между текстом во втором блоке ... так что даже если он используется с сбросом CSS Эрика Мейера, это не очень хорошая идея. И в вашем случае это не нужно, достаточно выравнивания

Temani Afif 06.10.2018 15:16

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

Robert Corponoi 06.10.2018 15:18

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

Temani Afif 06.10.2018 15:38

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

Robert Corponoi 06.10.2018 16:18

Я уверен, что это проблема не только Font Awesome, я использовал font awesome для простоты в примере, но на самом деле у меня есть свой собственный шрифт. Я считаю, что это ошибка при рендеринге шрифтов для @ font-face.

Luis Rivera 08.10.2018 09:45

Другие вопросы по теме