`

CSS 最核心的几个概念

    博客分类:
  • CSS
 
阅读更多

原文地址:http://geekplux.com/2014/04/25/several_core_concepts_of_css.html

原文作者:GeekPlux

本文将讲述 CSS 中最核心的几个概念,包括:盒模型、position、float等。这些是 CSS 的基础,也是最常用的几个属性,它们之间看似独立却又相辅相成。为了掌握它们,有必要写出来探讨一下,如有错误欢迎指正。

元素类型

HTML 的元素可以分为两种:

  • 块级元素(block level element)
  • 内联元素(inline element 有的人也叫它行内元素)

两者的区别在于以下三点:

  1. 块级元素会独占一行(即无法与其他元素显示在同一行内,除非你显式修改元素的 display 属性),而内联元素则都会在一行内显示。
  2. 块级元素可以设置 width、height 属性,而内联元素设置无效。
  3. 块级元素的 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 这个属性决定了元素将如何定位。它的值大概有以下五种:

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 的时候,会发生三件事:

  1. 把该元素往 Z 轴方向移了一层,元素脱离了普通流,所以不再占据原来那层的空间,还会覆盖下层的元素。
  2. 该元素将变为块级元素,相当于给该元素设置了 display: block;(给一个内联元素,如 <span> ,设置 absolute 之后发现它可以设置宽高了)。
  3. 如果该元素是块级元素,元素的宽度由原来的 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 的几个要点就行了:

  1. 只有左右浮动,没有上下浮动。
  2. 元素设置 float 之后,它会脱离普通流(和 position: absolute; 一样),不再占据原来那层的空间,还会覆盖下一层的元素。
  3. 浮动不会对该元素的上一个兄弟元素有任何影响。
  4. 浮动之后,该元素的下一个兄弟元素会紧贴到该元素之前没有设置 float 的元素之后(很好理解,因为该元素脱离普通流了,或者说不在这一层了,所以它的下一个元素当然要补上它的位置)。
  5. 如果该元素的下一个兄弟元素中有内联元素(通常是文字),则会围绕该元素显示,形成类似「文字围绕图片」的效果。(可参考CSS float浮动的深入研究、详解及拓展(一)中的讲解)。这个我还是实践了一下的:
  6. 下一个兄弟元素如果也设置了同一方向的 float,则会紧随该元素之后显示。
  7. 该元素将变为块级元素,相当于给该元素设置了 display: block;(和position: absolute; 一样)。
分享到:
评论

相关推荐

    几个好看的国外CSS模板

    首先,让我们深入了解一下CSS的核心概念: 1. **选择器与声明**:CSS的基础是选择器和声明。选择器定位你要应用样式的元素,而声明则由属性和值组成,定义了元素的具体样式。例如,“body {color: #333; font-size:...

    CSS系统架构的基本概念共11页.pdf.zip

    首先,CSS系统架构通常涉及到以下几个核心概念: 1. **层叠原理**:CSS的“层叠”特性决定了哪些样式会被应用到元素上。根据规则的优先级、特异性、源顺序以及浏览器默认样式,样式表会相互覆盖,形成最终的显示...

    css核心第2版

    本书内容可能涵盖以下几个方面: 1. **CSS基础**:介绍CSS的基本语法,包括选择器、属性和值的概念。选择器用于定位文档中的元素,属性定义了元素的样式属性,值则指定了属性的具体设定。例如,`color`属性用于设置...

    css手册 css帮助字典 css帮手

    下面我们将深入探讨CSS 2.0中的核心概念和关键知识点。 1. **选择器**: 选择器用于匹配HTML或XML元素,以便应用样式。在CSS 2.0中,有以下几种选择器: - 类选择器(.class):通过类名来选中元素。 - ID选择器 ...

    css教程,CSS编写

    在学习CSS时,你需要了解以下几个核心概念: 1. **选择器(Selectors)**:选择器是CSS中的关键,它们用来指定你想要应用样式的HTML元素。例如,`p`选择器会影响所有的段落,而`.class`选择器会选取具有特定类名的...

    CSS几个技巧及问题处理.rar

    - CSS的“层叠”概念是其核心特性之一,了解样式的继承、特异性、重要性和源顺序可以帮助解决样式冲突问题。 3. **CSS布局技巧**: - 流动布局(Block Layout)、网格布局(Grid Layout)、Flexbox布局(Flexible...

    几个css实例 易懂易学

    "几个css实例 易懂易学"这个主题旨在为初学者提供一系列简单易懂的CSS实例,帮助他们快速上手并提升技能。CSS作为网页设计的核心技术之一,负责控制页面的布局和视觉表现,通过定义元素的样式来实现丰富的网页效果。...

    CSS:The Definitive Guide, 4th Edition[CSS权威指南](英文版)

    本书可能还会涉及到以下几个方面: 1. CSS选择器的使用:CSS选择器是选择HTML元素并应用样式规则的方法。它包括元素选择器、类选择器、ID选择器、属性选择器等。通过组合不同的选择器,可以非常精确地控制样式的...

    DIV+css学习 精通CSS实例

    在学习CSS布局时,我们需要注意以下几个核心概念: 1. 盒模型:CSS中的盒模型包括内容区域、内边距、边框和外边距。理解盒模型对于精确控制元素尺寸至关重要。 2. 层叠顺序:CSS中的选择器优先级决定了样式的应用...

    CSS3D缩略图预览概念_HTML_JavaScript_下载.zip

    在本项目中,"CSS3D缩略图预览概念_HTML_JavaScript_下载.zip" 涉及到了Web开发中的几个关键知识点,主要集中在HTML、JavaScript以及CSS3的3D变换技术上。我们将深入探讨这些技术,并了解如何将它们整合在一起创建一...

    关于css排版的几点心得

    了解这两个概念能避免不必要的样式冲突。 8. **清除浮动**:使用浮动时,可能会遇到浮动元素影响其后的元素布局的问题。可以使用`clear: both`或`clearfix`类来清除浮动。 9. **CSS预处理器**:Sass、Less和Stylus...

    精通Ajax_基础概念_核心技术与典型案例

    最后一部分通过几个大型的实例,让读者深入领会Ajax技术在实际网络项目中的优势,也让读者体验这种优势所带来的优越性能。  本书适用于初、中级网络开发者,对于高级开发人员也很有启发。没有接触过Ajax的入门者...

    初学Web标准的几个误区,css,web

    ### 初学Web标准的几个误区 #### 误区一:仅为通过校验而标准化 - **核心要点**:Web标准的本质在于实现内容与表现的分离,而非单纯追求代码的校验通过。通过将样式(CSS)与内容(HTML)分离,可以更高效地管理...

    css权威指南PDF带标签高清

    在CSS的世界里,我们首先要理解的是它的核心概念——层叠样式表。CSS是一种用于描述HTML或XML(包括如SVG、MathML等各种XML方言)文档呈现的语言,它的主要任务是控制网页的布局和外观。通过使用CSS,开发者可以将...

    css网站布局实录-2

    它主要涵盖了以下几个核心知识点: 1. **CSS基础**:书中首先介绍了CSS的基础概念,包括选择器、属性和值,这些都是理解和编写CSS样式的基础。读者会学习如何通过CSS控制文本样式、颜色、字体、对齐方式等基本元素...

    div_css.zip

    在"div_css.zip"中,可能包含了以下几个方面的内容: 1. **基础概念**:首先,学习者会接触到CSS和DIV的基本概念,理解它们在网页设计中的作用和关系。例如,如何使用CSS选择器来定位和操作DOM中的元素,以及如何...

    css练习示例.rar

    通过分析压缩包内的文件,我们可以探讨几个重要的CSS知识点。 首先,我们看到有三个CSS文件:css练习1.css、css练习2.css和css练习3.css。这些文件很可能包含了不同的CSS样式规则,用以控制HTML文档的呈现。CSS允许...

    CSS3.0精美参考手册

    《CSS3.0精美参考手册》是一本专为前端开发者设计的专业指南,它详细阐述了CSS3.0的所有核心概念和技术。CSS(层叠样式表)是网页设计中不可或缺的一部分,用于控制网页元素的样式、布局和表现。随着技术的发展,CSS...

Global site tag (gtag.js) - Google Analytics