实现子元素在父元素内垂直水平居中

近来同事问到我css水平居中的问题,加了text-align:center;或者margin:0 auto; 都没用,我就推荐她用flex布局,于是就加了display:flex;justify-content: center;align-items:center;还是没用,因为是远程,我也不知道啥情况,就给她说了一个方法,也是flex布局,给父元素加display:flex;flex-direction:column;子元素加align-self:center;然后就生效了

通过display:flex实现CSS水平居中的原理就是display:flex;flex-direction:column;   flex-direction的区别就是row(行)和column(列)

 

项目中用到水平居中地方挺多,垂直居中,垂直水平居中。。。由此想总结一下:

常用的还是flex布局,屡试不爽

在设置这些之前,首先考虑父元素是否是块元素?


水平居中:

    1、父元素为块元素:直接设置text-align:center; 父元素为行内元素:将其设置为块元素,display:block;然后给父元素设置text-align:center;

  以下是父元素为块元素的几种情况:

    2、父子元素定宽的情况下,想要谁居中,就给其加margin:0 auto;

         不定宽时,默认子元素的宽度和父元素是一样的,将其子元素设置为行内块元素,display:inline-block;然后给父元素设置text-align:center;

    3、使用定位属性

         首先设置父元素为position:relative;  设置子元素为position:absolute;left:50%;

         定宽的情况下,给子元素设置margin-left:-子元素宽度的一半px;  或者直接设置transform: translateX(-50%);

         不定宽时,直接设置transform: translateX(-50%);

    4、利用flex布局,无关定不定宽

         给父元素设置display: flex; justify-content: center;即可


 

垂直居中:

    1、多行的行内元素:给父元素设置display:table-cell;和vertical-align: middle;即可;

  以下是父元素为块元素的几种情况:

    2、使用定位属性

         首先设置父元素为position:relative;  设置子元素为position:absolute;top:50%;

         定高的情况下,给子元素设置margin-top:-子元素高度的一半px;  或者直接设置transform: translateY(-50%);

         不定高时,直接设置transform: translateY(-50%);

    4、利用flex布局

         给父元素设置display: flex; align-items: center;即可


垂直水平居中:结合以上两种即可

posted @ 2021-04-14 16:22  梁文璇say  阅读(293)  评论(0)    收藏  举报