Вопрос или проблема
Я заметил, что одинаковые CSS/HTML дают разные результаты в Arc/Chrome по сравнению с Firefox. Я не могу понять, почему.
Это HTML для обоих:
<div class="vv-topicrow-info">
<div class="vv-topicrow-av"><a href="..."><img src="..."></a></div>
<div class="vv-topicrow-title"><a href="...">Lorem ipsum dolor sit amet</a></div>
<div class="vv-topicrow-desc">consectetur adipiscing elit</div>
<div class="vv-topicrow-pages">
<div class="vv-topicrow-pages-img"><img src="..."></div>
<span class="small">
<a href="...">1 </a>
<a href="...">2 </a>
<a href="...">3 </a>
<a href="...">...7 </a>
</span>
</div>
<ul class="vv-topicrow-details">
<li>Fusce at justo</li>
<li>et eros</li>
<li>suscipit laoreet</li>
</ul>
</div>
А вот CSS для контейнера сетки:
.vv-topicrow-info {
display: grid;
grid-template-columns: 5.125rem 1fr auto;
grid-template-rows: 5.125rem 4rem 1.5rem;
gap: 0.25rem 0.25rem;
grid-auto-flow: row;
grid-template-areas:
"vv-topicrow-av vv-topicrow-title vv-topicrow-title"
"vv-topicrow-desc vv-topicrow-desc vv-topicrow-pages"
"vv-topicrow-details vv-topicrow-details vv-topicrow-details";
}
.vv-topicrow-av {
grid-area: vv-topicrow-av;
width: 4.5rem;
height: 4.5rem;
padding: 0.25rem;
border-radius: 0.125rem;
background-color: teal;
}
.vv-topicrow-av img {
width: 4.5rem;
height: 4.5rem;
border-radius: 0.125rem;
}
.vv-topicrow-title {
grid-area: vv-topicrow-title;
padding: 0.5rem;
font-size: 3rem;
font-weight: 900;
overflow: hidden;
background: teal;
border-radius: 0.125rem;
text-transform: uppercase;
}
.vv-topicrow-desc {
display: flex;
align-items: center;
grid-area: vv-topicrow-desc;
font-weight: 200;
background: pink;
font-size: 1.25rem;
padding: 0.25rem 0.5rem;
text-transform: uppercase;
}
.vv-topicrow-pages {
grid-area: vv-topicrow-pages;
display: flex;
font-size: 0px;
background: yellow;
}
.vv-topicrow-pages .small {
height: 100%;
margin-left: 0.25rem;
display: flex;
flex-wrap: wrap;
align-items: stretch;
flex-direction: column;
justify-content: space-between;
}
.vv-topicrow-pages .small a {
width: 1.5rem;
height: 1.5rem;
font-weight: 900;
background: red;
font-size: 0.75rem;
padding: 0.125rem 0.125rem;
display: flex;
align-items: center;
justify-content: center;
}
.vv-topicrow-pages .small a:nth-of-type(3) {
margin-top: 0.125rem;
margin-left: 0.125rem;
}
.vv-topicrow-pages .small a:nth-of-type(4) {
margin-top: 0.125rem;
margin-left: 0.125rem;
letter-spacing: -3px;
}
.vv-topicrow-pages .vv-topicrow-pages-img {
width: 3.35rem;
height: 3.35rem;
padding: 0.25rem;
border-radius: 0.125rem;
}
.vv-topicrow-pages .vv-topicrow-pages-img img {
width: 3.35rem;
height: 3.35rem;
filter: grayscale(1);
border-radius: 0.125rem;
}
.vv-topicrow-details {
grid-area: vv-topicrow-details;
margin: 0;
padding: 0;
list-style: none;
display: flex;
flex-wrap: nowrap;
align-items: center;
justify-content: space-between;
}
.vv-topicrow-details li {
flex-grow: 1;
background: green;
font-size: 0.75rem;
text-align: center;
margin-right: 0.25rem;
padding: 0.25rem 0.5rem;
}
.vv-topicrow-details li:last-of-type {
margin-right: 0;
}
Вот Codepen с кодом: нажмите здесь
Вот результат в Chrome/Arc (и то, чего я хочу/ожидаю):
вывод arc
А вот как это выглядит в Firefox, вы можете видеть, что оно выходит за пределы:
вывод firefox
Попытавшись разобраться с этим, я заметил, что в Chrome/Arc значения возвращаются так: grid-template-columns: 82px 479.602px 129.594px
, в то время как в Firefox — так: grid-template-columns: 82px 523.6px 99.6px
направляющие сетки arc
направляющие сетки firefox
Версия Firefox: 129.0.2 (64-разрядная)
Версия Arc: 1.60.0 (53678) // Версия движка Chromium 128.0.6613.138
Большое спасибо! ✨
Ответ или решение
Различия в отображении CSS Grid между браузерами, такими как Chrome/Arc и Firefox, могут быть вызваны несколькими факторами, включая разное поведение браузеров в интерпретации CSS-стилей, а также возможное наличие специфичных для каждого браузера багов или особенностей.
Причины различий в grid-template-columns
:
-
Разные алгоритмы расчета ширины: Браузеры могут использовать различные методы для расчета ширины колонок в grid. Например, в данном случае Chrome/Arc возвращает ширины колонок как
82px
,479.602px
, и129.594px
, в то время как Firefox показывает82px
,523.6px
, и99.6px
. Эти расхождения могут быть связаны с особенностями рендеринга и тем, как каждый браузер учитывает отступы (padding), ширину (width) элементов и их размеры. -
Научитесь использовать
min-content
,max-content
,auto
: Убедитесь, что в случае изменения контента (как например в случае текста) используются более гибкие единицы измерения и атрибуты, такие какmin-content
илиmax-content
. Это может помочь браузерам правильно обрабатывать размеры. -
Проблемы с overflow: В Firefox может возникать проблема с переполнением (overflow) элементов внутри grid, если его размеры определяются неявно. Попробуйте добавить
overflow: hidden
,overflow: auto
илиoverflow: scroll
к контейнеру, чтобы управлять переполнением. - Баги в браузерах: Иногда такие расхождения могут быть связаны с конкретными версиями браузеров. Убедитесь, что оба браузера обновлены до последней версии.
Рекомендации по исправлению:
-
Используйте единообразное свойство размеров: Убедитесь, что все ваши размеры (ширина, высота) указаны единообразно, и избегайте жестко заданных размеров, если это возможно.
-
Протестируйте настройки grid: Попробуйте изменить
grid-template-columns
так, чтобы указанные значения были более адаптивными. Например, вместо фиксированных значений, попробуйте использовать процентные значения илиfr
единицы. - Добавьте устройство для управления размером: Рассмотрите возможность использования медиа-запросов для тонкой настройки отображения элементов на разных экранах и в разных браузерах.
Пример исправленного кода:
Вы можете попробовать следующий подход:
.vv-topicrow-info {
display: grid;
grid-template-columns: minmax(4rem, 5.125rem) 1fr auto;
grid-template-rows: auto auto auto;
gap: 0.25rem;
}
Таким образом, вы позволите браузерам более гибко обрабатывать размеры колонок.
Дополнительные рекомендации:
- Проверяйте консоль разработчика в обоих браузерах на наличие возможных ошибок или предупреждений.
- Если специфичная проблема сохраняется, рассмотрите возможность использования JavaScript для исправления отображения в одном из браузеров в зависимости от его версии, если это целесообразно.
Попробуйте предложенные изменения и посмотрите, устранят ли они проблему с отображением.