从零学习前端开发 2017-12-12
自己的地址
github.com/CodingMeUp/…
.left { float: left; } .right { width: 100% }
.left { float: left; } .right { width: calc(100vw-200px); }-【分析】
.contain { display: flex } .right { flex: 1 }
.contain{ background: pink; float: left; width: 100%; } .left{ height: 200px; width: 200px; float: left; margin-left: -100%; background: red; } .right { background: blue; height: 300px; margin-left: 200px; }
<div class="contain"> <div class="right"> rrr </div> </div> <div class="left">lll </div>
【分析】
<!DOCTYPE> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <link rel="stylesheet" href="test.css" type="text/css"> </head> <style media="screen"> .one { float: left; height: 100px; width: 300px; background-color: blue; } .two { overflow: auto; height: 200px; background-color: red; } </style> <body> <div class="one"></div> <div class="two">第二种方法</div> </body> </html>
position(绝对定位法) center的div需要放在最后面
绝对定位法原理是将左右两边使用absolute定位,因为绝对定位使其脱离文档流,后面的center会自然流动到他们上面,然后使用margin属性,留出左右元素的宽度,既可以使中间元素自适应屏幕宽度。
<div class='left'>left</div> <div class='right'>right</div> <div class='center'>center</div> .left,.right{ position: absolute; width: 200px; height: 200px; background-color: #df8793; top:0; } .left{ left:0px; } .right{ right: 0px; } .center{ margin: 0 210px; overflow: hidden; background-color: yellow; height: 200px; }
float:自身浮动法 center的div需要放在最后面
自身浮动法的原理就是使用对左右使用分别使用float:left和float:right,float使左右两个元素脱离文档流,中间元素正常在正常文档流中,使用margin指定左右外边距对其进行一个定位。
<div class='left'>left</div> <div class='right'>right</div> <div class='center'>center</div> .left,.right{ width: 200px; height: 200px; background-color: #df8793; } .left{ float: left; } .right{ float: right; } .center{ margin: 0 210px; overflow: hidden; background-color: yellow; height: 200px; }
圣杯布局
圣杯布局的原理是margin负值法。使用圣杯布局首先需要在center元素外部包含一个div,包含div需要设置float属性使其形成一个BFC,并设置宽度,并且这个宽度要和left块的margin负值进行配合
<div class='wrap'> <div class='center'>center</div> </div> <div class='left'>left</div> <div class='right'>right</div> .wrap{ width: 100%; // .left margin-left 同步 float: left; height: 200px; background-color: #238978; } .center{ margin: 0 210px; } .left{ float: left; margin-left: -100%; // .wrap width同步 width: 200px; height: 200px; background-color: #eee; } .right{ float: left; margin-left: -200px; width: 200px; height: 200px; background-color: #eee; }
<div class='wrap'> <div class='left'>left</div> <div class='center'>center</div> <div class='right'>right</div> </div> .wrap{ display: flex; } .center{ flex:1; margin: 0 10px; background-color: pink; } .left{ width: 200px; height: 200px; background-color: #eee; } .right{ width: 200px; height: 200px; background-color: #eee; }
1) 固定高度
<div class="container">Hello World!</div>
.container { position: absolute; left: 50%; top: 50%; margin-left: -150px; margin-top: -150px; width: 300px; height: 300px; border: 1px solid red; } // 支持calc .container { position: absolute; left: calc(50% - 150px); top: calc(50% - 150px); width: 300px; height: 300px; border: 1px solid red; }
<div class="space"></div> <div class="container"> <div class="inner"> hello world! </div> </div>
.space { float: left; height: 50%; margin-top: -150px; } .container { clear: both; height: 300px; border: 1px solid red; position: relative; }
2) 高度自适应
<div class="container">Hello World!</div> .container { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); // 自身宽度和高度的一半 border: 1px solid red; } 优点:无需定高度。高度随内容自适应。 缺点:元素脱离文档流。如果需要居中的元素已经在高度上超过了视口,那它的顶部会被视口裁切掉。
摆脱maigin 百分比靠父元素宽度的问题 50%加上translate负值并不能实现垂直居中布局。 改用
vh来做
<div class="container">Hello World!</div> .container { width: 300px; margin: 50vh auto 0; transform: translateY(-50%); border: 1px solid red; }
<div class="container"> <div class="inner"> <p>hello world!</p> </div> </div>
.container { display: flex; height: 100vh; } .inner { margin: auto; }当我们使父元素display: flex时,margin: auto不仅可以水平居中,也能够实现垂直居中。这是因为auto外边距会平分水平或垂直方向上的额外空间。
.container { display: flex; justify-content: center; align-items: center; height: 100vh; }
模拟表格 父display:table 子display: table-cell vertical-align: middle
<div class="container"> <div class="inner"> hello world! </div> </div>
.container { display: table; /* 让div以表格的形式渲染 */ width: 100%; border: 1px solid red; } .inner { display: table-cell; /* 让子元素以表格的单元格形式渲染 */ text-align: center; vertical-align: middle; }