CSS垂直和水平居中可变宽度和高度(最全9种方式)
垂直居中是CSS中的常见问题,在面试中经常提到。那么,今天我们就来谈谈9种居中的方法。
一般有flex、transformation、absolute等。还有 CSS3 网格布局。还有伪元素方法。是的,你没有看错,::after和::before也可以实现居中。
9 种显示方式
1。灵活
每个人的第一反应可能都是灵活。因为写法简单而且相当直观,而且不存在兼容性问题。是以手机为主的首选。
<div class="wrapper flex-center">
<p>horizontal and vertical</p>
</div>
复制代码.wrapper {
width: 300px;
height: 300px;
border: 1px solid #ccc;
}
.flex-center {
display: flex;
justify-content: center;
align-items: center;
}
复制代码使用2个主要属性: 需要注意的是, 这是 flex 方法的变体。父元素设置为flex,子元素设置为 此组合通常用于使图像居中。 当然,你也可以将父元素包装的相对位置移动到img子元素上,改变绝对位置。效果一样。 使用表格单元格居中效果进行显示。和flex一样,应该写在父元素中。 5。 Absolute + 四个方向相同的值 使用绝对位置布局,设置 此方法一般用于弹出层,必须设置弹出层的宽度和高度。 该方法可以改变文本显示方向,例如使文本垂直显示。 兼容性方面还存在一些小缺陷,但是包括手机在内的大部分浏览器都已经支持书写模式下的书写了。 就像表格一样,网格布局允许我们按行或列对齐元素。然而,就布局而言,网格与表格一样简单甚至更简单。 但是在兼容性方面就没有那么灵活了,尤其是IE浏览器,只支持IE10及以上版本。 伪元素也可以用来实现居中吗?感觉有点神奇,看下面的例子: 水平方向很容易理解。垂直方向上,可以理解为::将img向下拉到中心后。 另一个是与 今天我们一共介绍9种居中方法。像flex、absolute、grid这样的常用方法往往可以帮助解决工作中的布局问题。而和write-mode、::after、::before一样,这个神奇的功能似乎帮我们打开了CSS这片神奇的大陆,让人着迷,忍不住想要去探索更多。 作者:Micherwajustify-content和align-item,两者都设置为中心。 flex-center必须挂在父元素上,这样只有一个子元素才能居中。 2。 flex + margin
margin: auto;。可以理解为child的元素被周围的边缘“压”在中间。 <div class="wrapper">
<p>horizontal and vertical</p>
</div>
复制代码.wrapper {
width: 300px;
height: 300px;
border: 1px solid #ccc;
display: flex;
}
.wrapper > p {
margin: auto;
}
复制代码3。变换 + 绝对
<div class="wrapper">
<img >
</div>
复制代码.wrapper {
width: 300px;
height: 300px;
border: 1px solid #ccc;
position: relative;
}
.wrapper > img {
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
}
复制代码4。 table-cell
<div class="wrapper">
<p>horizontal and vertical</p>
</div>
复制代码.wrapper {
width: 300px;
height: 300px;
border: 1px solid #ccc;
display: table-cell;
text-align: center;
vertical-align: middle;
}
复制代码margin:auto;,将上、左、右、下值设置为平等的。 (不一定全为 0)。 <div class="wrapper">
<p>horizontal and vertical</p>
</div>
复制代码.wrapper {
width: 300px;
height: 300px;
border: 1px solid #ccc;
position: relative;
}
.wrapper > p {
width: 170px;
height: 20px;
margin: auto;
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
}
复制代码6。 write-mode
<div class="wrapper">
<div class="wrapper-inner">
<p>horizontal and vertical</p>
</div>
</div>
复制代码.wrapper {
width: 300px;
height: 300px;
border: 1px solid #ccc;
writing-mode: vertical-lr;
text-align: center;
}
.wrapper > .wrapper-inner {
writing-mode: horizontal-tb;
display: inline-block;
text-align: center;
width: 100%;
}
.wrapper > .wrapper-inner > p {
display: inline-block;
margin: auto;
text-align: left;
}
复制代码7、网格
<div class="wrapper">
<p>horizontal and vertical</p>
</div>
复制代码.wrapper {
width: 300px;
height: 300px;
border: 1px solid #ccc;
display: grid;
}
.wrapper > p {
align-self: center;
justify-self: center;
}
复制代码8。 ::after
<div class="wrapper">
<img >
</div>
复制代码.wrapper {
width: 300px;
height: 300px;
border: 1px solid #ccc;
text-align: center;
}
.wrapper::after {
content: '';
display: inline-block;
vertical-align: middle;
height: 100%;
}
.wrapper > img {
vertical-align: middle;
}
复制代码9,::before
字体大小:0;配合使用的奇迹。秘密<div class="wrapper">
<img >
</div>
复制代码.wrapper {
width: 300px;
height: 300px;
border: 1px solid #ccc;
text-align: center;
font-size: 0;
}
.wrapper::before {
display: inline-block;
vertical-align: middle;
font-size: 14px;
content: '';
height: 100%;
}
.wrapper > img {
vertical-align: middle;
font-size: 14px;
}
复制代码font-size: 0;是为了消除标签之间的间隙。另外,由于伪元素适应了最基本的CSS编写方式,因此不存在兼容性风险。 总结
链接:https://juejin.im/post/5c94961df265da60e65b9961
来源:掘金
版权归作者所有。商业转载请联系作者获取授权。非商业转载请注明出处。
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
code前端网