居中有哪几种实现方式
- 使用flex布局设置居中。容器设置 display: flex; align-items: center; justify-content: center;
- 使用flex 时也能通过给子项设置margin: auto实现居中。给容器设置 display: flex; 子项设置 margin: auto;
- 使用绝对定位的方式实现水平垂直居中。容器设置position: relative。孩子设置 position: absolute; left: 50%; top: 50%; transfrom: translate(-50%, -50%);
- 还有一种不常用的方法实现垂直居中。给容器加给伪元素,设置line-height等于容器的高度。给孩子设置display: inline-block;
- 使用grid设置居中。给容器设置 display: grid; align-items: center; justify-content: center;
- 使用grid时还能通过给子项设置margin: auto实现居中。给容器设置 display: grid; 子项设置 margin: auto;
- 使用tabel-cell实现垂直居中。容器设置 display: table-cell; vertical-align: middle。孩子如果是块级元素,直接使用左右margin等于auto实现水平居中。如果是行内元素,给容器设置text-align: center;
- 最后还有一种奇葩的方法。容器设置position: relative。孩子设置 position: absolute; 设置固定宽度和高度;top、left、bottom、right都设置为0; margin设置为auto;也能实现垂直水平居中。
方式一:flex-给容器设置
display: flex
;写在父元素上这就是定义了一个伸缩容器justify-content
主轴对齐方式,默认是横轴align-items
纵轴对齐方式,默认是纵轴 ```htmlhello
[点击查看【codepen】](https://codepen.io/jirengu/embed/vYXLBrg)
<a name="Otu5c"></a>
## 方式二:flex-给子项设置
```html
<div class="box">
<div class="child">hello</div>
</div>
<style>
.box {
width: 200px;
height: 200px;
border: 1px solid;
display: flex;
}
.child {
background: red;
margin: auto;
}
</style>
方式三:绝对定位
https://jsbin.com/yusolipole/edit?html,css,output
<div class="box">
<div class="child">hello</div>
</div>
<style>
.box {
width: 200px;
height: 200px;
border: 1px solid;
position: relative;
}
.child {
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
background: red;
}
</style>
剩下几种在这:其他设置居中的方式
简述下CSS选择器的权重与优先规则
!important
> 行内样式 > ID选择器 > 类选择器 > 元素选择器 > 通配符选择器 > 继承 > 浏览器默认属性。
如果两组选择器都定位到同一元素,且对同一属性设置不同的样式,则需要分别计算两组选择器的权重来确定优先级。一个选择器的优先级可以说是由四个部分计算得分,比较时按位比较。
- 千位: 如果声明在
style
的属性则该位得一分。 - 百位: 选择器中包含ID选择器则该位得一分。
- 十位: 选择器中包含类选择器、属性选择器或者伪类则该位得一分。
- 个位:选择器中包含标签选择器、伪元素选择器则该位得一分。
比如 #header p.content.active 得分为 0121。 .header p.active::before 的权重是 0022。前者权重大于后者。
用css实现一个三角形
原理是让一个元素没有宽高,但是给其边框设置足够的宽度,并让其中三条边框的背景色为透明transparent。
<div class="border"></div>
<style>
.border {
width: 0;
height: 0;
border: 50px solid;
border-color: transparent transparent red;
}
</style>