在CSS的最后一个博客中,将学习整理一些CSS中的重要概念,对这些重要概念的掌握,将对CSS的认识十分重要。

了解这些概念对深入理解CSS的本质十分重要:(1)包含块containing block (2)BFC和IFC (3)层叠上下文

如果要真正地掌握CSS,一定要对此认真研读、一定认真研读、一点认真研读(重要的事情说三遍)。

1:包含块

我们都知道,如果有两个div,一个是父元素,另外一个是子元素,父元素会决定子元素的大小和定位。包含块是什么呢?简单来说,就是可以决定一个元素大小和定位的元素。包含块是视觉格式化模型中的一个重要概念,它与CSS盒子模型类似。包含块也可以理解为一个矩形盒子、这个矩形的作用是为这个矩形内部的后代元素(子元素、孙元素等)提供一个参考。一个元素的大小和定位往往是由该元素所在的包含块决定的。

通常情况下,一个元素的包含块由离它最近的“块级祖先元素”的“内容边界”决定的。但当元素被设置为绝对定位时,此时该元素的包含块是由离它最近的“position:relative”或"position:absolute"的祖先元素决定。一个元素生成的盒子会扮演该元素的内部元素包含块的角色。也就是说,一个元素的CSS盒子为它的内部元素建造了包含块。

****包含块的判定以及包含块的范围

一个元素会为它的内部元素创建包含块,内部元素的大小以及定位都跟它的包含块有关。那么是不是说一个元素的包含块就是它的父元素呢?答案是否定的。

(1)根元素

根元素(HTML)元素,是一个页面中最顶端的元素,它没有父元素。根元素存在的包含块,被称为“初始包含块”。

(2)固定定位元素

如果元素的position属性为fixed,那么它的包含块是当前可视窗口,也就是当前浏览器窗口。

(3)静态定位元素和相对定位元素

如果元素的position属性为static或relative,那么它的包含块是它最近的块级祖先元素创建的。祖先元素必须是block、inline_block或者table-cell类型。

(4)绝对定位元素

如果元素的position属性为absolute,那么它的包含块是由最近的position属性不为static的祖先元素。这里的祖先元素可以是块元素,也可以是行内元素。因此,我们可知,绝对定位元素是根据其包含块来定位的,这个包含块是离它最近的position属性不为static的祖先元素。如果绝对定位元素找不到position属性不为static的祖先元素,则它的包含块是根元素(html元素)。

对于包含块的范围,也分为两种情况考虑。

(1)如果祖先元素是块元素,则包含块的范围为祖先元素的padding edge形成。

(2)如果祖先是行内元素,则包含块取决于祖先元素的direction属性。

2:层叠上下文

理解层叠上下文,不仅可以帮助我们深入理解z-index对元素堆叠顺序的控制,而且对于我们深入理解浮动和定位也是非常重要的。

(1)层叠上下文

层叠上下文,是HTMl中的一个三维的概念,我们知道,网页是三维结构的,它有X,Y,Z轴,Z轴往往都用来设定层的先后顺序的。层叠上下文跟块级格式上下文(BFC)相似,是可以创建出来的,也就是说,你可以在CSS中添加一定的属性来将某个元素创建一个层叠上下文出来。

如果一个元素具备以下任何一个条件,则该元素会创建一个新的层叠上下文。

(1)根元素  (2)z-index不为auto的定位元素

(2)层叠级别

层叠级别是针对同一个层叠上下文而言的。层叠级别与层叠上下文,是两个不同的概念。

在同一个层叠上下文中,层叠级别从低到高排列。

层叠级别由低到高:(1)背景和边框(父级),也就是当前层叠上下文的背景和边框。 (2)负z-index:z-index为负值的“内部元素”。 (3)块盒子:普通文档流下的块盒子(block-level box)。 (4)浮动盒子:非定位的浮动元素(也就是排除了position:relative的浮动盒子)。 (5)行内盒子:普通文档流下的行内盒子(inline-level box)。 (6)z-index:0:z-index为0的“内部元素”。(7)正z-index:z-index为正值的“内部元素”。

背景和边框一般为装饰属性,所以层叠级别最低。浮动元素和块元素一般用作布局,而行内元素都是内容,对于一个页面来说,最重要的当然是内容。因此,一定要让内容的层叠级别相当高。

(3)层叠上下文的特点

一个元素在z轴方向上的堆叠顺序,是由“层叠上下文”和“层叠级别“这两个因素决定的:

①同一个层叠上下文中,我们比较的是“内部元素层叠级别”。层叠级别大的元素显示在上,层叠级别小的元素显示在下。

②同一个层叠上下文中,如果两个元素的层叠级别相同(即z-index值相同),则后面的元素堆叠在前面元素的上面,遵循“后来者居上”原则。

③不同的层叠上下文中,我们比较的是“父级元素层叠级别”。元素显示顺序以“父级层叠上下文”的层叠级别来决定显示的先后顺序,与自身的层叠级别无关。

 3:BFC和IFC

(1)基本概念

在CSS中,页面中任何一个元素都可以看成是一个盒子。在普通文档流中,盒子会参与一种格式上下文。这个盒子可能是块盒子,也可能是行内盒子。一个盒子只能是块盒子或者行内盒子,不能同时是块盒子又是行内盒子。其中块盒子参与BFC(块级格式上下文),行内盒子参与IFC(行级格式上下文)。

(2)格式上下文

它指的是页面中的一块渲染区域,并且这个格式上下文有一套自己的渲染规则。格式上下文决定了其他内部元素将如何定位,以及和其他元素之间的关系。

格式上下文有两种:(1)块级格式上下文(BFC) (2)行级格式上下文(IFC)

(3)盒子

盒子,又称CSS盒子,是CSS布局的基本单位。元素的类型和display属性决定了盒子的类型。不同类型的盒子,会参与不同的格式上下文。

盒子的类型一般有“块盒子”和“行内盒子”这两种:

①块盒子

块盒子,即block-level box。元素类型(即display属性)为block、table、list-item的元素,会生成块盒子。

块盒子会参与块级格式上下文。也就是说,元素类型为block、table、list-item的元素都会参与块级格式上下文(BFC)。

②行内盒子

行内盒子,即inline-level box。元素类型(即display属性)为inline、inline-block、inline-table的元素,会生成行内盒子。

行内盒子会参与行级格式上下文。也就是说,元素类型为inline、inline-block、inline-table的元素都会参与行级格式上下文(IFC)。

(4)BFC

BFC 全称Block Formatting Context(块级格式上下文)。它是一个独立的渲染区域,只有块盒子(block-level box)参与。块级格式上下文规定了内部的块盒子是如何布局的,并且这个渲染区域与外部区域毫不相关。

①如何创建BFC

W3C标准中对BFC的定义:浮动元素,绝对定位元素(position为absolute或fixed),元素类型(即display属性)为inline-block、table-caption、table-cell,以及overflow属性不为visible的元素将会创建一个新的块级格式上下文(BFC)。

如果一个元素具备以下任何一个条件,则该元素都会创建一个新的BFC。

Ⅰ:根元素

Ⅱ:float属性除了none以外的值,也就是“float:left”和“float:right”

Ⅲ:position属性除了static和relative以外的值,也就是“position:absolute”和“position:fixed”。

Ⅳ:overflow属性除了visible以外的值,也就是“overflow-auto”“overflow:hidden”和“overflow:scroll”。

Ⅴ:元素类型(即display属性)为inline-block、table-caption、table-cell。

②BFC的特点

(1)在一个BFC中,盒子从顶端开始垂直一个接着一个地排列,两个相邻盒子之间的垂直间距由magin属性决定。在同一个BFC中,两个相邻盒子之间垂直方向上的外边距会叠加。

(2)在一个BFC中,没一个盒子的左外边界(margin-left)会紧贴着容器的左边(border-left)(对于从右到左的格式化,则相反),即使存在浮动元素也是如此。

因此,得出的一下几点重要结论十分重要。

(1)在一个BFC内部,盒子会在垂直方向上一个接着一个地排列。

(2)在一个BFC内部,相邻的margin-top和margin-bottom会叠加。

(3)在一个BFC内部,每一个元素的左外边界会紧贴着包含盒子的左边,即使存在浮动元素也是如此。

(4)在一个BFC内部,如果存在内部元素是一个新的BFC,并且存在内部元素是浮动元素。则该BFC区域不会与float元素的区域重叠。

(5)BFC就是页面上的一个隔离的盒子,该盒子内部的子元素不会影响到外面的元素。

(6)计算一个BFC的高度时,其内部浮动元素的高度也会参与计算。

③BFC的用途

(1)创建BFC来避免垂直外边距叠加。

(2)创建BFC 来清除浮动。

①BFC包含浮动    ②BFC避免文字环绕

(3)创建BFC来实现自适应布局。

CSS中一些重要概念的更多相关文章

  1. css中的一些概念

    1.伪类与伪元素 1.单冒号(:)用于 CSS3 伪类,双冒号(::)用于 CSS3 伪元素. 2.对于 CSS2 中已经有的伪元素,例如 :before,单冒号和双冒号的写法 ::before 作用 ...

  2. css中的定位问题

    由于我最近在修改自己的网页布局,突然发现了自己对css中的定位概念还是混淆的,于是通过查官方文档,大神博客,自己实践,重新梳理了css定位的知识点.如果有不对的地方,请指正

  3. CSS中层叠和继承的概念。

    继承 CSS的某些样式是具有继承性的,那么什么是继承呢?继承是一种规则,它允许样式不仅应用于某个特定html标签元素,而且应用于其后代.比如下面代码: 1 2 3 4 5 6 7 8 9 <ht ...

  4. css中几个重要概念

    替换元素与非替换元素 替换元素:是指浏览器根据元素的标签和属性来决定元素的具体内容. 例如"<img src="xx.jpg">浏览器会根据标签的src属性的 ...

  5. css中line-height行高的深入学习

    之前对css中行高line-height的理解还是有些肤浅,深入后才发觉里面包罗万象.学习行高line-height,首先从基本原理开始 (标注该文章转载 http://www.cnblogs.com ...

  6. 对CSS中的Position、Float属性的一些深入探讨

    对CSS中的Position.Float属性的一些深入探讨 对于Position.Float我们在平时使用上可以说是使用频率非常高的两个CSS属性,对于这两个属性的使用上面可能大多数人存在一些模糊与不 ...

  7. 浅析CSS中的BFC和IFC

    1. 为什么会有BFC和IFC 首先要先了解两个概念:Box和formatting context: Box:CSS渲染的时候是以Box作为渲染的基本单位.Box的类型由元素的类型和display属性 ...

  8. CSS系列:CSS中盒子模型

    盒子模型是CSS控制页面时一个很重要的概念.所有页面中的元素都可以看成是一个盒子,占据着一定的页面空间.可以通过调整盒子的边框和距离等参数,来调节盒子的位置和大小. 1. 盒子的内部结构 在CSS中, ...

  9. CSS中的overflow属性

    导读:overflow属性一般用来隐藏超过div范围的元素,包括不隐藏(visible),直接隐藏(hidden),用滚动条隐藏(scroll),自动(aotu)这四个属性.当然overflow的用法 ...

随机推荐

  1. 手摸手带你用Hexo撸博客(三)之添加评论系统

    原文地址 注: 笔者采用的是butterfly主题, 主题内置集成评论系统 butterfly主题开启评论 开启评论需要在comments-use中填写你需要的评论. 以Valine为例 commen ...

  2. 【ASP.NET Core】Blazor 服务器端的 Base Path

    提到 Blazor,没准就会有人问:选用 Server 端还是 WebAssembly(客户端)?其实这个不用纠结,老周个人的原则是:Server 端优先.理由很单纯:服务器端虽然消耗服务器上的资源, ...

  3. 上传功能-弹窗实现-vue

    -引入弹窗页面 import fileUpload from 'src/page/cuApplyManage/fileUpload.vue'; -页面布局 <div> <fileUp ...

  4. java注解学习笔记总结

    注解的理解 ① jdk 5.0 新增的功能 ② Annotation 其实就是代码里的特殊标记, 这些标记可以在编译, 类加载, 运行时被读取, 并执行相应的处理.通过使用 Annotation,程序 ...

  5. case when then else end用法

        case具有两种格式,简单case函数和case搜索函数 case函数只返回第一个符合条件的值,剩下的case部分将会被自动忽略 1.简单函数 CASE sex         WHEN '1 ...

  6. Python解释器和IPython

    目录 简介 Python解释器 IPython 魔法函数 运行和编辑 Debug History 运行系统命令 简介 今天给大家介绍一下Python的一个功能非常强大的解释器IPython.虽然Pyt ...

  7. Rancher首席架构师解读Fleet:它何以管理百万集群?

    作者简介 Darren Shepherd,Rancher Labs联合创始人及首席架构师.在加入Rancher之前,Darren是Citrix的高级首席工程师,他在那里从事CloudStack.Ope ...

  8. 【SpringMVC】SpringMVC 拦截器

    SpringMVC 拦截器 文章源码 拦截器的作用 SpringMVC 的处理器拦截器类似于 Servlet 开发中的过滤器 Filter,用于对处理器进行预处理和后处理. 谈到拦截器,还有另外一个概 ...

  9. Centos 6.5 Rabbitmq 安装和集群,镜像部署

    centos 6.5 rabbitmq 安装和集群,镜像部署 安装erlang: yum install gcc glibc-devel make ncurses-devel openssl-deve ...

  10. Centos 6 下安装 OSSEC-2.8.1 (一)

    ossec -2.8.1 安装: ## 1 ) 安装依赖包: RedHat / Centos / Fedora / Amazon Linux yum install -y pcre mysql mys ...