我有一个带有填充物的父级,里面有2个孩子。我想让第二个孩子B占据父母的其余部分(减去div a)。如果不存在div a,则比所有高度占用。(使用相同的CSS!)
#parent {
position: relative;
left: 0;
max-width: 500px;
max-height: 200px;
background: #333;
top: 0;
overflow: hidden;
}
#parent:after {
padding-top: 56.25%;
display: block;
content: '';
}
.a {
position: relative;
height: 20px;
width: 100%;
background: red;
}
.b {
position: relative;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: blue;
overflow: hidden;
}
<div id="parent">
<div class="a">1 </div>
<div class="b">2 </div>
</div>
编辑:
为什么问题被拒绝?这个问题怎么了?我该怎么问,而不会被拒绝?
您可以将view-height
CSS单元用于DIV b
。代码的示例。如果删除DIV a
,您会注意到Div b
将占所有height
。
#parent {
position: relative;
left: 0;
max-width: 500px;
max-height: 200px;
background: #333;
top: 0;
overflow: hidden;
}
#parent:after {
padding-top: 56.25%;
display: block;
content: '';
}
.a {
position: relative;
height: 20px;
width: 100%;
background: red;
}
.b {
position: relative;
top: 0;
left: 0;
width: 100%;
height: 100vh;
background: blue;
overflow: hidden;
}
<div id="parent">
<div class="a">1 </div>
<div class="b">2 </div>
</div>
可以使用flex-box
布局来实现预期的行为,如嵌入的代码段中所示。
解决方案分解:
-
#parent
-在包含父元素上声明flex
,以及flex-wrap
,以便嵌套的元素可以占据容器,我们想在此处维护行向。 -
.a
-在此嵌套元素上声明flex-basis
;就是宣布width: 100%
的Tantamount-我们希望它保留全宽,以便以下兄弟姐妹元素(.b
)将新行。 -
.b
-声明速记属性flex: 1 1
以指定该元素应占据其全部宽度和高度包含元素,但不超过它。flex
1 属性是一个flex-shrink
的速记 2 ,flex-grow
3 ,和flex-basis
4
#parent {
position: relative;
left: 0;
max-width: 500px;
max-height: 200px;
background: #333;
top: 0;
overflow: hidden;
/* additional */
display: flex;
flex-wrap: wrap;
}
#parent:after {
padding-top: 56.25%;
display: block;
content: '';
}
.a {
position: relative;
height: 20px;
background: red;
/* additional */
flex-basis: 100%;
}
.b {
position: relative;
background: blue;
/* additional */
flex: 1 1;
}
<div id="parent">
<div class="a">1</div>
<div class="b">2</div>
</div>
<br>
<div id="parent">
<div class="b">2</div>
</div>
flex-box
上的注释:
由于flex-box
不限于支持旧浏览器(例如)以提供完整的浏览器支持和兼容性,请参阅上述任何一种替代方案。
请参阅浏览器兼容性:
- caniuse.com
- Flex -CSS |mdn
编辑
更新
#parent {
position: relative;
left: 0;
max-width: 500px;
max-height: 200px;
background: #333;
top: 0;
overflow: hidden;
/* additional */
display: flex;
flex-direction: column;
height: 200px; /* an absolute height value is required for relative flex-box heights */
}
/*#parent:after { kill the interloper
padding-top: 56.25%;
display: block;
content: '';
}*/
.a {
position: relative;
height: 20px;
background: red;
}
.b {
position: relative;
background: blue;
/* additional */
flex: 1 1;
}
<div id="parent">
<div class="a">1</div>
<div class="b">2</div>
</div>
<br>
<div id="parent">
<div class="b">2</div>
</div>
更新的片段用A 列方向演示了替代解决方案。 pseudo-element #parent:after
已被删除,因为它否定了实现问题中指定的行为的任何尝试(如果此 pseudo-element 需要任何形状或形式,请考虑更新您的问题,以清晰的解释有关其功能和或角色)。