【问题标题】:CSS Grid - Set item width on hoverCSS Grid - 在悬停时设置项目宽度
【发布时间】:2019-06-17 07:44:49
【问题描述】:

我正在构建一个简单的 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 我可以在项目本身中设置项目的宽度,但使用网格我可以在容器上设置项目宽度。

有没有办法在物品上设置它们?

【问题讨论】:

  • 您尝试过:.container&gt;div:hover {width:40vw} 来检查您的网格的行为吗?
  • 相关:stackoverflow.com/a/54834180/8620333(可能是你要找的)
  • 首先你可以在悬停的元素上使用grid-column: 2。现在您可以使用grid-auto-flow: column网格项流向 切换到列;并使用 grid-auto-columns: 1fr 将隐式列设置为 1fr - 在悬停时,您现在将有 5 列,而 hovered 将从中取出 2fr...参见 jsfiddle.net/anz3e2t5(如果这是预期的输出,将转换为答案)
  • 预期的输出是上述评论中最重要的输出吗?

标签: css css-grid


【解决方案1】:

您可以使用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 我同意,这是一个更好的方法!请查看我的编辑。
猜你喜欢
  • 1970-01-01
  • 2017-10-14
  • 2021-09-19
  • 2016-10-24
  • 2020-12-25
  • 1970-01-01
  • 1970-01-01
  • 2022-09-28
相关资源
最近更新 更多