原文地址:http://geekplux.com/2014/04/25/several_core_concepts_of_css.html
原文作者:GeekPlux
本文将讲述 CSS 中最核心的几个概念,包括:盒模型、position、float等。这些是 CSS 的基础,也是最常用的几个属性,它们之间看似独立却又相辅相成。为了掌握它们,有必要写出来探讨一下,如有错误欢迎指正。
元素类型
HTML 的元素可以分为两种:
- 块级元素(block level element)
- 内联元素(inline element 有的人也叫它行内元素)
两者的区别在于以下三点:
- 块级元素会独占一行(即无法与其他元素显示在同一行内,除非你显式修改元素的 display 属性),而内联元素则都会在一行内显示。
- 块级元素可以设置 width、height 属性,而内联元素设置无效。
- 块级元素的 width 默认为 100%,而内联元素则是根据其自身的内容或子元素来决定其宽度。
最常见块级元素应该是 <div>
吧,内联元素有 <span>
<a>
<img>
等等,完整的元素列表可以谷歌一下。
具体来说一下吧,
1 2 3 4 |
.example {
width: 100px;
height: 100px;
}
|
我们为 <div>
设置上面的样式,是有效果的,因为其是块级元素,而对 <span>
设置上面的样式是没用的。要想让 <span>
也可以改变宽高,可以通过设置 display: block;
来达到效果。当 display 的值设为 block 时,元素将以块级形式呈现;当 display 值设为 inline 时,元素将以内联形式呈现。
若既想让元素在行内显示,又能设置宽高,可以设置:
1
|
display: inline-block;
|
inline-block 在我看来就是让元素对外呈内联元素,可以和其他元素共处与一行内;对内则让元素呈块级元素,可改变其宽高。
HTML 代码是顺序执行的,一份无任何 CSS 样式的 HTML 代码最终呈现出的页面是根据元素出现的顺序和类型排列的。块级元素就从上到下排列,遇到内联元素则从左到右排列。这种无样式的情况下,元素的分布叫普通流,元素出现的位置应该叫正常位置(这是我瞎起的),同时所有元素会在页面上占据一个空间,空间大小由其盒模型决定。
盒模型
页面上显示的每个元素(包括内联元素)都可以看作一个盒子,即盒模型( box model )。请看 Chrome DevTools 里的截图:
可以显而易见的看出盒模型由 4 部分组成。从内到外分别是:
1
|
content -> padding -> border -> margin
|
按理来说一个元素的宽度(高度以此类推)应该这样计算:
1
|
总宽度 = margin-left + border-left + padding-left + width + padding-right + border-right + margin-right
|
但是不同浏览器(你没有猜错,就是那个与众不同的浏览器)对宽度的诠释不一样。符合 W3C 标准的浏览器认为一个元素的宽度只等于其 content 的宽度,其余都要额外算。于是你规定一个元素:
1 2 3 4 5 6 |
.example {
width: 200px;
padding: 10px;
border: 5px solid #000;
margin: 20px;
}
|
则他最终的宽度应为:
1
|
宽度 = width(200px) + padding(10px * 2) + border(5px * 2) + margin(20px * 2) = 270px;
|
而在 IE(低于IE9) 下,最终宽度为:
1
|
宽度 = width(200px) + margin(20px * 2) = 240px;
|
我个人觉得 IE 的更符合人类思维,毕竟 padding 叫内边距,边框算作额外的宽度也说不下去。W3C 最后为了解决这个问题,在 CSS3 中加了 box-sizing 这个属性。当我们设置 box-sizing: border-box;
时,border 和 padding 就被包含在了宽高之内,和 IE 之前的标准是一样的。所以,为了避免你同一份 css 在不同浏览器下表现不同,最好加上:
1 2 3 4 5 |
*, *:before, *:after {
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
box-sizing: border-box;
}
|
这里还有两种特殊情况:
- 无宽度 —— 绝对定位(position: absolute;) 元素
- 无宽度 —— 浮动(float) 元素
它们在页面上的表现均不占据空间(脱离普通流,感觉像浮在页面上层一样,移动它们不影响其他元素的定位)。这就涉及到另外两个核心概念 position 和 float。
position
position 这个属性决定了元素将如何定位。它的值大概有以下五种:
static | position的默认值。元素将定位到它的正常位置(上文提到过),其实也就相当于没有定位。元素在页面上占据位置。不能使用 top right bottom left 移动元素位置。 |
relative | 相对定位,相对于元素的正常位置来进行定位。元素在页面占据位置。可以使用 top right bottom left 移动元素位置。 |
absolute | 绝对定位,相对于最近一级的 定位不是 static 的父元素来进行定位。元素在页面不占据位置。 可以使用 top right bottom left 移动元素位置。 |
fixed | 绝对定位,相对于浏览器窗口来进行定位。其余和 absolute 一样,相当于一种特殊的 absolute。 |
inherit | 从父元素继承 position 属性的值。 |
具体效果可以参考w3school的实例,或者自己写一下就明白了。
每个网页都可以看成是由一层一层页面堆叠起来的,如下图所示。
position 设置为 relative 的时候,元素依然在普通流中,位置是正常位置,你可以通过 left right 等移动元素。会影响其他元素的位置。
而当一个元素的 position 值为 absolute 或 fixed 的时候,会发生三件事:
- 把该元素往 Z 轴方向移了一层,元素脱离了普通流,所以不再占据原来那层的空间,还会覆盖下层的元素。
- 该元素将变为块级元素,相当于给该元素设置了
display: block;
(给一个内联元素,如<span>
,设置 absolute 之后发现它可以设置宽高了)。 - 如果该元素是块级元素,元素的宽度由原来的 width: 100%(占据一行),变为了 auto。
由此观之,当 position 设置为 absolute 或 fixed,就没必要设置 display 为 block 了。而且如果你不想覆盖下层的元素,可以设置 z-index 值 达到效果。
float
float 顾名思义,就是把元素浮动,它的取值一共有四个:left right none inherit,光看名字就懂了,无需多言。
最初的 float 只是用来实现文字环绕图片的效果,仅此而已。而现在 float 的应用已不止这个,前辈们也是写了无数博文来深入浅出的讲解它。
浅如:
经验分享:CSS浮动(float,clear)通俗讲解 篇幅不长,通俗易懂,可以看完这篇文章再回过头来看本文。
深如:
CSS float浮动的深入研究、详解及拓展(一)
CSS float浮动的深入研究、详解及拓展(二)
从本质上讲解了 float 的原理。
我就不班门弄斧写原理了,只说说 float 的几个要点就行了:
- 只有左右浮动,没有上下浮动。
- 元素设置 float 之后,它会脱离普通流(和
position: absolute;
一样),不再占据原来那层的空间,还会覆盖下一层的元素。 - 浮动不会对该元素的上一个兄弟元素有任何影响。
- 浮动之后,该元素的下一个兄弟元素会紧贴到该元素之前没有设置 float 的元素之后(很好理解,因为该元素脱离普通流了,或者说不在这一层了,所以它的下一个元素当然要补上它的位置)。
- 如果该元素的下一个兄弟元素中有内联元素(通常是文字),则会围绕该元素显示,形成类似「文字围绕图片」的效果。(可参考CSS float浮动的深入研究、详解及拓展(一)中的讲解)。这个我还是实践了一下的:
- 下一个兄弟元素如果也设置了同一方向的 float,则会紧随该元素之后显示。
- 该元素将变为块级元素,相当于给该元素设置了
display: block;
(和position: absolute;
一样)。
相关推荐
首先,让我们深入了解一下CSS的核心概念: 1. **选择器与声明**:CSS的基础是选择器和声明。选择器定位你要应用样式的元素,而声明则由属性和值组成,定义了元素的具体样式。例如,“body {color: #333; font-size:...
首先,CSS系统架构通常涉及到以下几个核心概念: 1. **层叠原理**:CSS的“层叠”特性决定了哪些样式会被应用到元素上。根据规则的优先级、特异性、源顺序以及浏览器默认样式,样式表会相互覆盖,形成最终的显示...
本书内容可能涵盖以下几个方面: 1. **CSS基础**:介绍CSS的基本语法,包括选择器、属性和值的概念。选择器用于定位文档中的元素,属性定义了元素的样式属性,值则指定了属性的具体设定。例如,`color`属性用于设置...
下面我们将深入探讨CSS 2.0中的核心概念和关键知识点。 1. **选择器**: 选择器用于匹配HTML或XML元素,以便应用样式。在CSS 2.0中,有以下几种选择器: - 类选择器(.class):通过类名来选中元素。 - ID选择器 ...
在学习CSS时,你需要了解以下几个核心概念: 1. **选择器(Selectors)**:选择器是CSS中的关键,它们用来指定你想要应用样式的HTML元素。例如,`p`选择器会影响所有的段落,而`.class`选择器会选取具有特定类名的...
- CSS的“层叠”概念是其核心特性之一,了解样式的继承、特异性、重要性和源顺序可以帮助解决样式冲突问题。 3. **CSS布局技巧**: - 流动布局(Block Layout)、网格布局(Grid Layout)、Flexbox布局(Flexible...
"几个css实例 易懂易学"这个主题旨在为初学者提供一系列简单易懂的CSS实例,帮助他们快速上手并提升技能。CSS作为网页设计的核心技术之一,负责控制页面的布局和视觉表现,通过定义元素的样式来实现丰富的网页效果。...
本书可能还会涉及到以下几个方面: 1. CSS选择器的使用:CSS选择器是选择HTML元素并应用样式规则的方法。它包括元素选择器、类选择器、ID选择器、属性选择器等。通过组合不同的选择器,可以非常精确地控制样式的...
在学习CSS布局时,我们需要注意以下几个核心概念: 1. 盒模型:CSS中的盒模型包括内容区域、内边距、边框和外边距。理解盒模型对于精确控制元素尺寸至关重要。 2. 层叠顺序:CSS中的选择器优先级决定了样式的应用...
在本项目中,"CSS3D缩略图预览概念_HTML_JavaScript_下载.zip" 涉及到了Web开发中的几个关键知识点,主要集中在HTML、JavaScript以及CSS3的3D变换技术上。我们将深入探讨这些技术,并了解如何将它们整合在一起创建一...
了解这两个概念能避免不必要的样式冲突。 8. **清除浮动**:使用浮动时,可能会遇到浮动元素影响其后的元素布局的问题。可以使用`clear: both`或`clearfix`类来清除浮动。 9. **CSS预处理器**:Sass、Less和Stylus...
最后一部分通过几个大型的实例,让读者深入领会Ajax技术在实际网络项目中的优势,也让读者体验这种优势所带来的优越性能。 本书适用于初、中级网络开发者,对于高级开发人员也很有启发。没有接触过Ajax的入门者...
### 初学Web标准的几个误区 #### 误区一:仅为通过校验而标准化 - **核心要点**:Web标准的本质在于实现内容与表现的分离,而非单纯追求代码的校验通过。通过将样式(CSS)与内容(HTML)分离,可以更高效地管理...
在CSS的世界里,我们首先要理解的是它的核心概念——层叠样式表。CSS是一种用于描述HTML或XML(包括如SVG、MathML等各种XML方言)文档呈现的语言,它的主要任务是控制网页的布局和外观。通过使用CSS,开发者可以将...
它主要涵盖了以下几个核心知识点: 1. **CSS基础**:书中首先介绍了CSS的基础概念,包括选择器、属性和值,这些都是理解和编写CSS样式的基础。读者会学习如何通过CSS控制文本样式、颜色、字体、对齐方式等基本元素...
在"div_css.zip"中,可能包含了以下几个方面的内容: 1. **基础概念**:首先,学习者会接触到CSS和DIV的基本概念,理解它们在网页设计中的作用和关系。例如,如何使用CSS选择器来定位和操作DOM中的元素,以及如何...
通过分析压缩包内的文件,我们可以探讨几个重要的CSS知识点。 首先,我们看到有三个CSS文件:css练习1.css、css练习2.css和css练习3.css。这些文件很可能包含了不同的CSS样式规则,用以控制HTML文档的呈现。CSS允许...
《CSS3.0精美参考手册》是一本专为前端开发者设计的专业指南,它详细阐述了CSS3.0的所有核心概念和技术。CSS(层叠样式表)是网页设计中不可或缺的一部分,用于控制网页元素的样式、布局和表现。随着技术的发展,CSS...