博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
左侧固定,右侧自适应的布局方式理解margin负值理论
阅读量:6979 次
发布时间:2019-06-27

本文共 4335 字,大约阅读时间需要 14 分钟。

一.浮动布局

1.先让固定宽度的div浮动!使其脱离文档流。

2.margin-left的值等于固定div的宽度相等。

.aside{        float: left;        width: 200px;        background-color: red;    }    .content{        margin-left: 200px;        background-color: blue;    }    
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Labore provident dolor in voluptatum tempore non, placeat obcaecati totam ut delectus libero excepturi distinctio asperiores odit nobis soluta, esse aspernatur beatae.
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Labore provident dolor in voluptatum tempore non, placeat obcaecati totam ut delectus libero excepturi distinctio asperiores odit nobis soluta, esse aspernatur beatae.

二.margin的负值(3个div)

是固定宽度的div脱离文档流。

利用marin负值可以使得,后面的div可以与前面的div 保持同行显示。
给包裹内容的div加margin-left 可以使得与左边的文字不重叠

解释:margin负值理论

a.当给一个元素设置margin 负值(top/left),该元素将在该方向上产生位移。
b.当给一个元素设置margin负值(bottom/right),这个元素并不会像你所预想的产生位移,而是将任何紧随其后的元素“拉”过来,覆盖在自己的上边。
c.负边距在普通文档流中的作用和效果(margin-bottom负值,减少高度)。
d.左和右的负边距对元素宽度的影响(margin-right 负值 没有设置宽度的情况,增加宽度)。
e.负边距对浮动元素的影响(margin-left负值:覆盖)。

.aside{    float: left;    margin-right: -200px;    width: 200px;    background-color: red;}.content{    float: right;}.content .inner{    margin-left: 200px;    background-color: blue;}
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Labore provident dolor in voluptatum tempore non, placeat obcaecati totam ut delectus libero excepturi distinctio asperiores odit nobis soluta, esse aspernatur beatae.
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Mollitia labore facere delectus quaerat expedita, tenetur recusandae tempora eos natus suscipit voluptatum necessitatibus soluta voluptates modi ullam. Ab minima similique, illum!

再看一个负值的实例:ul下一排紧密排放多个li

  • 子元素1
  • 子元素2
  • 子元素3
  • 子元素4
  • 子元素5
  • 子元素6
  • 子元素7
  • 子元素8

三.calc()计算属性

  • 注意:使用calc计算属性的时候 运算符(- +等等)两边必须有空格
  • 注意两个div必须一左一右浮动。
  • calc的宽度必须要减去的宽度要与固定宽度保持一致。
.aside{  float: left;  width: 200px;}.content{  float: right;  width:calc(100% - 200px);}
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Labore provident dolor in voluptatum tempore non, placeat obcaecati totam ut delectus libero excepturi distinctio asperiores odit nobis soluta, esse aspernatur beatae.
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Labore provident dolor in voluptatum tempore non, placeat obcaecati totam ut delectus libero excepturi distinctio asperiores odit nobis soluta, esse aspernatur beatae.

四.flex布局

  • 需要给父级div设置display: flex属性。
  • 固定宽度的div设置flex: 0 0 200px即可。
  • 内容区域的div直接写出flex: 1即可。
body{    display: flex;}.aside{    flex: 0 0 200px;    background-color: red;}.content{    flex: 1;    background-color:blue;}
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Fugiat magnam nihil nostrum, similique dolor deserunt voluptatem pariatur alias, ipsum, error quos quo accusantium. Deleniti neque, pariatur voluptates maxime quam perferendis!
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Consectetur tempora sequi minima, placeat esse nulla dolor dolores praesentium illo, distinctio fugiat eligendi debitis animi ut impedit, magni vitae officiis, architecto.

简单解释下flex: 0 0 200px的用处,flex属性是flex-grow, flex-shrink 和 flex-basis的简写,默认值为0 1 auto。后两个属性可选。

.item {
flex: none | [ <'flex-grow'> <'flex-shrink'>? || <'flex-basis'> ]}

该属性有两个快捷值:auto (1 1 auto) 和 none (0 0 auto)。

建议优先使用这个属性,而不是单独写三个分离的属性,因为浏览器会推算相关值。

flex-grow属性

flex-grow属性定义项目的放大比例,默认为0,即如果存在剩余空间,也不放大。

.item {
flex-grow:
; /* default 0 */}

如果所有项目的flex-grow属性都为1,则它们将等分剩余空间(如果有的话)。如果一个项目的flex-grow属性为2,其他项目都为1,则前者占据的剩余空间将比其他项多一倍。

flex-shrink属性

flex-shrink属性定义了项目的缩小比例,默认为1,即如果空间不足,该项目将缩小。

.item {
flex-shrink:
; /* default 1 */}

如果所有项目的flex-shrink属性都为1,当空间不足时,都将等比例缩小。如果一个项目的flex-shrink属性为0,其他项目都为1,则空间不足时,前者不缩小。

负值对该属性无效。

flex-basis属性

flex-basis属性定义了在分配多余空间之前,项目占据的主轴空间(main size)。浏览器根据这个属性,计算主轴是否有多余空间。它的默认值为auto,即项目的本来大小。

.item {
flex-basis:
| auto; /* default auto */}

它可以设为跟width或height属性一样的值(比如350px),则项目将占据固定空间。

那么现在应该明白flex: 0 0 200px的用处了吧。

参考:阮一峰老师:

转载地址:http://cvupl.baihongyu.com/

你可能感兴趣的文章
创业思维 - Qunar的故事
查看>>
STM32中GPIO的8种工作模式
查看>>
一分钟了解阿里云产品:先知计划
查看>>
Centos 7环境下源码安装PostgreSQL数据库
查看>>
推荐一款 Flutter Push 推送功能插件
查看>>
数据结构(队列实现篇)
查看>>
iframe 数据传递
查看>>
ionic app 开发和生产环境的配置
查看>>
javascript数据结构与算法-队列
查看>>
如何定时备份数据库并上传七牛云
查看>>
如何选取合适的前端动效方案?
查看>>
js的执行机制
查看>>
[swift 进阶]读书笔记-第十一章:互用性 C11P1 实践:封装 CommonMark
查看>>
我的友情链接
查看>>
TypeScript 从听说到入门(上篇)
查看>>
JavaScript 闭包
查看>>
redis(4)
查看>>
koa+mongoose基础入门
查看>>
vue下实现textarea类似密码框的功能之探索input输入框keyup,keydown,input事件的触发顺序...
查看>>
python数据池连接PG
查看>>