一、flex布局中水平垂直居中
这还不简单?
display: flex;
justify-content: center;
align-items: center;
但还可以结合margin来实现,可以不用设置justify-content和align-items
<style>
.box {
width: 500px;
height: 200px;
background-color: gainsboro;
display: flex;
}
.box .item1 {
width: 50px;
height: 50px;
background-color: orange;
margin: auto;
}
</style>
<body>
<div class="box">
<div class="item1"></div>
</div>
</body>
二、最后一个元素靠右对齐
这还不简单?
.box {
display: flex;
justify-content: space-between;
}
.left {
display: flex;
}
<div class="box">
<div class="left">
<div class="item item1"></div>
<div class="item item2"></div>
</div>
<div class="item item3"></div>
</div>
简单点:
.box {
display: flex;
}
.item3 {
margin-left: auto;
}
<div class="box">
<div class="item item1"></div>
<div class="item item2"></div>
<div class="item item3"></div>
</div>
是不是少了一层容器,我经常看同事(前同事)的代码,多裹了好几层div,也就设置一个样式,为啥不减少div嵌套
三、实现这个效果
我就知道你这个大聪明想到了justify-content: space-between;
当你设置上后你会得到这个
可以使用margin来做到:
.box {
background-color: gainsboro;
display: flex;
flex-wrap: wrap;
/* justify-content: space-between; */
}
.item {
width: 50px;
height: 50px;
border: 2px solid darkslategrey;
box-sizing: border-box;
--n: 5; /* 一行几个 */
--space: calc(100% - var(--n) * 50px); /* 一行减去item的宽度后剩下的间距 */
--leftRight: calc(var(--space) / var(--n) / 2); /* 每个item左右的间距 */
margin: 10px var(--leftRight);
}
效果:
当然,你也可以设置成一行6个:--n: 6;
用网格布局也可以实现:
.box {
background-color: gainsboro;
display: grid;
grid-template-columns: repeat(5, 1fr);
}
.item {
width: 50px;
height: 50px;
border: 2px solid darkslategrey;
box-sizing: border-box;
margin: 10px auto;
}
如果你觉得这篇文章对你有用,可以看看作者封装的库xtt-utils,里面封装了非常实用的js方法。如果你也是vue开发者,那更好了,除了常用的api,还有大量的基于element-ui组件库二次封装的使用方法和自定义指令等,帮你提升开发效率。不定期更新,欢迎交流~