css布局系列1——盒模型布局


明确基本概念

网页的布局类似于在一个大盒子中摆放各不相同的小盒子。在布局之前,首先要明确几个概念:
1. 块元素:在页面中独占一行,高度默认被内容(子元素)撑开,宽度默认为父元素的100%,也即auto(width和height的默认值不是0,而是auto)。

2. 内联(行内)元素:在页面中不独占一行,只占自身内容的大小,不能设置宽和高。

3. 文档流:网页是一个多层结构,一层摞着一层。我们通过屏幕看到的网页就是网页的最顶部,而文档流是最底下的一层。块元素和行内元素都摆放在文档流中(在不开启浮动、绝对定位和固定定位的时候)。




盒模型

下图很好的解释了盒模型:

盒模型结构

盒模型水平方向上的布局

水平方向上的布局必须要满足等式:margin-left+border-left+padding-left+width+padding-right+border-right+margin-right=父元素内容区的宽度

水平方向上的布局必须满足该等式。如果该等式不满足,称为过度约束。如果发生过度约束,等式将自动进行调整,调整规则为:
如果上述等式中属性的属性值中没有为auto的,则默认调整margin-right的值以使等式成立。
【举例】属性值中没有auto

.box1{
          width:800px;
          height:100px;
          background-color: aqua;
          }
.box2{
          width:100px;
          height:100px;
          background-color: coral;
          margin-left:100px;
          }

属性值中没有auto

如果上述等式中属性的属性值中有auto的,要分情况考虑:
【说明】以上属性值可以为auto的属性有三个:分别是margin-left,margin-right,width

1、如果有一个属性值为auto的,则默认调整值为auto的属性
【举例】margin-left为auto

.box1{
            width:800px;
            height:100px;
            background-color: aqua;
        }
        .box2{
            width:100px;
            height:100px;
            background-color: coral;
            margin-left:auto;/*margin-left调整为auto*/
            margin-right:200px;
        }
margin-left为auto

2、如果有其中一个外边距和width的属性值为auto,则width的值调整至最大,外边距的值调整为0 。
【举例】margin-left和width调整为auto

        .box1{
            width:800px;
            height:100px;
            background-color: aqua;
        }
         .box2{
            width:auto;/*宽度也调整至auto*/
            height:100px;
            background-color: coral;
            margin-left:auto;/*margin-right调整至auto*/
            margin-right:200px;
        }

width和其中一个外边距为auto

3、如果三个值都为 auto,则将width的值调整为最大,将外边距的值调整为0。
【举例】margin-left,margin-right,width都为auto

box1{
            width:800px;
            height:100px;
            background-color: aqua;
        }
        .box2{
            width:auto;/*宽度也调整至auto*/
            height:100px;
            background-color: coral;
            margin-left:auto;/*margin-right调整至auto*/
            margin-right:auto;/*margin-left调整至auto*/
        }
margin-left,margin-right,width都为auto

4、如果width的值固定,两个外边距的值为auto,则调整margin-left和margin-right同样的大小,使元素水平居中。 一般用来做元素水平居中的效果。
【举例】宽度固定,外边距为auto

        .box1{
            width:800px;
            height:100px;
            background-color: aqua;
        }
        .box2{
            width:200px;/*宽度固定*/
            height:100px;
            background-color: coral;
            margin-left:auto;/*margin-right调整至auto*/
            margin-right:auto;/*margin-left调整至auto*/
        }
宽度固定,外边距为auto




盒模型垂直方向上的布局

由于垂直方向上,父元素的高度默认被子元素撑开,所以垂直方向上的布局并不复杂。




与盒模型布局有关的三个属性

  1. overflow
    在垂直方向上布局,如果子元素的高度超过父元素的高度,子元素会溢出,overflow的作用就是用来设置父元素如何处理溢出的子元素。
    可选值:
    • visiable:默认值 子元素会从父元素中溢出,在父元素外部的位置显示。
    • hidden:溢出的内容会被裁剪,不显示。
    • scroll:生成两个滚动条,通过滚动条来显示完整内容。
    • auto:根据需要生成滚动条
      除此之外,还可以设置overflow-x,overflow-y。
  2. visibility
    visibility用来设置元素的显示状态。
    可选值:
    • visible:默认值,元素在页面中正常显示。
    • hidden:元素在页面中隐藏不显示,但是依然占据页面的位置。
  3. display
    display用来显示元素显示的类型。
    可选值:
    • inline:将元素设置为块元素。
    • block:将元素设置为块元素。
    • inline-block:行内块元素,既不会独占一行,也可以设置宽和高。【小细节】如果两个相邻的行内块元素,两个块元素中间会有一个空隙,是空格导致的,如果把两个元素之间的所有空格删掉,就不会有空隙了。尽量不使用这个值。
    • table:将元素设置为一个表格。
    • none:元素不在页面中显示。

注意:visibility:hiddendisplay:none的显著区别

display:none和visibility:hidden,都能够将元素隐藏。但是visibility:hidden隐藏的元素在页面中仍占据着位置,也就是说该元素后面的元素会给这个设置visibility:hidden的元素空出位置。而display:none隐藏的元素不会再占据着页面的位置。




使用重置样式表(reset stylesheets)清除浏览器的默认样式

通常情况下,浏览器都会自动为元素设置一些默认样式,这些默认样式会影响页面的布局。所以在编写网页的时候必须要去除浏览器的默认样式(PC端的页面)。
去除浏览器默认样式需要在页面中引入以.css结尾的重叠样式表文件。

去除默认样式的方法:这里分享两个适合学习时候用的。在工作中具体会不会用,用哪种取决于公司。

  1. reset.css 2011年版本:直接去除了浏览器的默认样式
  2. normalize.css 2018年版本:对浏览器的默认样式进行了统一
    两种方式的具体区别点这里

【注意】在引入重置样式表的时候,要在其他引入的css文件之前和<style>标签之前引入重置样式表!!!


编程小白一直在学习,一直在路上。写文章的目的纯粹为了总结个人所学,如有不妥之处,望大家批评指正,我将虚心接受。希望我的分享也能给看到这篇文章的你一点收获。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,830评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,992评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,875评论 0 331
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,837评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,734评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,091评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,550评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,217评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,368评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,298评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,350评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,027评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,623评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,706评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,940评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,349评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,936评论 2 341

推荐阅读更多精彩内容

  • 三、CSS布局 1、文档流 网页是一个多层的结构,一层摞着一层,通过CSS可以分别为每一层来设置样式。作为用户来讲...
    西北有高楼lee阅读 466评论 0 0
  • 文档流(normal flow) 网页是一个多层的结构,一层摞着一层 通过CSS可以分别为每一层来设置样式 作为用...
    Syaroing阿樱阅读 1,223评论 3 6
  • 1. 文档流(normal flow) 网页是一个多层的结构,一层摞着一层 通过CSS可以分别为每一层来设置样式 ...
    cxq要努力阅读 864评论 0 0
  • CSS 布局本质就是控制元素的位置和大小。比如这样的布局:元素宽960px,水平居中。宽960px是大小。水平居中...
    前端GoGoGo7阅读 3,645评论 0 19
  • 渐变的面目拼图要我怎么拼? 我是疲乏了还是投降了? 不是不允许自己坠落, 我没有滴水不进的保护膜。 就是害怕变得面...
    闷热当乘凉阅读 4,231评论 0 13