从零学习前端开发 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;
  }