子元素撑满父元素

下面请看错误的示例

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>

通过这个例子,得出结论:要想实现 子元素 撑满父元素,用 定位,相对定位后,子元素才会以父元素的宽高来计算

另一个应用的场景,是鼠标 移入图片,出现覆盖区域刚好跟图片大小一样
实例

另外实现动态居中,变大,都是这个原理


1.png

左侧的蓝色条 根据内容 变大,右侧的箭头不管内容多少,始终居中

.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%); 是居中的关键,前缀不能忘
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 14,687评论 1 92
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,892评论 25 709
  • 收听音频,戳链接,旧号itclan已暂停使用,欢迎关注微信itclanCoder公众号可收听更多音频 前言 关于网...
    itclanCoder阅读 12,533评论 3 30
  • 基本格式 target: prerequisites[tab] commands prerequisites与co...
    纸片那天阅读 1,001评论 0 0
  • 8.1号 1,八一建军节,我的朋友圈里面都是朋友发的军民集合会,为什么呢?因为我们老家有很多的老战士,他们会在建军...
    光芒万丈_阅读 2,622评论 0 0