如何用css实现现代布局?

01、超级小中

在没有和flex grid之前,垂直居中一直不能很优雅的实现。而现在,可以结合我们gridplace-items优雅的实现同时水平居中垂直居中

<div class="parent blue" >  <div class="box coral" contenteditable>    :)  </div>
  .ex1 .parent {    display: grid;    place-items: center;  }

02、可解构的自适应布局(The Deconstructed Pancake)

flex: 0 1 <baseWidth>

这种布局经常出现在电的网站:

  1. 在视口足够的时候,三个框固定宽度横放
  2. 在视口不够的时候(宽度在移动上面),宽度仍然固定,,但是自动解构(原谅我的中文水平),不在同一水平面上
<div class="parent white">    <div class="box green">1</div>    <div class="box green">2</div>    <div class="box green">3</div>  </div>
  .ex2 .parent {    display: flex;    flex-wrap: wrap;    justify-content: center;  }
  .ex2 .box {    flex: 1 1 150px; /*  flex-grow: 1 ,表示自动延展到最大宽度 */    flex: 0 1 150px; /*  No stretching: */    margin: 5px;  }

当我们设置flex: 1 1 150px;时候:

03、经典的侧边栏

grid-template-columns: minmax(<min>, <max>) ...

同样使用grid布局,结合可以minmax()实现弹性的的这在你要适应大屏幕的时候很有用)。minmax(<min>, <max>)就是字面意思。结合<flex>单位,非常优雅,避免了数学计算宽度等不灵活的手段(的我们设置间隙手段时候)。

  <div class="parent">    <div class="section yellow" contenteditable>    Min: 150px / Max: 25%    </div>    <div class="section purple" contenteditable>      This element takes the second grid position (1fr), meaning      it takes up the rest of the remaining space.    </div>  </div>
  .ex3 .parent {    display: grid;    grid-template-columns: minmax(150px, 25%) 1fr;  }