Я создаю простой макет сетки CSS, который выглядит так...
.container {
display:grid;
grid-template-columns:1fr 1fr 1fr 1fr;
}
.col1 {
padding:20px;
background:red;
color:white;
text-align:center;
}
.col2 {
padding:20px;
background:green;
color:white;
text-align:center;
}
.col3 {
padding:20px;
background:blue;
color:white;
text-align:center;
}
.col4 {
padding:20px;
background:gray;
color:white;
text-align:center;
}<div class = "container">
<div class = "col1">
Column 1
</div>
<div class = "col2">
Column 2
</div>
<div class = "col3">
Column 3
</div>
<div class = "col4">
Column 4
</div>
</div>Я пытаюсь сделать так, чтобы при наведении курсора на любой из столбцов они меняли ширину так, чтобы наведенный столбец занимал 2fr.
Я знаю, что с помощью flexbox я могу установить ширину элемента в самом элементе, но с сеткой я устанавливаю ширину элемента в контейнере.
Есть ли способ установить их на предметы?
связанные: stackoverflow.com/a/54834180/8620333 (вероятно то, что вы ищете)
Прежде всего, вы можете использовать grid-column: 2 на зависшем элементе. Теперь вы можете переключить направление потока элемента сетки на столбец с помощью grid-auto-flow: column; и установите для неявных столбцов значение 1fr, используя grid-auto-columns: 1fr - при наведении курсора теперь у вас будет 5 столбцов, а парил заберет из него 2fr... см. jsfiddle.net/anz3e2t5 (если это ожидаемый результат, он будет преобразован в ответ)
ожидаемый результат тот же, что и в скрипке в комментарии выше?






Вы можете сделать это с помощью свойства grid-column. Он принимает два целых числа, начальную и конечную дорожки (например, 1/3). Загвоздка в том, что вы не можете расширить последний столбец без дополнительной работы, потому что он переходит на следующую строку, за пределы диапазона начальной зоны наведения:
Обновлено: Согласно комментарию ниже, я обновил код наведения, чтобы он был: grid-column: span 2; Это то же самое, что и «начать с начальной дорожки и охватить 2 столбца». Это немного чище, поскольку позволяет вам установить одно правило стиля для каждого столбца. Я также добавил в правило :not(.col4), чтобы избежать вышеупомянутой проблемы с переходом столбца на следующую строку. Конечно, вам нужно дать каждому столбцу один и тот же класс «col», чтобы это работало:
.container {
display:grid;
grid-template-columns:1fr 1fr 1fr 1fr;
}
.col1 {
padding:20px;
background:red;
color:white;
text-align:center;
}
.col2 {
padding:20px;
background:green;
color:white;
text-align:center;
}
.col3 {
padding:20px;
background:blue;
color:white;
text-align:center;
}
.col4 {
padding:20px;
background:gray;
color:white;
text-align:center;
}
.col:not(.col4):hover{
grid-column: span 2;
}<div class = "container">
<div class = "col1 col">
Column 1
</div>
<div class = "col2 col">
Column 2
</div>
<div class = "col3 col">
Column 3
</div>
<div class = "col4 col">
Column 4
</div>
</div>Спасибо за это, это заставило меня подумать, что flexbox может лучше соответствовать моим потребностям.
На самом деле, лучше установить grid-column: span 2 при наведении курсора, чем устанавливать фиксированные диапазоны столбцов.
@VadimOvchinnikov Согласен, так лучше! Пожалуйста, смотрите мое редактирование.
Вы пробовали:
.container>div:hover {width:40vw}проверить, как ведет себя ваша сетка?