父元素宽度一定,子元素完美均分父级宽度

我们都是爱美的生物,大多数要求对一个东西进行分割时,我们都会尽可能的均分它。在页面中,一个div盒子有的固定像素宽度,有的为百分比。如何能很好的均分一个div呢?


以下将提供五个均分父元素的方法,其中 方法四flex布局为常用


先提供原始代码及其展示:
为了展示有所区别,便于观察,添加了padding,不同的子元素添加不同的border颜色
html:

<div class = "farther">
        <div class="child">child1</div>
        <div class="child">child2</div>
        <div class="child">child3</div>
    </div>

css:

.farther {
	border: 2px solid rgb(98, 0, 255);
	padding: 5px;
}
.farther div:nth-of-type(1){border: 2px solid #ff0000;}
.farther div:nth-of-type(2){border: 2px solid #00ff00;}
.farther div:nth-of-type(3){border: 2px solid #ff009d;}

原始效果为:

原始效果图
下面我们将child1,child2,child3实现均分父盒子的宽度


所需要实现的效果:

所需效果图

方法一:浮动布局+百分比

将子元素依次左浮动,根据子元素的个数,设定每个子元素的宽度百分比,如100/3=33.3%
注意:
!子元素浮动会造成 高度坍塌 ,需要对父元素使用overflow:hidden;
!当设置了border或其他值后,子元素的宽度将 大于 所设置的宽度,还需要设置box-sizing:border-box
css代码:

.farther div {
    float: left;
    width: 33.3%;
    box-sizing: border-box;/*消除border等对盒子宽度的影响*/
}
.farther {  overflow: hidden;}

方法二:行内元素(inline-block)+ 百分比

类似于方法一,完美均分时子元素需要设置box-sizing:border-box,但是此方法不会造成高度坍塌
css代码:

.farther div {
    display: inline-block;
	width: 33.3%;
    box-sizing: border-box;
}

但是设置为inline-block后,元素之间会产生一个 空白间隙 ,使之无法均分父元素,如图

失败的方法二
**这时候简单粗暴的方法为更改html代码 不换行 **

<div class="farther">
        <div class="child">child1</div><div class="child">child2</div><div class="child">child3</div>
    </div>
    <!-- 失败的方法二
    	<div class="farther">
        <div class="child">child1</div>
        <div class="child">child2</div>
        <div class="child">child3</div>
    </div> -->

这样就能实现没有空白,当然也有别的方法解决inline-block的留白。

方法三:父元素 display:table + 子元素 display:table-cell

不会造成高度坍塌,也不用设置box-sizing,但是对父元素的宽度有所设置。不然父元素的宽度只会为子元素的长度之和。
css代码:

.farther {
    display: table;
    width: 300px;
}
.farther div {
    display: table-cell;
    /* box-sizing: border-box; 不用设置*/
}

方法四:常用!采用dispalay:flex;flex布局

如今flex布局能够满足99%所想要的布局效果,并且为弹性布局,很方便!
css代码:

.farther div { flex:1;}
.farther {  display: flex;}

方法五:栅格系统(bootstrap框架)

首先需要引入bootstrap相关资源,在栅格系统中会将一行等分为12份,col-md-4为占4/12

<div class="farther">
        <div class="child col-md-4">child1</div>
        <div class="child col-md-4">child2</div>
        <div class="child col-md-4">child3</div>
    </div>
  • 6
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值