【问题标题】:Is it possible to create vertical text that spans all rows in a CSS Grid?是否可以创建跨越 CSS 网格中所有行的垂直文本?
【发布时间】:2017-12-22 17:40:10
【问题描述】:

希望为网格创建一个部分标题(而不是通过将其放在部分上方来占用垂直空间),如下所示:

当然很容易让第一列使用grid-rows: 1 / span 3 跨越行,但是如果我转换文本并对齐/对齐它,div 不会占用列的全部空间,因此设置背景/边框看起来不对。

See trial pen

body {
  padding: 1em;
  font-family: sans-serif;
}

.my-grid {
  display: grid;
  grid-template-columns: 2rem 100px 10rem;
  background-color: #eee
}

.my-grid>* {
  border: 1px solid #ccc;
}

.section-title {
  grid-row: 1 / span 5;
  align-self: center;
  justify-self: center;
  transform: rotate(270deg);
  background-color: papayawhip;
  text-transform: uppercase;
}

input {
  border: 2px solid #000;
}
<div class="my-grid">
  <div class="section-title">Address</div>
  <div>Address 1</div>
  <input type="text">
  <div>Address 2</div>
  <input type="text">
  <div>City</div>
  <input type="text">
  <div>State</div>
  <input type="text">
  <div>Zip Code</div>
  <input type="text">
</div>

【问题讨论】:

  • 这个问题的解决方案可能会变得相当复杂。例如,您可以完全从网格中删除垂直标题,然后将其放置在网格容器旁边。或者,为了简单起见,您可以使用填充来扩展标题大小。 codepen.io/anon/pen/vpXbbE
  • @Michael_B 如果行号是动态的,或者如果有机会在任何单元格中长文本并且行可能会中断多行,则您的技术将不起作用。
  • @Hanif,我们没有这个用例的所有细节。这就是为什么我将这个想法发布为评论,而不是答案。让我们看看OP怎么说。这可能是解决他的问题的快速、简单和有效的方法。否则,我们可以考虑更复杂的解决方案。

标签: css css-grid


【解决方案1】:

是的,使用writing-mode

writing-mode CSS 属性定义文本行是水平还是垂直布局以及块前进的方向。

MDN

body {
  padding: 1em;
  font-family: sans-serif;
}

.my-grid {
  display: grid;
  grid-template-columns: 2rem 100px 10rem;
  background-color: #eee
}

.my-grid>* {
  border: 1px solid #ccc;
}

.section-title {
  grid-row: 1 / span 5;
  text-align: center;
  writing-mode:vertical-rl; /* vertical text */
  line-height:2rem; /* center in div */
  transform:rotate(180deg); /* spin to orient as required */
  background-color: papayawhip;
  text-transform: uppercase;
}

input {
  border: 2px solid #000;
}
<div class="my-grid">
  <div class="section-title">Address</div>
  <div>Address 1</div>
  <input type="text">
  <div>Address 2</div>
  <input type="text">
  <div>City</div>
  <input type="text">
  <div>State</div>
  <input type="text">
  <div>Zip Code</div>
  <input type="text">
</div>

【讨论】:

  • Flex with justify-content: centeralign-items: center 也会使文本居中。
  • 是的,但它会按照说明填充背景吗?
  • 您的line-height 解决方案适用于所有浏览器(FF、Chrome 和 Edge)。 flex 方法仅适用于 Chrome 和 Edge。 jsfiddle.net/bo4v7fuk
  • 虽然line-height: 2rem 确实在水平方向填满了列,但在垂直方向上仍然存在间隙。理想情况下,整个网格列将具有背景颜色,而不仅仅是在内容下方。
  • @redOctober13 我看不到任何垂直间隙...你确定那些不是边框吗?
猜你喜欢
  • 1970-01-01
  • 2011-05-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-28
  • 2023-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多