2020-12-02 Css3/Flex 你要的水平居中&&垂直居中、等宽度自适应布局方案

一:水平&&垂直居中:

1:内联元素

display:inline/inline-block。不独占一行,同行显示,直到右边边距为止换行。
常见元素:span/img/input/button/label等。
实现要点:text-align: center;设置水平居中;设置line-height等于所在容器高度。( line-height: 200px;height: 200px; )

 #container {
            width: 600px;
            height: 200px;
            background-color: cadetblue;
            text-align: center;
            line-height: 200px;
        }
 <div id="container">
      <span>内联元素水平垂直居中</span>
 </div> 

2:块状元素:

display:block/table。默认独占一行。常见元素:div/h1/h2……/p/table/ul/ol等。
实例2.1:
实现要点:
1:定位left: 50%;top: 50%;设置元素初始位置在水平方向一半与垂直方向一半的交叉点处:
2:margin-left: -150px; margin-top: -30px;设置元素自身偏移位置为对应元素宽度/高度的一半。
弊端: 必须知道元素宽度和高度

       #box {
            width: 500px;
            height: 200px;
            background-color: cadetblue;
            position: relative;
        }
        #item {
            position: absolute;
           width: 200px;
            height: 80px;
            background-color: cornsilk;
            left: 50%;
            top: 50%;
            margin-left: -100px;
            margin-top: -40px;
        }
    <div id="box">
        <div id="item">已知元素的宽度和高度</span>
    </div>       

2-1.png

实例2.2:
实现要点:
1:通过定位, left: 50%;top: 50%;设置元素初始位置在水平方向一半与垂直方向一半的交叉点处:
2:CSS 属性transform: translate(-50%,-50%);自动计算元素向左/向上偏移元素自身宽度/高度一半。
弊端:因使用CSS属性,对于低版本浏览器兼容性不好

       #box {
            width: 500px;
            height: 200px;
            background-color: cadetblue;
            position: relative;
        }
        #item {
            position: absolute;
            width: 200px;
            height: 80px;
            background-color: cornsilk;
            left: 50%;
            top: 50%;
            transform: translate(-50%,-50%);
        }
     <div id="box">
        <div id="item">子元素的宽度和高度未知。使用css3 transform: translate控制偏移
     </div>       

trans.png

实例2.3:
实现要点:
1:通过定位, left: 50%;top: 50%;设置元素初始位置在水平方向一半与垂直方向一半的交叉点处:
2:CSS 属性transform: translate(-50%,-50%);自动计算元素向左/向上偏移元素自身宽度/高度一半。
优点:无需知道元素宽度&&高度 浏览器兼容性好

       #box {
            width: 500px;
            height: 200px;
            background-color: cadetblue;
            position: relative;
        }
        #item {
            position: absolute;
            width: 200px;
            height: 80px;
            background-color: cornsilk;
            left: 0;
            right: 0;
            top: 0;
            bottom: 0;
            margin: auto;           
        }
     <div id="box">
        <div id="item">1:元素宽度/高度未知 2:未使用CSS3属性,浏览器兼容性更佳 </div>
    </div>       

二:等宽度自适应

元素宽度随着父级容器宽度,自动计算。
实例1:
适用场景:列表排列,列数为偶数最佳,方便计算宽度百分比。
实现要点:使用百分比设置元素宽度,如需设置水平外边距时,使用百分比,其数值应该加上元素宽度。(23%+21%)4 = 100%。

       #box1 {                    
            height: 140px;
            background-color: cadetblue;
        }
        .item {           
            width: 23%;
            height: 80px;
            background-color: cornsilk;
            float: left;
            margin: 10px 1%;
            border: 2px solid #ccc;
            box-sizing: border-box;           
        }
   <div id="box1">
        <div class="item">1</div>
        <div class="item">2</div>
        <div class="item">3</div>
        <div class="item">4</div>      
    </div>
item.png

实例2:
适用场景: 列表排列,列数为偶数最佳,方便计算宽度百分比。
实现要点: 使用百分比设置元素宽度,如需设置水平外边距时,不用计算其百分比值。

        #box2{
            background-color: darkcyan;
            display: flex;           
        }
        .list{
            width: 25%;
            height: 80px;
            background-color: cornsilk;          
            margin: 20px;
            border: 2px solid #ccc;
           
        }
    <div id="box2">
        <div class="list">1</div>
        <div class="list">2</div>
        <div class="list">3</div>
        <div class="list">4</div>      
    </div>
list.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。