1. BFC简介

BFC(block formatting context)意为块级格式化上下文。BFC是一个独立的渲染区域,只有Block-level box参与,其规定了内部的Block-level box如何布局,这个区域与外部毫不相干。

元素的显示模式

之前我们学过元素的显示模式使用display属性定义,常用值如下:

  • none; (不显示,不占有位置)
  • block; (块级)
  • inline; (行内)
  • inline-block; (行内块)
  • flex; (伸缩布局)

其完整属性值很多如下图:

可以产生BFC的元素

w3c 规范以下元素可以产生BFC:

display属性为 block, list-item, table 的元素,会产生BFC。

可以发现可以产生BFC的元素都是用来布局最为合理的元素,因为他们就是用来可视化布局。

如何触发BFC(让元素产生BFC)

给元素添加以下特性可以使元素产生BFC:

  • float属性不为none(浮动即可)

  • position为absolute或fixed

  • display为inline-block, table-cell, table-caption, flex, inline-flex

  • overflow不为visible。(一般使用hidden,没有副作用)

注意:BFC为块级格式化上下文,其重点在于块级。由上面触发BFC的条件可以看出,让元素浮动或者进行绝对定位、固定定位都会让元素进行显示模式的转换(转换为行内块)。

BFC元素特性

BFC布局规则特性:

  1. 在BFC(闭合区域)中,盒子从顶端开始垂直地一个接一个地排列。

  2. 盒子垂直方向的距离由margin决定,属于同一个BFC的两个相邻盒子的margin会发生合并现象。

  3. 在BFC中,每一个盒子的左外边缘(margin-left)会触碰到容器的左边缘(border-left)内侧。

  4. BFC的区域不会与浮动盒子产生交集,而是紧贴浮动边缘。

  5. 计算BFC的高度时,自然也会检测浮动或者定位的盒子高度。

BFC用途

①清除元素内部浮动

之前说过如果一个父盒子没有指定高度,其内部的子元素浮动后脱标即不会撑开父元素,此时父元素的高度就变为0。与父元素同级的元素就会上移,造成布局混乱。此时我们需要清除浮动或者叫做闭合浮动,其中一种方法就是给父元素添加overflow: hidden;方法。

其实质为添加该属性会触发父元素产生BFC,BFC特性之一就是计算BFC的高度时,自然也会检测浮动或者定位的盒子高度,此时父盒子的高度就会正常。

②解决外边距合并问题

之前说过当元素垂直排列或者嵌套排列时,元素可能会发生外边距合并的问题。由于同一BFC的盒子外边距会发生合并,那我们将其中一个元素外边包含一个元素,使其触发BFC,两个元素就不会发生外边距合并。

③右侧自适应的盒子问题

默认情况下,两个兄弟元素,前一个元素浮动后,后面元素会贴上来与前一个元素产生交集。当我们给第二个元素触发BFC后,该元素不会与浮动的盒子产生交集,紧贴浮动元素的边缘(且能实现右侧自适应)。

2. 优雅降级和渐进增强

渐进增强

针对低版本浏览器进行构建页面,保证最基本的功能,然后再针对高级浏览器进行效果、交互等改进和追加功能达到更好的用户体验。

优雅降级

一开始就针对高版本浏览器构建完整的功能,然后再针对低版本浏览器进行兼容。

区别:渐进增强是向上兼容,优雅降级是向下兼容。

3. 浏览器前缀

在编写CSS样式时,有时候为了浏览器兼容,会使用常用的浏览器私有前缀。如下表:

浏览器前缀 浏览器
-webkit- Google Chrome, Safari, Android Browser
-moz- Firefox
-o- Opera
-ms- Internet Explorer, Edge
-khtml- Konqueror

4. 背景渐变

背景线性渐变是指颜色沿着一条直线过渡,但是兼容性问题较差。语法如下:

background: -webkit-linear-gradient(渐变的起始位置, 起始颜色, 结束颜色);
background: -webkit-linear-gradient(渐变的起始位置, 颜色 位置, 颜色 位置....);
  • 渐变起始位置可以使用top left等关键字
  • 可以使用百分比定义变化过程中的颜色(可定义多个)

示例如下:

<!DOCTYPE html>
<html><head><meta charset="utf-8"><title></title><style>div {width: 300px;height: 50px;margin: 200px auto;/* 定义背景渐变效果(线性渐变,兼容性较差,需要加浏览器私有前缀) */background: -webkit-linear-gradient(top, red, green);}section {width: 400px;height: 80px;margin: 100px auto;background: -webkit-linear-gradient(left, red 0%, green 20%, hotpink 50%, pink 80%);}</style></head><body><div></div><section></section></body>
</html>

5. css3文件验证与压缩

文件验证

文件验证主要是分析CSS文件里面语法是否正确。

  • CssStats :http://www.cssstats.com/
  • W3C同一验证工具:http://validator.w3.org/unicorn/
文件压缩

通过文件检测没有错误,为了提高加载速度和节约空间(相对来说,css量很少的情况下,几乎没啥区别),可以通过css压缩工具把css进行压缩。

  • 站长之家压缩: http://tool.chinaz.com/Tools/CssFormat.aspx

08 css补充知识相关推荐

  1. HTML+CSS基础知识简单版

    HTML+CSS基础知识简单版 一.HTML概述 HTML:超文本标记语言,其实就是用来开发网页的一门语言: CSS:层叠样式表,可以用于渲染网页.美化网页.做网页. 1.HTML介绍 HTML:超文 ...

  2. 前端开发入门:html和css基础知识回顾2

    HTML+CSS基础知识 1.对WEB标准以及W3C的理解与认识 标签闭合.标签小写.不乱嵌套.提高搜索机器人搜索几率.使用外 链css和js脚本.结构行为表现的分离.文件下载与页面速度更快.内容能被 ...

  3. 前端html和css基础知识

    第一天 常用的浏览器和内核 1.谷歌(chrome)前端工程师必备 2.firefox 火狐 3.safari iphone ipad 苹果 4.IE/Edge微软 5.Opera 欧鹏 HTML骨架 ...

  4. 案例:图书管理——补充知识(数组相关API)||补充知识(数组响应式变化)

    案例:图书管理 Vue数组操作 1.变异方法:会影响数组的原始数据的变化. 2.替换数组:不会影响原始的数组数据,而是形成一个新的数组. <!DOCTYPE html> <html ...

  5. css点击a标签显示下划线_好程序员HTML5培训教程-html和css基础知识

    好程序员HTML5培训教程-html和css基础知识,Html是超文本标记语言(英语全称:HyperText Markup Language,简称:HTML)是一种用于创建网页的标准标记语言. Css ...

  6. 面向对象 - 1.面向过程/2.面向对象/3.如何使用类/4.__init__方法/5.属性查找/6.补充知识/7.可扩展性高...

    编程范式(流派): 面向对象编程,面向过程编程 各有用处!! 编程:语法+数据结构(list dict)+算法(逻辑)-----------------------------------1.面向过程 ...

  7. 〖前端开发〗HTML/CSS基础知识学习笔记

    经过一天的学习,把慕课网的HTML/CSS基础知识学完了,笔记整理: 1. 文件结构:HTML文件的固定结构:<html><head>...</head><b ...

  8. 前端学习---css基本知识

    css基本知识 我们先看一个小例子: <!DOCTYPE html> <html lang="en"> <head><meta chars ...

  9. HTML/CSS基础知识(四)

    WEB标准和W3C的理解与认识 Web标准是一系列标准的集合. 网页主要由三部分组成:结构(Structure).表现(Presentation)和行为(Behavior). 对应的标准也分三方面:结 ...

最新文章

  1. 绿色信托任重道远 应建立补偿机制?
  2. 用户管理实例 之 添加、查询
  3. (计算机组成原理)第二章数据的表示和运算-第二节6:定点数除法运算(原码/补码一位除法)
  4. Python Flask实现查询和添加数据
  5. 1046. 最后一块石头的重量
  6. symmetry methods for differential equations,exercise 1.4
  7. java 计时 timeclock_用 java 写一个clock的类,100毫秒的时钟 求代码。。越简单越好。。最好有注释...
  8. 如何让你的网站快速被百度收录。
  9. 基于android的电影售票APP,基于Android的在线电影售票系统.doc
  10. Abaqus有限元分析软件介绍
  11. 计算机网络(5.13)运输层- TCP的拥塞控制方法
  12. Python数据分析案例-消费者用户画像
  13. 游戏服务器哪种系统稳定,游戏服务器一般用什么系统吗
  14. 英文网站推广常用方法有哪些
  15. python jpg压缩_python 实现图片批量压缩的示例
  16. 十五铬钼钢板和十二铬一钼钒钢板的区别
  17. python操作excel求和,Python 对Excel求和、合并居中的操作
  18. 基于SSM的酒店前台管理系统的设计与实现,高质量论文范例-2022年最新,可直接使用
  19. QT实现多国语言的动态切换
  20. 两台电脑 互相拷贝东西---使用桌面远程连接

热门文章

  1. 如何录制微课?教师必看
  2. Java:图形界面实现桌面数字时钟
  3. 智能问答系统一些思考——四类方法
  4. php 跨域 session,什么是跨域?session如何共享?PHP和Ajax跨域问题的解决方法 | IT小天博客个人技术博客...
  5. mysql 默认字符集_设定mysql的默认字符集
  6. iPad新5.0笔刷
  7. 计算机专业岗山培训记录,办公自动化软件培训记录.doc
  8. 开源自主导航小车MickX4(二)ROS底盘运动控制
  9. 这个世界只有一种病,那就是贫穷!
  10. (附源码)ssm养老院信息管理系统 毕业设计 211141