标准盒模型、怪异盒模型

外边距叠加

当两个或者争夺垂直外边距相遇时,他们将形成一个外边距,这个外边距的高度等于两个发生叠加的外边距的高度中的较大者。

  1. 当一个元素出现在另一个元素上面时,第一个元素的底外边距与第二个元素的顶外边距发生叠加。
  1. 当一个元素包含在另一个元素时(假设没有内边距或者边框将外边距分隔开),他们的顶和/或底外边距也会发生叠加。
  1. 外边距可以与本身发生叠加。假设有一个空元素,它有外边距,但是没有边框或内边距,这种情况下,顶外边距与底外边距就碰在一起,发生叠加。
  1. 上述情况,如果这个外边距碰到另一个元素的外边距,还会发生叠加。

外边距叠加实际上有重要意义,例如下图:由几个段落组成的典型文本页面,第一个段落上面的空间等于段落的顶外边距,如果没有外边距叠加,后续的所有段落之间的空间将是相邻顶外边距和底外边距的和,则段落之间的空间是页面顶部的两倍。若发生外边距叠加,段落之间的顶外边距和底外边距就叠加在一起,这样各处的距离就一致了。

只有普通文档流中块框的垂直外边距才会发生外边距叠加。行内框、浮动框或者绝对定位框之间的外边距不会叠加。

定位

1. 可视化格式模型

  • p、h1或div等元素被称为块级元素,意味着这些元素显示为一块内容,即“块框”。
  • strong和span等元素被称为行内元素,因为它们的内容显示在行中,即“行内框”。
  • 可使用display属性改变生成的框的类型:
    display=none:让生成的元素根本没有框,这样,这个框及其所有内容就不再显示,不占用文档中的空间。
    display=block:让行内元素表现的像块级元素一样,元素占据整行空间,可以定义元素的尺寸。
    display=inline:一般是不会定义元素的尺寸的,它是行内流动性的布局,其尺寸由Font-size决定。
    display=inline-block:让元素像行内元素一样水平的依次排列,但是框的内容仍然符合块级框的行为,即能显式的设置宽度、高度、垂直外边距、内边距,既有行内流动又有尺寸。
  • 块级框:从上到下一个接一个地垂直排列,框之间的垂直距离由框的垂直外边距计算出来。
  • 行内框:在一行中水平排列。可使用水平内边距、边框、外边距来调整它们的水平间距,但垂直内边距、边框、外边距都不影响行内框的高度,在行内框上设置显式的高度或者宽度也是没有用的。
  • 行框:由一行形成的水平框成为行框,行框的高度总是足以容纳它包含的所有行内框,行框的高度由行高line-height设置。
    修改行内框尺寸的唯一办法是修改行高(修改高度)或者水平边框、内边距、外边距(修改宽度)。
  • 匿名块框:大多数框都是由显式定义形成的,但有一种情况,即使没有显式定义也会创建块级元素,即:将一些文本(代码中的some text)添加到一个块级元素的开头时,即使没有把这些文本定义为块级元素,它也会被当成块级元素对待。
<div>
some text
<p>Some more text</p>
</div>
  • CSS有3种基本的定位机制:普通流、浮动、绝对定位。除非专门指定,否则所有框都在普通流中定位,普通流中元素框的位置由元素在HTML中的位置决定。

2. 相对定位

如果对一个元素进行相对定位,它将出现在它所在的位置上,然后可以通过设置垂直或水平位置,让这个元素“相对于”它的起点移动。如下:

#myBox{
position:relative;
left:20px;
right:20px;
}

无论是否移动,元素仍然占据原来的空间,因此,移动的元素会导致它覆盖其他框。
相对定位被看作普通流定位模型的一部分,因为元素的位置是相对于它在普通流中的位置的

3. 绝对定位

绝对定位使元素的位置与文档流无关,因此不占据空间,不影响普通流中的框,普通文档流中其他元素的布局就像绝对定位的元素不存在时一样,所以他可以覆盖页面上的其他元素,可以通过设置z-index属性来控制这些框的叠放次序,z-index值越高,框在栈中的位置就越高。绝对定位的元素的位置是相对于距离它最近的已定位的祖先元素(例如:position=relative等,position=static是不可以的)确定的,若没有已定位的祖先元素,那它就相对于初始包含块的。绝对定位的框可以从它的包含块向上、下、左、右移动。

固定定位

固定定位是绝对定位的一种,差异在于固定元素的包含块是视口,所以创建的是出现在窗口中相同位置的浮动元素。

4. 浮动

浮动的框可以左右移动,直到它的外边缘碰到包含框或另一个浮动框的边缘,浮动框不在文档的普通流中,所以文档的普通流中的块框表现得像浮动框不存在一样。实际上并不完全如此,如果浮动的元素后面有一个文档流中的元素,那么这个元素的框会表现的像浮动根本不存在一样,但框的文本内容会受到浮动元素的影响,会移动以留出空间,因此行框围绕浮动框,即浮动框使文本可以围绕图像。

清理浮动:clear属性

要阻止行框围绕在浮动框的外边,需要对包含这些行框的元素应用clear属性,值可以是left、right、both、none,表示框的哪边不应该挨着浮动框,清理元素时,浏览器在元素顶上添加足够的外边距,使元素的顶边缘垂直下降到浮动框下面。

例子:有一张图片,希望让它浮动到一个文本块的左边,然后让这个图片和文本包含在另一个具有背景颜色和边框的元素中。

<div class="new">
<img src=""/>
<p>Some text </p>
</div>
.new{
background-color:gray;
border:solid 1px black;
}
.news img{
float:left;
}
.new p{
float:right;
}

结果如下:因为浮动元素脱离文档流,所以div.new不占据空间

如何让包围元素在视觉上包围浮动元素?

  1. 在这个元素的某个地方应用clear:因为在例子中没有现有的元素可以清理,所以需要在最后一个段落下面添加一个空元素并且清理它。

    <div class="new">
    <img src="" />
    <p>Some text </p>
    <br class="clear" />
    </div>
    .new{
    background-color:gray;
    border:solid 1px black;
    }
    .news img{
    float:left;
    }
    .new p{
    float:right;
    }
    .clear{
    clear:both;
    }

    结果如下:

  1. 还可以不对浮动的文本和图像进行清理,而是选择浮动div容器

    <div class="new">
    <img src="" />
    <p>Some text </p>
    </div>
    .new{
    background-color:gray;
    border:solid 1px black;
    float:left;
    }
    .news img{
    float:left;
    }
    .new p{
    float:right;
    }

    这种做法产生的问题:下一个元素会受到这个浮动元素的影响,为解决这个问题,有人选择浮动布局中的所有东西,然后使用合适的元素对这些浮动元素进行清理,这有助于减少或消除不必要的标记,但是浮动也会变得复杂,因此,许多人还是喜欢添加少量的额外标记。

  3.  清理浮动:overflow属性
overflow:hidden;

ch3 盒模型、定位的更多相关文章

  1. 2019.4.4 盒模型&定位&浮动

    盒模型 盒模型 除了图片表单元素之外,基本所有标签都可以看做一个盒子 盒模型的要素 父子关系之间用padding 兄弟关系之间用margin margin padding border 后面跟的值的顺 ...

  2. CSS盒模型和定位的类型

    此文根据Steven Bradley的<How Well Do You Understand CSS Positioning?>所译,整个译文带有我自己的理解与思想,如果译得不好或不对之处 ...

  3. 【css笔记】css中的盒模型和三种定位机制(固定定位,绝对定位,浮动)

    html页面上的元素都可以看成是框组成的,框通过三种定位机制排列在一起就过程了我们看到的页面.而框就是盒模型. 盒模型 1.页面上的每个元素可以看成一个矩形框,每个框由元素的内容,内边距,边框和外边距 ...

  4. 什么是CSS盒模型及利用CSS对HTML元素进行定位的实现(含h5/css3新增属性)

    大家好,很高兴又跟大家见面了!本周更新博主将给大家带来更精彩的HTML5技术分享,通过本周的学习,可实现大部分的网页制作.以下为本次更新内容. 第四章 css盒模型 <!DOCTYPE html ...

  5. {03--CSS布局设置} 盒模型 二 padding bode margin 标准文档流 块级元素和行内元素 浮动 margin的用法 文本属性和字体属性 超链接导航栏 background 定位 z-index

    03--CSS布局设置 本节目录 一 盒模型 二 padding(内边距) 三 boder(边框) 四 简单认识一下margin(外边距) 五 标准文档流 六 块级元素和行内元素 七 浮动 八 mar ...

  6. CSS基础知识---浮动,定位和盒模型

    转载请注明出处! 需要掌握的三个最重要的CSS概念是浮动,定位和盒模型. 盒模型概述: 页面上的每个元素都被看做一个矩形框(元素框or盒模型),这个框由元素内容,内边距,边框和外边距组成. 内边距出现 ...

  7. Web前端篇:CSS常用格式化排版、盒模型、浮动、定位、背景边框属性

    目录 Web前端篇:CSS常用格式化排版.盒模型.浮动.定位.背景边框属性 1.常用格式化排版 2.CSS盒模型 3.浮动 4.定位 5.背景属性和边框属性 6.网页中规范和错误问题 7.显示方式 W ...

  8. 笔记《精通css》第3章 盒模型,定位,浮动,清理

    第3章    盒模型,定位,浮动,清理 1.盒模型用到的属性width,height,padding,border,margin 普通文档流的上下垂直margin会叠加 2.块级框 与 行内框, 利用 ...

  9. CSS布局定位基础-盒模型和定位机制

    1. 盒模型 2. 外边距合并 3. 定位机制 4. Float 5. Position:属性有哪些取值,它们的行为是什么? 无依赖绝对定位? 6. Display:常见属性值有哪些取值? 7. 对B ...

随机推荐

  1. Redis注册成服务

    注册服务 redis-server.exe –-service-install redis.windows.conf 删除服务 redis-server –-service-uninstall 开启服 ...

  2. Linux创建连接命令 ln -s创建软连接

    ln -s 是linux中一个非常重要命令,一定要熟悉.它的功能是为某一个文件在另外一个位置建立一个同不的链接,这个命令最常用的参数是-s, 具体用法是:ln -s 源文件 目标文件. 当 我们需要在 ...

  3. 判断是app 或者 网页

    function openInWebview () { let ua = navigator.userAgent.toLowerCase(); if (ua.match(/MicroMessenger ...

  4. dropna fillna

    # NaN 浮点类型   np.nan+1 =>nan Python type(None)  // NoneType类型 不能参与运算 import pandas as pd from pand ...

  5. firefox插件hostadmin自由切换host

    在Mac下firefox插件hostadmin切换host,遇到的第一个问题就是提示权限不足,解决办法,在终端输入以下命令即可: sudo chmod og+w /etc/hosts chmod修改权 ...

  6. Linux虚拟机(CentOS)安装gcc, g++

    1.    确保自己的虚拟机联网 点击那个三角形可以选择连接网络 如果还是连不了网,参考https://www.cnblogs.com/xingbo/p/6100554.html 2.联网后,使用命令 ...

  7. Deepin-linux下的linux的终端下软件安装和卸载方法

    1.方法一: sudo apt update #最好第一步是它 sudo apt install <package_name> --no-upgrade #安装该package但是不升级. ...

  8. 吴裕雄--天生自然Numpy库学习笔记:NumPy 从已有的数组创建数组

    import numpy as np x = [1,2,3] a = np.asarray(x) print (a) import numpy as np x = (1,2,3) a = np.asa ...

  9. 【转】弹出USB大容量存储设备时出问题的解决方法

    原文链接 如下图所示,这个问题,相信很多人都有遇到过,而且经常难以解决,试了很多方法都无效.到最后,只能抱着侥幸的心理直接拔出,如果运气好,可能没有事,如果运气不好,你的U盘或者移动硬盘就要从此报废了 ...

  10. java里自定义分页查询的尝试

    public String list(){ try { LoginUser loginUser = getLoginUser();//获取当前登录用户 if(curpage<=0){ curpa ...