当前位置:   article > 正文

CSS常见面试题--水平垂直居中_前端面试题 水平垂直居中有几种方法

前端面试题 水平垂直居中有几种方法

面试题:水平垂直居中你知道几种方式?各有什么特点?

方法一:绝对定位+负值margin法

要点:

1、已知子元素的宽高 

2、子元素绝对定位(top:50%,left:50%) 

3、子元素负值margin(margin-left,margin-top的负值各为子元素宽高的50%)

  1. <!-- 一、绝对定位+负值margin:已知父元素及子元素的宽高 -->
  2. <section id="absolute-minus-margin">
  3. <style media="screen">
  4. #absolute-minus-margin .father{
  5. width: 500px;
  6. height: 500px;
  7. position: relative;
  8. border:1px solid red;
  9. }
  10. #absolute-minus-margin .father .child{
  11. width: 200px;
  12. height: 200px;
  13. position: absolute;
  14. left: 50%;
  15. top: 50%;
  16. margin-top: -100px;
  17. margin-left: -100px;
  18. border: 1px solid red;
  19. }
  20. </style>
  21. <div class="father">
  22. <div class="child"></div>
  23. </div>
  24. </section>

方法二:绝对定位+margin:auto

要点:

1、已知子元素宽高

2、子元素绝对定位(top:0,left:0,right:0,bottom:0)

3、子元素margin:auto

  1. <section id="absolute-topleftrightbottom-margin">
  2. <style>
  3. #absolute-topleftrightbottom-margin .father{
  4. width: 500px;
  5. height: 500px;
  6. position: relative;
  7. border:1px solid #000;
  8. }
  9. #absolute-topleftrightbottom-margin .father .child{
  10. position: absolute;
  11. width: 200px;
  12. height: 200px;
  13. background-color: pink;
  14. top:0;
  15. left:0;
  16. right: 0;
  17. bottom: 0;
  18. margin: auto;
  19. }
  20. </style>
  21. <div class="father">
  22. <div class="child">绝对定位+marigin:auto</div>
  23. </div>
  24. </section>

方法三:绝对定位+transform

要点

1、子元素的宽高可知可不知

2、子元素绝对定位(top:50%,left:50%)

3、子元素transform:translate(-50%,-50%)

  1. <!-- 2、绝对定位+transform:子元素宽高可知可不知 -->
  2. <section id="absolute-transform">
  3. <style>
  4. #absolute-transform .father{
  5. width: 500px;
  6. height: 500px;
  7. position: relative;
  8. border:1px solid #000;
  9. }
  10. #absolute-transform .father .child{
  11. /* width: 200px;
  12. height: 200px; */
  13. border:1px solid #000;
  14. position: absolute;
  15. top: 50%;
  16. left: 50%;
  17. transform: translate(-50%,-50%);
  18. }
  19. </style>
  20. <div class="father">
  21. <div class="child">绝对定位+transform</div>
  22. </div>
  23. </section>

方法四:flex

要点

1、子元素的宽高可知可不知

2、父元素:display:flex;align-items:center;justify-content:center

  1. <section id="flex">
  2. <style>
  3. #flex .father{
  4. width: 500px;
  5. height: 500px;
  6. display: flex;
  7. align-items: center;
  8. justify-content: center;
  9. border:1px solid #000;
  10. }
  11. #flex .father .child{
  12. background-color: pink;
  13. }
  14. </style>
  15. <div class="father">
  16. <div class="child">flex:我是需要居中对齐的元素</div>
  17. </div>
  18. </section>

方法五:flex+margin:auto

要点

1、子元素的宽高可知可不知

2、父元素:display:flex

3、子元素:margin:auto

  1. <!-- 5、flex变异布局:子元素宽高可知可不知 -->
  2. <section id="flex">
  3. <style>
  4. #flex .father{
  5. width: 500px;
  6. height: 500px;
  7. display: flex;
  8. border:1px solid #000;
  9. }
  10. #flex .father .child{
  11. margin: auto;
  12. background-color: pink;
  13. }
  14. </style>
  15. <div class="father">
  16. <div class="child">flex变异布局:我是需要居中对齐的元素</div>
  17. </div>
  18. </section>

方法六:table-cell

要点

1、子元素的宽高可知可不知

2、父元素:display:table-cell;text-align:center;vertical-align:middle

3、子元素:display:inline-block

  1. <!-- 6、table-cell: 子元素宽高可知可不知-->
  2. <section id="table-cell">
  3. <style>
  4. #table-cell .father{
  5. width: 500px;
  6. height: 500px;
  7. border:1px solid #000;
  8. display: table-cell;
  9. text-align: center;
  10. vertical-align: middle;
  11. }
  12. #table-cell .child{
  13. background-color: pink;
  14. display: inline-block; /*不知道宽高的时候就这么写*/
  15. /* margin: auto; 已知宽高的时候可以这么写 */
  16. }
  17. </style>
  18. <div class="father">
  19. <div class="child">table-cell: 子元素宽高可知可不知</div>
  20. </div>
  21. </section>

方法七:grid+margin:auto

要点

1、子元素的宽高可知可不知

2、父元素:display:grid

3、子元素:margin:auto

  1. <!-- 7、grid+margin:auto:子元素宽高可知可不知 -->
  2. <section id="grid">
  3. <style>
  4. #grid .father{
  5. display: grid;
  6. width: 500px;
  7. height: 500px;
  8. border:1px solid #000;
  9. }
  10. #grid .child{
  11. background-color: pink;
  12. /* width: 200px;
  13. height: 200px; */
  14. margin: auto;
  15. }
  16. </style>
  17. <div class="father">
  18. <div class="child">grid+margin:auto:子元素宽高可知可不知</div>
  19. </div>
  20. </section>

总结:内联元素和块级元素的水平居中方式

内联元素居中布局方式

①水平居中

  • 行内元素可设置text-align:center
  • flex布局设置父元素:display:flex;justify-content:center

②垂直居中

  • 单行文本父元素确定高度:height == line-height
  • 多行文本父元素确定高度:display:table-cell;vertical-align:middle

块级元素居中布局方式

①水平居中

定宽:margin:0 auto

flex布局设置父元素:display:flex;justify-content:center

绝对定位+负值margin

绝对定位+transform:translateX(-50%)

table-cell布局设置父元素:display:table-cell;text-align:center

②垂直居中

flex布局设置父元素:display:flex;align:center

display布局设置父元素:display:tabel-cell;vertical-align:middle

position:absolute+负值margin

position:absolute+transform:translateY(-50%)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/671881
推荐阅读
相关标签
  

闽ICP备14008679号