美文网首页
css常见布局解决方案

css常见布局解决方案

作者: Imrobin | 来源:发表于2018-09-09 10:19 被阅读0次

水平居中布局

margin+定宽

  1. <divclass="parent">

  2.  <divclass="child">Demo</div>

  3. </div>

  4. <style>

  5.  .child {

  6.    width:100px;

  7.    margin:0auto;

  8.  }

  9. </style>

  • 想必是个前端都见过,这定宽的水平居中,我们还可以用下面这种来实现不定宽

table+margin

  1. <divclass="parent">

  2.  <divclass="child">Demo</div>

  3. </div>

  4. <style>

  5.  .child {

  6.    display: table;

  7.    margin:0auto;

  8.  }

  9. </style>

  • display:table在表现上类似 block元素,但是宽度为内容宽。

  • 无需设置父元素样式 (支持 IE 8 及其以上版本)兼容 IE 8 一下版本需要调整为 <table>

inline-block+text-align

  1. <divclass="parent">

  2.  <divclass="child">Demo</div>

  3. </div>

  4. <style>

  5.  .child {

  6.    display:inline-block;

  7.  }

  8.  .parent {

  9.    text-align: center;

  10.  }

  11. </style>

兼容性佳(甚至可以兼容IE6和IE7)

absolute+margin-left

  1. <divclass="parent">

  2.  <divclass="child">Demo</div>

  3. </div>

  4. <style>

  5. .parent {

  6.    position: relative;

  7.  }

  8.  .child {

  9.    position: absolute;

  10.    left:50%;

  11.    width:100px;

  12.    margin-left:-50px;  /* width/2 */

  13.  }

  14. </style>

  • 宽度固定

  • 相比与使用 transform兼容性更好

absolute+transform

  1. <divclass="parent">

  2.  <divclass="child">Demo</div>

  3. </div>

  4. <style>

  5.  .parent {

  6.    position: relative;

  7.  }

  8.  .child {

  9.    position: absolute;

  10.    left:50%;

  11.    transform: translateX(-50%);

  12.  }

  13. </style>

  • 绝对定位脱离文档流,不会对后续元素的布局造成影响

  • transform为CSS3属性,有兼容性问题

flex+justify-content

  1. <divclass="parent">

  2.  <divclass="child">Demo</div>

  3. </div>

  4. <style>

  5.  .parent {

  6.    display: flex;

  7.    justify-content: center;

  8.  }

  9. </style>

  • 只需设置父节点属性,无需设置子元素

  • flex有兼容性问题

垂直居中

table-cell+vertical-align

  1. <divclass="parent">

  2.  <divclass="child">Demo</div>

  3. </div>

  4. <style>

  5.  .parent {

  6.    display: table-cell;

  7.    vertical-align: middle;

  8.  }

  9. </style>

  • 兼容性好(IE 8以下版本需要调整页面结构至 table)

absolute+transform

强大的absolute对于这种小问题当然是很简单的

  1. <divclass="parent">

  2.  <divclass="child">Demo</div>

  3. </div>

  4. <style>

  5.  .parent {

  6.    position: relative;

  7.  }

  8.  .child {

  9.    position: absolute;

  10.    top:50%;

  11.    transform: translateY(-50%);

  12.  }

  13. </style>

  • 绝对定位脱离文档流,不会对后续元素的布局造成影响,但如果绝对定位元素是唯一的元素,则父元素也会失去高度。

  • transform 为CSS3属性,有兼容性问题

同水平居中,这也可以使用margin-top实现,原理水平居中

flex+align-items

如果说 absolute强大,那 flex只是笑笑,因为他才是最强的,但有兼容性问题

  1. <divclass="parent">

  2.  <divclass="child">Demo</div>

  3. </div>

  4. <style>

  5.  .parent {

  6.    display: flex;

  7.    align-items: center;

  8.  }

  9. </style>

水平垂直居中

absolute+transform

  1. <divclass="parent">

  2.  <divclass="child">Demo</div>

  3. </div>

  4. <style>

  5.  .parent {

  6.    position: relative;

  7.  }

  8.  .child {

  9.    position: absolute;

  10.    left:50%;

  11.    top:50%;

  12.    transform: translate(-50%,-50%);

  13.  }

  14. </style>

  • 绝对定位脱离文档流,不会对后续元素的布局造成影响

  • transform为CSS3属性,有兼容性问题

inline-block+text-align+table-cell+vertical-align

  1. <divclass="parent">

  2.  <divclass="child">Demo</div>

  3. </div>

  4. <style>

  5.  .parent {

  6.    text-align: center;

  7.    display: table-cell;

  8.    vertical-align: middle;

  9.  }

  10.  .child {

  11.    display:inline-block;

  12.  }

  13. </style>

  • 兼容性好

flex+justify-content+align-items

  1. <divclass="parent">

  2.  <divclass="child">Demo</div>

  3. </div>

  4. <style>

  5.  .parent {

  6.    display: flex;

  7.    justify-content: center;/* 水平居中 */

  8.    align-items: center;/*垂直居中*/

  9.  }

  10. </style>

  • 只需设置父节点属性,无需设置子元素

  • 还是存在兼容性问题

一列定宽,一列自适应

这种布局最常见的就是中后台类型的项目,如下图:

float+margin

  1. <divclass="parent">

  2.  <divclass="left">

  3.    <p>left</p>

  4.  </div>

  5.  <divclass="right">

  6.    <p>right</p>

  7.    <p>right</p>

  8.  </div>

  9. </div>

  10. <style>

  11.  .left {

  12.    float: left;

  13.    width:100px;

  14.  }

  15.  .right {

  16.    margin-left:100px

  17.    /*间距可再加入 margin-left */

  18.  }

  19. </style>

IE6中会有3px的BUG,解决方法可以在 .left加入 margin-left:-3px当然下面的方案也可以解决这个bug:

  1. <divclass="parent">

  2.  <divclass="left">

  3.    <p>left</p>

  4.  </div>

  5.  <divclass="right-fix">

  6.    <divclass="right">

  7.      <p>right</p>

  8.      <p>right</p>

  9.    </div>

  10.  </div>

  11. </div>

  12. <style>

  13.  .left {

  14.    float: left;

  15.    width:100px;

  16.  }

  17.  .right-fix {

  18.    float: right;

  19.    width:100%;

  20.    margin-left:-100px;

  21.  }

  22.  .right {

  23.    margin-left:100px

  24.    /*间距可再加入 margin-left */

  25.  }

  26. </style>

float+overflow

  1. <divclass="parent">

  2.  <divclass="left">

  3.    <p>left</p>

  4.  </div>

  5.  <divclass="right">

  6.    <p>right</p>

  7.    <p>right</p>

  8.  </div>

  9. </div>

  10. <style>

  11.  .left {

  12.    float: left;

  13.    width:100px;

  14.  }

  15.  .right {

  16.    overflow: hidden;

  17.  }

  18. </style>

设置overflow:hidden会出发BFC模式(block formatting context)块级格式上下文。BFC是什么呢?用通俗的江就是,随便你在BFC里面干什么,外面都不会手段哦影响。此方法样式简单但不支持 IE 6

table

  1. <divclass="parent">

  2.  <divclass="left">

  3.    <p>left</p>

  4.  </div>

  5.  <divclass="right">

  6.    <p>right</p>

  7.    <p>right</p>

  8.  </div>

  9. </div>

  10. <style>

  11.  .parent {

  12.    display: table;

  13.    width:100%;

  14.    table-layout:fixed;

  15.  }

  16.  .left {

  17.    display: table-cell;

  18.    width:100px;

  19.  }

  20.  .right {

  21.    display: table-cell;

  22.    /*宽度为剩余宽度*/

  23.  }

  24. </style>

table 的显示特性为每列的单元格宽度和一定等与表格宽度。 table-layout:fixed 可加速渲染,也是设定布局优先。 table-cell 中不可以设置 margin但是可以通过 padding 来设置间距

flex

  1. <divclass="parent">

  2.  <divclass="left">

  3.    <p>left</p>

  4.  </div>

  5.  <divclass="right">

  6.    <p>right</p>

  7.    <p>right</p>

  8.  </div>

  9. </div>

  10. <style>

  11.  .parent {

  12.    display: flex;

  13.  }

  14.  .left {

  15.    width:100px;

  16.    margin-left:20px;

  17.  }

  18.  .right {

  19.    flex:1;

  20.  }

  21. </style>

  • 低版本浏览器兼容性问题

  • 性能问题,只是适合小范围布局

以上就是常见的几种布局。

相关文章

  • css

    css基础css选择器css常见样式1css常见样式2CSS布局上CSS布局下flex布局塔防小游戏flex布局青...

  • CSS布局

    CSS入门(3) CSS的常见布局 CSS常见布局使用display属性(文档流)+position属性(定位)+...

  • CSS布局

    CSS的常见布局 CSS常见布局使用display属性(文档流)+position属性(定位)+float属性(浮...

  • css常见布局解决方案

    水平居中布局 margin+定宽 想必是个前端都见过,这定宽的水平居中,我们还可以用下面这种来实现不定宽 tabl...

  • CSS布局

    HTML CSS + DIV实现整体布局必备知识利用HTML和CSS实现常见的布局 单列布局 css 实现竖直居中...

  • CSS 布局经典问题大全

    本文主要对 CSS 布局中常见的经典问题进行简单说明,并提供相关解决方案的参考链接,涉及到三栏式布局,负 marg...

  • css笔记-1/css的学习思路

    CSS 3 核心思想 响应式堆叠上下文常见布局:Float 布局、Flex 布局常见动画:Fullpage、轮播、...

  • 前端工程师之页面架构

    这是本人网易云课堂关于页面架构的笔记。本文主要包括CSS Reset的意义以及如何正确设置,常见布局的解决方案,响...

  • CSS经典布局

    CSS经典布局 本文主要对一些常见的CSS布局问题进行总结,涉及三栏布局、负margin、清除浮动、居中布局、Fl...

  • BFC原理和作用

    一、常见布局模式 在讲BFC之前,我们先来看一下常见的CSS三种布局模型: CSS中的三种布局模型:流动模型(Fl...

网友评论

      本文标题:css常见布局解决方案

      本文链接:https://www.haomeiwen.com/subject/nlmrgftx.html