总结垂直居中的方法
<div class="layout-wrapper"><div class="box1"><h4>垂直居中方法</h4></div></div>.layout-wrapper{width:300px;height:300px;border: 1px solid red;
}
.box1{height:150px;width:150px;border:1px solid blue;
}
方法1:display:flex
.layout-wrapper{width:300px;height:300px;border: 1px solid red;display:flex;align-items:center;
}
.box1{height:150px;width:150px;border:1px solid blue;display:flex;align-items:center;
}
方法2:margin,transform配合
.layout-wrapper {width: 300px;height: 300px;border: 1px solid red;
}
.box1 {height: 150px;width: 150px;border: 1px solid blue;margin: 50% auto;transform: translateY(-50%);
// 这句话的意思就是向上平移自身元素的百分之50
}
方法3:父标签的相对定位+子标签的绝对定位absolute+其他
.layout-wrapper {width: 300px;height: 300px;border: 1px solid red;position: relative;
}
.box1 {height: 150px;width: 150px;border: 1px solid blue;position: absolute;left: 50%;top: 50%;/*宽高的各一半*/margin-left: -75px;margin-top: -75px;
}//第二种方法:当宽度和高度未知时使用absolute+margin:auto,
.layout-wrapper {width: 300px;height: 300px;border: 1px solid red;position: relative;
}
.box1 {height: 150px;width: 150px;border: 1px solid blue;position: absolute;left: 0;top: 0;bottom: 0;right: 0;margin: auto;
}//第三种方法absolute+transform
.layout-wrapper {width: 300px;height: 300px;border: 1px solid red;position: relative;
}
.box1 {height: 150px;width: 150px;border: 1px solid blue;position: absolute;left: 50%;top: 50%;transform: translate(-50%, -50%);
}
方法4:采用table-cell,dispaly:table-cell;会使元素表现的类似一个表格中的单元格td
,利用这个特性可以实现文字的垂直居中效果。
.layout-wrapper {width: 300px;height: 300px;border: 1px solid red;display: table-cell;text-align: center;vertical-align: middle;
}
.box1 {height: 150px;width: 150px;border: 1px solid blue;display: inline-block;
// 如果没有行内块元素设置,div不会水平居中只会垂直居中
// text-align: center应用场景:
// 父盒子设置text-align: center后,盒子里面的文字内容、行内元素、行内块元素、 都可以水平居中对齐;
// 而块级元素一般是不可以水平居中的。// 因此,块级元素想要水平居中,由两种方法:
// 一:块级元素没有设置宽高,且父盒子设置了text-align: center;
// 二:块级元素设置margin:0 auto;即可
}
方法五:inline-block+vertical-aligin
.layout-wrapper {width: 300px;height: 300px;border: 1px solid red;text-align: center;line-height: 300px;
}
.box1 {height: 150px;width: 150px;line-height: 100px;//如果不设置就会继承父元素的行高border: 1px solid blue;display: inline-block;vertical-align: middle;// vertical-align属性只对行内元素有效,对块内元素无效!
// 如果仅仅设置display为inline-block;,vertical-align也是无效的
// 那是因为将对象呈递为内联对象,但是对象的内容作为块对象呈递。旁边的内联对象会被呈递在同一行内!
// 说的通俗点,就是你设置的当前div属性还是块对象呈递,但是允许同一级别的div在同一行内,也可以设置宽度和高度!// // 解决办法:
// 1.将display属性设置为table-cell,将块元素转化为单元格,然后加上vertical-align:middle// 2.设置行高即line-height,但是要注意,需要设置父元素的行高,要与div的高度一致!否则也会有偏差的}
方法六:强大的grid
.layout-wrapper {width: 300px;height: 300px;border: 1px solid red;display: grid;
}
.box1 {height: 150px;width: 150px;border: 1px solid blue;align-self: center;justify-self: center;
}//关于grid还没有很了解,这里只做记录