博客列表 >2020-06-14——1. 居中相关的布局

2020-06-14——1. 居中相关的布局

A 枕上人如玉、
A 枕上人如玉、原创
2020年06月14日 18:29:53740浏览

1.1 水平居中布局

效果图如下:
image.png

方案一. inline-block + text-align

分析:display设置为inline-block的元素,具有文本元素的性质,其父元素可以通过设置文本对齐属性text-align来控制其在行内的对齐方式,text-align: center即为水平对齐

注意:text-align属性是具有继承性的,会导致自己元素内部的文本也是居中显示的,需要自身设置text-align覆盖

  1. <style>
  2. .wrap {
  3. width: 100%;
  4. height: 200px;
  5. background-color: aqua;
  6. text-align: center;
  7. }
  8. .content {
  9. width: 200px;
  10. height: 200px;
  11. background-color: blueviolet;
  12. display: inline-block;
  13. }
  14. </style>
  15. <body>
  16. <div class="wrap">
  17. <div class="content"></div>
  18. </div>
  19. </body>

方案二. 定位 + transform

分析:父元素开启定位(relative,absolute,fixed都可以)后,子元素设置绝对定位absolute后,left设置为50%,再使用transform: translateX(-50%)将子元素往反方向移动自身宽度的50%,便完成水平居中。

注意:父级元素是否脱离文档流,不影响子元素水平居中效果,但是transform是css3属性,存在浏览器兼容问题

  1. <style>
  2. .wrap {
  3. position: relative;
  4. width: 100%;
  5. height: 200px;
  6. background-color: aqua;
  7. }
  8. .content {
  9. position: absolute;
  10. left: 50%;
  11. transform: translateX(-50%);
  12. width: 200px;
  13. height: 200px;
  14. background-color: blueviolet;
  15. }
  16. </style>
  17. <body>
  18. <div class="wrap">
  19. <div class="content"></div>
  20. </div>
  21. </body>

方案三. display: block + margin: 0 auto

分析:这个方法只需要对子元素进行设置就可以实现水平居中,margin设置auto表示浏览器会自动分配,实现来外边距等分效果。

注意:这里子元素设置display为block或者table都是可以的,如果子元素脱离文档流(浮动,定位),会导致margin属性的值无效。

  1. <style>
  2. .wrap {
  3. width: 100%;
  4. height: 200px;
  5. background-color: aqua;
  6. }
  7. .content {
  8. width: 200px;
  9. height: 200px;
  10. background-color: blueviolet;
  11. display: table;
  12. margin: 0 auto;
  13. }
  14. </style>
  15. <body>
  16. <div class="wrap">
  17. <div class="content"></div>
  18. </div>
  19. </body>

1.2 垂直居中布局

效果图如下:

image.png

方案一. 定位 + transform

这种方案和之前水平居中布局的方案二是同样的原理,不在赘述

  1. <style>
  2. .wrap {
  3. position: relative;
  4. width: 200px;
  5. height: 600px;
  6. background-color: aqua;
  7. }
  8. .content {
  9. position: absolute;
  10. top: 50%;
  11. transform: translateY(-50%);
  12. width: 200px;
  13. height: 200px;
  14. background-color: blueviolet;
  15. }
  16. </style>
  17. <body>
  18. <div class="wrap">
  19. <div class="content"></div>
  20. </div>
  21. </body>

方案二. display: table-cell + vertical-align

分析:设置display: table-cell的元素具有td元素的行为,它的子元素布局方式类似文本元素,可以在父元素使用vertical-align: middle;实现子元素的垂直居中。

注意:vertical-align属性具有继承性,导致父元素内文本也是垂直居中显示的。

  1. <style>
  2. .wrap {
  3. display: table-cell;
  4. vertical-align: middle;
  5. width: 200px;
  6. height: 600px;
  7. background-color: aqua;
  8. }
  9. .content {
  10. width: 200px;
  11. height: 200px;
  12. background-color: blueviolet;
  13. }
  14. </style>
  15. <body>
  16. <div class="wrap">
  17. <div class="content"></div>
  18. </div>
  19. </body>

1.3 水平垂直居中布局

效果图如下:
image.png
前面分别总结了一些水平居中和垂直居中的布局方式,那么进行水平垂直居中的布局,也就没什么特别要说的了,直接上代码:

方案一.定位 + transform

  1. <style>
  2. .wrap {
  3. position: relative;
  4. width: 1200px;
  5. height: 800px;
  6. background-color: aqua;
  7. }
  8. .content {
  9. position: absolute;
  10. left: 50%;
  11. top: 50%;
  12. transform: translate(-50%, -50%);
  13. width: 200px;
  14. height: 200px;
  15. background-color: blueviolet;
  16. }
  17. </style>
  18. <body>
  19. <div class="wrap">
  20. <div class="content"></div>
  21. </div>
  22. </body>

方案二. 结合水平布局方案三,垂直布局方案二

  1. <style>
  2. .wrap {
  3. display: table-cell;
  4. vertical-align: middle;
  5. width: 1200px;
  6. height: 800px;
  7. background-color: aqua;
  8. }
  9. .content {
  10. margin: 0 auto;
  11. width: 200px;
  12. height: 200px;
  13. background-color: blueviolet;
  14. }
  15. </style>
  16. <body>
  17. <div class="wrap">
  18. <div class="content"></div>
  19. </div>
  20. </body>

1.4 使用flex进行居中布局

分析:使用flex,水平垂直居中会变得非常容易,默认情况下,align-items: center垂直居中(交叉轴排列方式),justify-content: center水平居中(主轴排列方式)注意:需要考虑浏览器兼容性问题。

  1. <style>
  2. .wrap {
  3. display: flex;
  4. align-items: center;
  5. justify-content: center;
  6. width: 1200px;
  7. height: 800px;
  8. background-color: aqua;
  9. }
  10. .content {
  11. width: 200px;
  12. height: 200px;
  13. background-color: blueviolet;
  14. }
  15. </style>
  16. <body>
  17. <div class="wrap">
  18. <div class="content"></div>
  19. </div>
  20. </body>
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议