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

两栏、三栏布局以及垂直居中的实现方式

程序员文章站 2022-04-26 17:37:24
...

两栏、三栏布局以及垂直居中的实现方式


**1.1两栏布局:**

1、float+margin

.block_left{
            float: left;
            width: 200px;  //左边定宽
            background-color: blue;
}
.block_right{           //右边自适应
            background-color: red;
            margin-left:200px;
}

2、定位

.content{
            position: relative;
            width: 100%;
        }     
.block_left{
            position: absolute;
            width: 200px;
            background-color: blue;
}
.block_right{
            position: absolute;
            left: 200px;
            right: 0;
            background-color: red;   
}

3、弹性布局

*{
            margin: 0;
            padding: 0;
        /*这是设置默认的内外边距。因为浏览器标签自带的属性是不统一的,设置为0。为了兼容所有的浏览器!*/
}
.flex-container{
            width: 100%;
            height: 300px;
            display: flex;
}
.block_left{
            background-color: blue;
            width: 20%;      //这个可以对其进行控制,左右占比
            flex:1 0 auto;   //设置其可扩展,不可压缩,且大小自适应
}
.block_right{
            background-color: red;
            width: 80%;
            flex:1 0 auto;
}

1.2三栏布局:

1、float:left和float:right
优点:简单 缺点:中间部分最后加载,用户体验感不好

两栏、三栏布局以及垂直居中的实现方式

<style>.left{
      background-color: red;
      float: left;
      width: 100px;
}
.right{
      background-color: red;
      width: 100px;
      float: right;        }
.content{
      background-color: green;
      margin-right: 100px;
      margin-left: 95px;
}
</style>
<body>
    <!-- 必须要把类为content的div元素放在浮动元素之后,因为浮动元素不可以高于任何在源文档(html代码)之前的块元素或浮动元素,所以如果按照左中右的顺序摆放的话会出现以下情况-->
<div id="container"></div>
    <div class="left">1</div>
    <div class="right">3</div>
    <div class="content">2</div>
</body>

2、BFC:即:在第一种方法的基础上,给content部分加上overflow:hidden来使其形成BFC,利用BFC不会与浮动元素重叠的规则

3、圣杯布局

<style>
        *{
            padding: 0;
            margin: 0;
        }
        #container{
            /* 让左右两栏占据container左右两边的填充 */
            padding-left:100px;
            padding-right: 100px; 
            background-color: blue;
        }
        .left{
            background-color: red;
            float: left;
            position:relative;
            width: 100px;
            height: 100px;
            /* 这个100%是content部分相当于container的,就是指左列要越过中间列的宽度,跑到它前面去 */
            /* 浮动元素的margin值是相当于上一个相邻的浮动元素来计算的 */
            margin-left:-100%;   
            left:-100px;
        }
        .right{
            background-color: red;
            width: 100px;
            height: 100px;
            float: left;
            position:relative;
            /* 此处的margin-left是相对于其相邻元素left的 */
            margin-left: -100px;
            right: -100px;
        }
        .content{
            float: left;
            background-color:yellow;
            width:100%;
            height: 100px;
        }
    </style>
</head>
<body>
    <!-- content部分先渲染 -->
<div id="container">
    <div class="content">2aaasadsfdff</div>
    <div class="left">1</div>
    <div class="right">3</div>
</div>

4、弹性布局

#container{
      display:flex;
}
.left{
      background-color: red;
      width: 100px;
      height: 100px;
      flex:0 1 auto;
      order:-1;  //渲染是首先渲染content部分,但是布局是要将left模块放到左边,order默认为0,所以设置其为-1,就可以位置领先于其它元素
}.right{
      background-color: red;
      width: 100px;
      height: 100px;
      flex:0 1 auto;
}
.content{
      background-color:yellow;
      flex:1 0 auto;
      height: 100px;
}
</style>
<body>
    <!-- content部分先渲染 -->
<div id="container">
    <div class="content">2aaasadsfdff</div>
    <div class="left">1</div>
    <div class="right">3</div>
</div>

6、绝对定位:很简单,通过对三块区域设置绝对定位,然后通过left/right值来进行定位,就可以实现三栏布局

.left{
      background-color: red;
      width: 100px;
      height: 100px;
      position:absolute;
      left:0;}
.right{
      background-color: red;
      width: 100px;
      height: 100px;
      position: absolute;
      right: 0;
}
.content{
      background-color:yellow;
      position: absolute;
      height: 100px;
      left:100px;
      right: 100px;
}

1.3水平垂直居中:

1.3.1文字水平垂直居中

1、单行文字:
text-align:center; /*水平居中*/
line-height: 20px; /*行距设为与div高度一致*/
将行距设为和div一致,即使得每段文字都具有和div一样的高度,即:让文字利用整个div空间,有点像margin:auto

2、多行文字
text-align:center;
display:table-cell;vertical-align:middle;

还可以用弹性布局 : display:flex;justify-content:center;align-item:center

1.3.2块状水平垂直居中:

方法1:对块元素绝对定位,然后将其位置通过margin-left和margin-top负值各拉回自身的一半

  div {
		background-color:yellow;
		height:200px;
		width:200px;
		position:absolute;
		left:50%;
		top:50%;
		margin-left:-100px;
		margin-top:-100px;
       }

方法2:利用margin:auto

  div {
	    background-color:yellow;
	    height:200px;
	    width:200px;
      	position:absolute;
    	left:0;
	    top:0;
	    bottom:0;
        right:0;
    	margin:auto
       }
       
方法3:通过弹性盒(一定要保证父级元素有高度)

 html,body {
             display:flex;
             jutify-content:center;
             align-items:center;
             background-color:blue;
            }

  div {
        background-color:yellow;
	    height:200px;
	    width:200px;
	    text-align:center;
        line-height:200px;
       }