下面请看错误的示例
div {
border: 1px solid red;
float: left;
}
.box {
width: 200px;
}
.a {
width: 80px;height: 70px;
}
.b {
width: 80px;
height: 100%;
}
.c {
width: 30px;
height: 100%;
}
<div class="box">
<div class="a"></div>
<div class="b"></div>
<div class="c"></div>
</div>
上面结果是,.box
元素被撑开,其他元素是一条重合的线,即使给 .a
,.b
,.c
都加上浮动,也是没有效的
当给父元素加上 相对定位,子元素加上绝对定位后
div {
border: 1px solid red;
float: left;
}
.box {
position: relative;
width: 200px;
}
.a {
width: 80px;height: 70px;
}
.b {
position: absolute;
width: 80px;
height: 100%;
}
.c {
position: absolute;
width: 30px;
height: 100%;
}
<div class="box">
<div class="a"></div>
<div class="b"></div>
<div class="c"></div>
</div>
通过这个例子,得出结论:要想实现 子元素 撑满父元素,用 定位,相对定位后,子元素才会以父元素的宽高来计算
另一个应用的场景,是鼠标 移入图片,出现覆盖区域刚好跟图片大小一样
实例
另外实现动态居中,变大,都是这个原理
左侧的蓝色条 根据内容 变大,右侧的箭头不管内容多少,始终居中
.list-item {
-webkit-box-sizing: border-box;
box-sizing: border-box;
padding: 1.2rem 1rem;
border-bottom: 1px solid #e0e0e0;
overflow: hidden;
}
.list-item .line {
position: absolute;
top: 50%;
left: 0;
float: left;
border-left: 3px solid #17AEF7;
height: 82%;
-webkit-transform: translateY(-50%);
transform: translateY(-50%);
}
.list-item .items {
float: left;
margin-left: 1rem;
}
.list-item .more {
position: absolute;
top: 50%;
right: 1rem;
float: right;
width: 1.5rem;
height: 1.5rem;
background: url(../../../image/app/common/next_icon.png) no-repeat 50% 50%;
background-size: 1.2rem 1.8rem;
-webkit-background-size: 1.2rem 1.8rem;
-webkit-transform: translateY(-50%);
transform: translateY(-50%);
}
/*改动样式*/
.list-container {
position: relative;
width: 100%;
height: 100%;
overflow: hidden;
}
.list-container .line {
float: left;
display: block;
margin-right: 1rem;
}
.list-container .items {
float: left;
width: 86%;
}
.list-container .more {
display: block;
}
<div class="list-item" data-id="4">
<div class="list-container">
<div class="line"></div>
<p class="items">测试内容</p>
<div class="more"></div>
</div>
</div>
因为之前没有考虑到 内容会增多,所以样式写死,后来加上改动代码,对于内容会增多的文本,最好用p
标签包裹,因为支持多行文本,切符合语义化
top: 50%;transform: translateY(-50%); 是居中的关键,前缀不能忘