在 Flex 环境中像 div 一样行,开头有旋转标题

问题描述 投票:0回答:2

目标

最终我想要得到这样的东西(忘记周围的白色边框是由于剪切造成的):

限制

此元素必须位于以下标记内,我无法轻易更改:

<div style="position:absolute;top:15px;right:15px;bottom:15px;left:15px">
  <div style="display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;width:100%;height:100%;">
     <div style="position:relative;-webkit-flex:1;-ms-flex:1;flex:1;width:100%;height:100%;">
        <div style="position:absolute;top:0;left:0;right:0;bottom:0;">
          <!-- place elements here -->
        </div>
     </div>
  </div>
</div>

我尝试了什么

<div class="split-container">
  <div class="split-heading">
    <h3>Heading</h3>
  </div>
  <div class="split-content">
    <p>Content</p>
  </div>
</div>
.split-container {
  display: flex;
  height: 100%;
}

.split-heading {
  background-color: rgb(198,89,17);
  color: #fff;
  padding: 0 5px; /* Add padding to the sides */
}

.split-heading > h3 {
  transform: rotate(-90deg);
  transform-origin: bottom right;
}

.split-content {
  flex-grow: 100;
  background-color: rgb(244,176,132);
  color: #fff;
}

结果

https://codepen.io/thothal/pen/qBwxEKO

问题

  • 标题 div 应该只占据所需的空间(现在太宽了)
  • 标题应垂直和水平居中
  • 内容应垂直居中
html css flexbox
2个回答
0
投票

如果您将 css 更改为:

.split-heading {
  background-color: rgb(198, 89, 17);
  color: #fff;
  padding: 0 5px; /* Add padding to the sides */
  display: flex;
  align-items: center;
}
.split-heading > h3 {
  writing-mode: sideways-lr;
  text-align: center;
}

.split-content {
  flex-grow: 100;
  background-color: rgb(244, 176, 132);
  color: #fff;
  display: flex;
  align-items: center;
}

基本上:使用align-items: center为元素添加flex显示,这样你就可以将div中的元素垂直居中。


0
投票

解决方案:

  • 您可以使用 css
    writing-mode
    属性垂直显示文本,然后将其旋转 180 度,以翻转它。
  • display: flex
    align-items: center
    添加到
    split-heading
    类以使其居中。
  • display: flex
    justify-content: center
    添加到
    split-content
    类以使其居中。

.split-container {
  display: flex;
  height: 100%;
}

.split-heading {
  background-color: rgb(198,89,17);
  color: #fff;
  padding: 0 5px; /* Add padding to the sides */
  display: flex;
  align-items: center;
}

.split-heading > h3 {
  transform: rotate(180deg);
  writing-mode: vertical-lr;
  margin: 0px;
  text-align: center;
}

.split-content {
  flex-grow: 100;
  background-color: rgb(244,176,132);
  color: #fff;
  display: flex;
  align-items: center;
}
<div style="position:absolute;top:15px;right:15px;bottom:15px;left:15px">
  <div style="display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;width:100%;height:100%;">
     <div style="position:relative;-webkit-flex:1;-ms-flex:1;flex:1;width:100%;height:100%;">
        <div style="position:absolute;top:0;left:0;right:0;bottom:0;">
          <div class="split-container">
            <div class="split-heading">
              <h3>Heading</h3>
            </div>
            <div class="split-content">
              <p>Content</p>
            </div>
          </div>
        </div>
     </div>
  </div>
</div>

© www.soinside.com 2019 - 2024. All rights reserved.