Ash*_*oyi 3 html css css3 flexbox css-grid
如果你看下面的例子,我希望headers(h4.child-title)在父容器中具有相同的长度.
但我没有成功实现这一目标.
任何帮助表示赞赏.
.top-level {
display: flex;
flex-flow: row wrap;
}
.section {
display: flex;
flex-flow: row nowrap;
border: 1px solid;
margin-right: 12px;
margin-top: 12px;
}
.section-child {
display: flex;
flex-flow: column nowrap;
align-items: center;
flex: 1 1 0;
}
.child-title {
white-space: nowrap;
}
.vertical-separator {
width: 1px;
background-color: rgba(0, 0, 0, 0.3);
margin: 8px;
}Run Code Online (Sandbox Code Playgroud)
<div class="top-level">
<section class="section">
<div claas="section-child">
<h4 class="child-title">Title</h4>
<!--A lot more content here-->
</div>
<div class="vertical-separator"></div>
<div class="section-child">
<h4 class="child-title">Longer title</h4>
<!--A lot more content here-->
</div>
<div class="vertical-separator"></div>
<div class="section-child">
<h4 class="child-title">Much much longer title</h4>
<!--A lot more content here-->
</div>
</section>
<section class="section">
<div claas="section-child">
<h4 class="child-title">Title</h4>
<!--A lot more content here-->
</div>
<div class="vertical-separator"></div>
<div class="section-child">
<h4 class="child-title">Longer title</h4>
<!--A lot more content here-->
</div>
<div class="vertical-separator"></div>
<div class="section-child">
<h4 class="child-title">Much much longer title</h4>
<!--A lot more content here-->
</div>
</section>
<section class="section">
<div claas="section-child">
<h4 class="child-title">Title</h4>
<!--A lot more content here-->
</div>
<div class="vertical-separator"></div>
<div class="section-child">
<h4 class="child-title">Longer title</h4>
<!--A lot more content here-->
</div>
<div class="vertical-separator"></div>
<div class="section-child">
<h4 class="child-title">Much much longer title</h4>
<!--A lot more content here-->
</div>
</section>
</div>Run Code Online (Sandbox Code Playgroud)
Mic*_*l_B 12
为了使text items(.section-child)等于width,你需要使用flex: 1 1 0,你已经完成了.这跟说的一样flex: 1.
但是,这本身并没有达到目的,原因有两个:
.section-child默认情况下,Flex容器的父级,以及较大容器中的弹性项目的内容限制为其内容的宽度.所以它不会扩展,文本可以溢出容器.你需要申请flex: 1到.section,也是如此.
默认情况下,弹性项不能小于其内容的大小.初始设置是min-width: auto.因此flex: 1无法平均分配容器空间,因为flex项目无法收缩超过最长的项目.您需要使用覆盖此行为min-width: 0.
.top-level {
display: flex;
flex-flow: row wrap;
}
.section {
display: flex;
flex-flow: row nowrap;
border: 1px solid;
margin-right: 12px;
margin-top: 12px;
flex: 1;
min-width: 0;
}
.section-child {
display: flex;
flex-flow: column nowrap;
align-items: center;
flex: 1;
min-width: 0;
}
.child-title {
white-space: nowrap;
}
.vertical-separator {
width: 1px;
background-color: rgba(0, 0, 0, 0.3);
margin: 8px;
}Run Code Online (Sandbox Code Playgroud)
<div class="top-level">
<section class="section">
<div class="section-child">
<h4 class="child-title">Title</h4>
<!--A lot more content here-->
</div>
<div class="vertical-separator"></div>
<div class="section-child">
<h4 class="child-title">Longer title</h4>
<!--A lot more content here-->
</div>
<div class="vertical-separator"></div>
<div class="section-child">
<h4 class="child-title">Much much longer title</h4>
<!--A lot more content here-->
</div>
</section>
<section class="section">
<div class="section-child">
<h4 class="child-title">Title</h4>
<!--A lot more content here-->
</div>
<div class="vertical-separator"></div>
<div class="section-child">
<h4 class="child-title">Longer title</h4>
<!--A lot more content here-->
</div>
<div class="vertical-separator"></div>
<div class="section-child">
<h4 class="child-title">Much much longer title</h4>
<!--A lot more content here-->
</div>
</section>
<section class="section">
<div class="section-child">
<h4 class="child-title">Title</h4>
<!--A lot more content here-->
</div>
<div class="vertical-separator"></div>
<div class="section-child">
<h4 class="child-title">Longer title</h4>
<!--A lot more content here-->
</div>
<div class="vertical-separator"></div>
<div class="section-child">
<h4 class="child-title">Much much longer title</h4>
<!--A lot more content here-->
</div>
</section>
</div>Run Code Online (Sandbox Code Playgroud)
现在所有弹性项目的宽度都相等.但是,因为您将文本设置为nowrap,所以它可以溢出其边界.如果你删除nowrap,一切都很合适.
.top-level {
display: flex;
flex-flow: row wrap;
}
.section {
display: flex;
flex-flow: row nowrap;
border: 1px solid;
margin-right: 12px;
margin-top: 12px;
flex: 1;
min-width: 0;
}
.section-child {
display: flex;
flex-flow: column nowrap;
align-items: center;
flex: 1;
min-width: 0;
}
.child-title {
/* white-space: nowrap; */
}
.vertical-separator {
width: 1px;
background-color: rgba(0, 0, 0, 0.3);
margin: 8px;
}Run Code Online (Sandbox Code Playgroud)
<div class="top-level">
<section class="section">
<div class="section-child">
<h4 class="child-title">Title</h4>
<!--A lot more content here-->
</div>
<div class="vertical-separator"></div>
<div class="section-child">
<h4 class="child-title">Longer title</h4>
<!--A lot more content here-->
</div>
<div class="vertical-separator"></div>
<div class="section-child">
<h4 class="child-title">Much much longer title</h4>
<!--A lot more content here-->
</div>
</section>
<section class="section">
<div class="section-child">
<h4 class="child-title">Title</h4>
<!--A lot more content here-->
</div>
<div class="vertical-separator"></div>
<div class="section-child">
<h4 class="child-title">Longer title</h4>
<!--A lot more content here-->
</div>
<div class="vertical-separator"></div>
<div class="section-child">
<h4 class="child-title">Much much longer title</h4>
<!--A lot more content here-->
</div>
</section>
<section class="section">
<div class="section-child">
<h4 class="child-title">Title</h4>
<!--A lot more content here-->
</div>
<div class="vertical-separator"></div>
<div class="section-child">
<h4 class="child-title">Longer title</h4>
<!--A lot more content here-->
</div>
<div class="vertical-separator"></div>
<div class="section-child">
<h4 class="child-title">Much much longer title</h4>
<!--A lot more content here-->
</div>
</section>
</div>Run Code Online (Sandbox Code Playgroud)
更多信息:
如果您的实际目标是使行中的所有弹性项目等于最长项目的宽度,那就是flexbox无法做到的事情.
Flex可以执行相等宽度和相同高度的柔性项目,因为它flex: 1在主轴上提供.
Flex也可以做相等宽度和相等高度的列/行,因为它align-items: stretch在十字轴上提供.
但是在flexbox规范中没有关于基于特定兄弟的大小的相同大小的弹性项目的内容.但是,flexbox的姐妹技术CSS Grid可以做到这一点.
通过使用Grid的fr单位,网格中列的宽度可以设置为最长列的宽度.
.top-level {
display: flex;
flex-flow: row wrap;
}
.section {
display: grid;
grid-template-columns: 1fr 1px 1fr 1px 1fr;
margin-right: 12px;
margin-top: 12px;
}
.section-child {
display: flex;
justify-content: center;
align-items: center;
min-width: 0;
background-color: green;
}
.child-title {
/* white-space: nowrap; */
}
.vertical-separator {
background-color: rgba(0, 0, 0, 0.3);
margin: 8px;
}Run Code Online (Sandbox Code Playgroud)
<div class="top-level">
<section class="section">
<div class="section-child">
<h4 class="child-title">Title</h4>
<!--A lot more content here-->
</div>
<div class="vertical-separator"></div>
<div class="section-child">
<h4 class="child-title">Longer title</h4>
<!--A lot more content here-->
</div>
<div class="vertical-separator"></div>
<div class="section-child">
<h4 class="child-title">Much much longer title text text text text text text text text text text</h4>
<!--A lot more content here-->
</div>
</section>
<section class="section">
<div class="section-child">
<h4 class="child-title">Title</h4>
<!--A lot more content here-->
</div>
<div class="vertical-separator"></div>
<div class="section-child">
<h4 class="child-title">Longer title text text text text text text</h4>
<!--A lot more content here-->
</div>
<div class="vertical-separator"></div>
<div class="section-child">
<h4 class="child-title">Much much longer title</h4>
<!--A lot more content here-->
</div>
</section>
<section class="section">
<div class="section-child">
<h4 class="child-title">Title</h4>
<!--A lot more content here-->
</div>
<div class="vertical-separator"></div>
<div class="section-child">
<h4 class="child-title">Longer title</h4>
<!--A lot more content here-->
</div>
<div class="vertical-separator"></div>
<div class="section-child">
<h4 class="child-title">Much much longer title</h4>
<!--A lot more content here-->
</div>
</section>
</div>Run Code Online (Sandbox Code Playgroud)
以下是它的工作原理:
Flexbox 不是像布局这样的表格的完美选择,但你可以接近:
添加flex: 1 1 100%到sectionchild,它会根据设置为 100% 等量缩小(或增长)
add overflow: hidden, or min-width, 告诉section-child他们允许小于他们的内容
将flex-basis: 100%, or flex-grow: 1,添加到section它的父项中,top-level
As vertical-separator,我改为::after在section-child除第一个之外的每一个上使用伪,并且由于它使用绝对位置,position: relative因此需要在section-child.
.top-level {
display: flex;
flex-flow: row wrap;
}
.section {
flex-basis: 100%; /* added */
display: flex;
flex-flow: row nowrap;
border: 1px solid;
margin-right: 12px;
margin-top: 12px;
}
.section-child {
position: relative; /* added */
display: flex;
flex-flow: column nowrap;
align-items: center;
flex: 1 1 100%; /* added */
overflow: hidden; /* added */
}
.child-title {
white-space: nowrap;
}
.section-child + .section-child::after {
content: '';
position: absolute;
left: 0;
top: 10%;
height: 80%;
border-left: 1px solid rgba(0,0,0,0.3);
}Run Code Online (Sandbox Code Playgroud)
<div class="top-level">
<section class="section">
<div class="section-child">
<h4 class="child-title">Title</h4>
<!--A lot more content here-->
</div>
<div class="section-child">
<h4 class="child-title">Longer title</h4>
<!--A lot more content here-->
</div>
<div class="section-child">
<h4 class="child-title">Much much longer title</h4>
<!--A lot more content here-->
</div>
</section>
<section class="section">
<div class="section-child">
<h4 class="child-title">Title</h4>
<!--A lot more content here-->
</div>
<div class="section-child">
<h4 class="child-title">Longer title</h4>
<!--A lot more content here-->
</div>
<div class="section-child">
<h4 class="child-title">Much much longer title</h4>
<!--A lot more content here-->
</div>
</section>
<section class="section">
<div class="section-child">
<h4 class="child-title">Title</h4>
<!--A lot more content here-->
</div>
<div class="section-child">
<h4 class="child-title">Longer title</h4>
<!--A lot more content here-->
</div>
<div class="section-child">
<h4 class="child-title">Much much longer title</h4>
<!--A lot more content here-->
</div>
</section>
</div>Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14126 次 |
| 最近记录: |