欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

CSS常见布局

程序员文章站 2022-06-24 14:47:07
一、单列布局 1. 水平居中 1.1 使用inline-block和text-align 1.2 使用margin:0 auto实现 1.3 使用绝对定位实现 1.4 使用flex布局实现 2. 垂直居中 2.1 使用vertical-align 2.2 使用绝对定位实现 2.3 使用flex实现 ......

一、单列布局

  1. 水平居中

    1.1 使用inline-block和text-align 

  .parent{text-align:center;}
  .child{display:inline-block;}

     1.2 使用margin:0 auto实现    

  .child{width:200px;margin:0 auto;}

     1.3 使用绝对定位实现

  .parent{position:relative;}
.child{position:absolute;left:50%;margin-left:-100px;width:200px;} /*margin-left的负值为盒子宽度的一半*/

     1.4 使用flex布局实现

  .parent{display:flex;justify-content:center;}

  2. 垂直居中

    2.1 使用vertical-align

  .parent{line-height:100px}
  .child{display:inline-block;vertical-align:middle;}

    2.2 使用绝对定位实现

  .parent{position:relative;}
  .child{position:absolute;top:50%;margin-top:-100px;height:200px;}  /*margin-top的负值为盒子高度的一半*/

    2.3 使用flex实现

  .parent{display:flex;align-items:center;}

  3. 水平垂直居中

    3.1 使用inline-block,text-align和vertical-align

  .parent{line-height:100px;text-align:center;}
  .child{display:inline-block;vertical-align:middle}

    3.2 使用绝对定位实现

  .parent{position:relative;}
  .child{position:absolute;top:50%;left:50%;margin-top:-100px;margin-left:-100px;width:200px;height:200px;}  /*margin-top的负值为盒子高度的一半,margin-left的负值为盒子宽度的一半*/

    3.3 使用flex实现

  .parent{display:flex;justify-content:center;align-items:center;}

二、多列布局

  1. 圣杯布局三列布局,左右定宽,中间宽度自适应;中间栏要在浏览器中优先展示渲染;允许任意列的高度最高。

html:

 <div class="header">header</div>
 <div class="container">
    <div class="main">main</div>    <!--中间栏优先展示渲染,放在前面-->
    <div class="left">left</div>
    <div class="right">right</div>
 </div>
 <div class="footer">footer</div>

    (1) 基础样式

*{margin:0;padding:0}
body{min-width:800px;} .header,.footer{ border: 1px solid #333; background: #aaa; text-align: center; } .container{ border:2px solid yellow; } .left{ width:200px; background:skyblue;
} .right{ width:200px; background:pink; } .main{ width:100%; background:tomato; }
.main,.left,.right{
   min-height:100px;
 }

 CSS常见布局  

    (2) 三列均设置左浮动 

.left,.main,.right{
    float:left;
}

CSS常见布局

    (3) 清除浮动

.container{       
   zoom:1;
}
.container:after{
   content:"";
   display:block;
   clear:both;
}

CSS常见布局

    (4) 让left和right上移

.left{
     margin-left:-100%;   /*利用margin-left的负值,将left列移动到上一行的开头*/
     width:200px;
     background:skyblue;
}
.right{
     margin-left:-200px;  /*利用margin-left的负值,将right列移动到上一行的末尾*/
     width:200px;
     background:pink;
}

CSS常见布局

left列和right列已经上移,但是可以看见,此时main已被遮盖。

    (5) 解决遮盖问题

    给.containter左右内边距,大小分别为left列的宽和right列的宽。

.container{
   padding:0px 200px;
   border:2px solid yellow;
   zoom:1;
}

CSS常见布局

    然后利用相对定位,将left列和right列定位到两侧空白处。

.left{
    position:relative;
    left:-200px;
    margin-left:-100%; 
    width:200px;
    background:skyblue;
}
.right{
    position:relative;
    right:-200px;
    margin-left:-200px;
    width:200px;
    background:pink;
}

CSS常见布局

   遮挡问题已解决,main可见啦。

   至此,圣杯布局已完成,中间列宽度自适应。

   2. 双飞翼布局:三列布局,左右定宽,中间宽度自适应;中间栏要在浏览器中优先展示渲染;允许任意列的高度最高。

   双飞翼布局和圣杯布局基本一样,不同之处在于解决遮盖问题的方式不同

   双飞翼布局在main元素中添加了一个子元素content,并给这个子元素设置margin-left和margin-right,以至于content里的内容不被遮盖。

   html:

<div class="header">header</div>
<div class="container">
   <div class="main">
      <div class="content">content</div>
   </div>
   <div class="left">left</div>
   <div class="right">right</div>
</div>
<div class="footer">footer</div>

  css:

.content{margin:0 200px}

CSS常见布局

   双飞翼布局也完成了,个人感觉比圣杯布局更简洁;完整代码就不上了,很简单的,不熟悉的可以动手试试哦。