学习总结:CSS(二)块级与行级元素特性、盒模型、层模型、BUG与BFC、浮动模型
一、元素的块级与行级特性
在CSS属性display控制元素是否及如何显示的特性,常用的值有none、inline、block、inline-block,在CSS3中还有一些新的特性状态,在这里不做讨论。
这里我们主要讨论display在CSS布局中涉及到主要属性值inline、block、inline-block三个特性状态。
通常我们在使用元素做页面布局设计时会说行级元素和块级元素,我们通常也遵循块级元素搭建页面设计架构,使用行级元素和行级块元素设计内容。
| 行级元素(内联元素inline) | span strong em a del |
内容决定元素所占位置;不可通过css改变宽高; |
| 块级元素(block) | div p ul li ol form address |
独占一行;可以通过css改变宽高; |
| 行级块元素(inline-block) | img | 内容决定大小,可改变宽高; |
元素如何显示的特性是由浏览器根据不同标签,设定的原始值来决定的,但这并不代表元素的显示特性就一成不变了,display的值是可以通过人为修改来改变。但是这样的操作我并不赞同。
元素的display特性凡是具备inline特性值时,也就是行级元素或者行级块元素都有文字特性,这个特性就是在两个元素之间如果存在逻辑上的空格,元素之间就会有文字之间的间隙一样,这个间隙的宽度根据不同浏览器,不同版本而定。单着并不是我们要讨论的问题。
注:我们需要讨论的是因为img标签具备inline特性,而我们在实际开发时通常用来排列图片设计时,会习惯每行一个标签来编辑,因为换行在文本中存在逻辑上的空格,所以在测试的时候元素之间会出现间隙,这并不是bug,这样的空格在我们压缩文件发布时,压缩过程中会清除这些元素之间的逻辑空格。通过压缩后再运行的代码在img之间就不会有空隙了,而我们平时在编辑测试时建议将img回成一行来测试。
二、盒模型

margin(外边距) - 清除边框外的区域,外边距是透明的。
boreder(边框) - 围绕在内边距和内容外的边框。
padding(内边距) - 清除内容周围的区域,内边距是透明的。
content(内容) - 盒子的内容,显示文本和图形。
三、层模型
position属性规定元素的定位类型。
| absolute |
生成绝对定位的元素,相对于static定位以外的第一个父元素进行定位。 元素的位置通过"left","top","right",以及"bottom"属性进行规定。 |
| fixed |
生成绝对定位的元素,相对于浏览器窗口进行定位。 元素的位置通过"left","top","right"以及"bottom"属性进行规定。 |
| relative |
生成相对定位的元素,相对于其正常位置进行定位。 因此,"left:20"会向元素的left位置添加20像素。 |
| static | 默认值。没有定位,元素出现在正常的流中(忽略top,bottom,left,right或z-index声明)。 |
| inhert | 规定应该从父元素继承position属性的值。 |
absolute:1.脱离原来位置进行定位(即定位到其他位置,原来的位置会被占位,也是元素发生了层变化)。
2.以最近的有定位的父级进行定位,如果没有,则相对于文档进行定位。
relative: 1.保留原来位置进行定位,原来位置不会被占用,也不会发生层变化。
2.相对自己原来的位置进行定位。
开发经验:以relative作为定位参照,用absolute实现定位功能。
.四、经典的BUG与BFC
BFC:block format context ; 块级盒模型
触发盒子的BFC:
position:absolute; 绝对定位
display:inline-block; 元素特性修改为:行级块元素
float:left/right; 元素浮动
overflow:hidden 溢出部分隐藏
1.margin塌陷
现象:子元素与父元素同时设置margin-top时,子元素的margin-top不相对于父级的top位置作用效果,而是相对于浏览器或父级链上有bfc渲染规则的元素作用效果。
解决方法:让父级触发bfc渲染规则
2.margin合并
现象:两个并列的元素,前面的元素设置margin-bottom,后面的元素设置margin-top,取一个大值作为两个元素之间的间隔距离。
解决方法:可以将两个元素嵌套在bfc渲染规则的盒子里面,或则其中一个嵌套在bfc渲染规则的盒子里面。注:这个bug一般不解决,采用数据计算,在一个边距上设置值就可以了。
五、浮动模型(教程:html-css-4.1-48:00)
float:left/right
当两个并列元素,前一个设置了浮动,后一个没有设置,如果后一个是块级元素就会移动到浮动元素的下方(这里不是层模型)。
当浮动元素被父级元素包裹时,父级元素不会被正常撑开,因为子元素的下方法产生了浮动流。父级元素的下边框就看到浮动的子元素了。
浮动元素会产生浮动流:
1.块级元素看不到产生浮动流的元素(会占位到浮动元素的下面)。
2.产生了bfc渲染规则的元素和文本类属性(inline)的元素以及文本都能看到浮动元素(这些元素和文本会排列到浮动元素的后面)。
并列元素间的浮动问题解决方法:bfc渲染规则及可以解决。
父子元素间的浮动问题解决方法:1.采用添加一个标签设置样式clear:both;清除这个标签周边的浮动流(改变页面结构,实际不能用)。2.可以设置父级元素转换成bfc渲染规则。3.可以使用伪元素after替换添加的标签的方法。
element::after{
content:"";//让伪元素生效
clear:both;//清除左右浮动
display:block;//伪元素是行级元素,需要改变它的元素特性为块级元素才能生效。
}
浮动流的就是被设置浮动的元素下方在逻辑上会产生一个浮动流的作用,块级元素看不到并列在前面的浮动元素的和子元素。如果是前面存在并列的浮动元素,块级元素就会移动到浮动元素的下方。如果是子元素被设置了浮动,父级元素就会失去对子元素的约束(下边框无法被子元素撑开)。解决方法上面已给出。
学习总结:CSS(二)块级与行级元素特性、盒模型、层模型、BUG与BFC、浮动模型的更多相关文章
- HTML块级、行级元素,特殊字符,嵌套规则
如果介绍HTML网页基本标签的嵌套规则,首先要说的就是元素的分类.元素可以划分为块级元素和行级元素,块级元素是什么?它可以独占一行,可以设置宽高度,默认是100%:行级元素与之相反,它的内容决定它的宽 ...
- css盒模型和块级、行内元素深入理解
盒模型是CSS的核心知识点之一,它指定元素如何显示以及如何相互交互.页面上的每个元素都被看成一个矩形框,这个框由元素的内容.内边距.边框和外边距组成,需要了解的朋友可以深入参考下 一.CSS盒模型 盒 ...
- css盒子模型的深入理解,在块级、行内元素的区别和特性
css盒子模型用于处理元素的内容.内边距.边框和外边距的方式简称.元素框的最内部分是实际的内容,直接包围内容的是内边距.内边距呈现了元素的背景.内边距的边缘是边框.边框以外是外边距,外边距默认是透明的 ...
- 3、第3课CSS块级、行内元素、绝对定位、相对定位、固定位置20150922
1.块级元素 A:特点: A.1默认显示在父标签的左上角 A.2块级元素默认占满一行(占满整个文档流) B:常见的块级元素 P h1--h6 ul li ol li div h ...
- HTML学习二_HTML常用的行级标签,常用实体字符及表单标签
HTML常用的行级标签(行内元素)不独占一行### 有语义的行内元素 #### HTML链接 a标签 ```angular2html<a href="链接地址">链接文 ...
- day001-html知识点总结(-)块级。行内元素区分
-.行内元素和块级元素的区别与转换: 区别: 1.从形式上看,在标准文档流中,行内元素会水平方向呈线性排列,而块级元素会各占一行,垂着方向排列. 2.在结构使用上,块级元素可以包含行内元素和块级元素, ...
- block与inline,inline和inline-block,块级和行内元素,行内替换和行内非替换元素
block:块级元素默认display属性为block:无论块内内容有多少,总是占满一行: inline:行内元素默认display属性为inline:只占据块内的内容的大小,不会占满一整行: inl ...
- CSS HACK tab制表符导致行内元素之间的空隙如何解决
<!DOCTYPE html> <html lang="zh-CN"><head> <meta name="viewport&q ...
- MYSQL 表级锁 行级锁 页面锁区别
myisam存储引擎默认是表级锁 innodb存储引擎默认是行级锁 DBD存储引擎默认是页面锁 表级锁:开销小,加锁快:不会出现死锁:锁定粒度大,发出锁冲突的概率最高,并发度最低.行级锁:开锁大, ...
随机推荐
- NORMA2 - Norma [cdq分治]
题面 洛谷 你有一个长度为n的序列,定义这个序列中每个区间的价值是 \(Cost(i,j)=Min(Ai...Aj)∗Max(Ai...Aj)∗(j−i+1)Cost(i,j)=Min(A_{i}.. ...
- Apache 安装及常用参数设置
禁用 selinux setenforce 0 sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/confi ...
- POJ 2672 Tarjan + 缩点 + 拓扑思想
Going from u to v or from v to u? Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 17383 ...
- 生产者&消费者.py
1.最简单的 --生产者消费者 send.py# !/usr/bin/env python3.5# -*- coding:utf-8 -*-# __author__ == 'LuoTianShuai' ...
- springboot 通过 hibernate 连接sqlserver 空间数据 位置数据
示例代码:https://github.com/bigben0123/spring-boot-spatial-example 1,配置application.properties #sqlserver ...
- spring boot集成ehcache 2.x 用于hibernate二级缓存
https://www.jianshu.com/p/87b2c309b776 本文将介绍如何在spring boot中集成ehcache作为hibernate的二级缓存.各个框架版本如下 spring ...
- Privoxy将Socks代理转化HTTP代理
使用步骤 安装Privoxy sudo pacman -S privoxy # Arch Linux 创建配置文件 mkdir -p ~/.config/privoxy 向~/.config/priv ...
- [luogu2292][L语言]
题目链接 思路 这道题我用的是AC自动机的做法. 先把子串挂到trie树上,在单词结尾打标记的时候,标记的是当前单词的长度.然后去上面查询母串的时候,每查询到一个单词,就建立一条线段,这条线段的结尾位 ...
- Django 创建超级用户
Django自带的后台管理是Django明显特色之一,可以让我们快速便捷管理数据.后台管理可以在各个app的admin.py文件中进行控制 #创建超级用户 python manage.py creat ...
- linux:逐行合并两文件(paste命令)
存在file1.txt 1 2 3 4 5 6 file2.txt a b c d e f 现希望生成file3.txt 1 2 a b 3 4 c d 5 6 e f 则可以用到如下命令: past ...