好的,以下是一篇详细的 CSS 基础入门指南,希望能达到您要求的字数和内容深度。
学习 CSS:基础入门指南
欢迎来到精彩的 CSS 世界!如果你已经了解了一些 HTML 的基础知识,并且想要让你的网页看起来更漂亮、更有条理,那么学习 CSS(Cascading Style Sheets,层叠样式表)是必不可少的一步。CSS 赋予了网页生命力,让我们可以控制每一个元素的颜色、大小、位置、字体,甚至实现各种动态效果和复杂的布局。
这篇指南将带你从零开始,逐步掌握 CSS 的核心概念和基础语法。我们将深入浅出地讲解如何使用 CSS 来美化和布局你的网页,为你未来的前端开发之路打下坚实的基础。
本文适合对象:
- 对网页开发感兴趣的完全初学者。
- 已经了解基础 HTML,希望学习如何美化和布局网页的人。
- 想要系统复习 CSS 基础知识的人。
你需要准备什么?
- 一台电脑。
- 一个文本编辑器(如 VS Code, Sublime Text, Atom 等)。
- 一个现代浏览器(如 Chrome, Firefox, Edge 等)。
- 一些基础的 HTML 知识(知道什么是标签、元素、属性等)。
准备好了吗?让我们开始吧!
第一章:CSS 是什么?为什么需要它?
1.1 什么是 CSS?
CSS,全称 Cascading Style Sheets,中文译为“层叠样式表”。它的主要作用是控制网页的外观和样式。你可以把 HTML 看作是网页的骨架(定义了内容结构:这是一个标题,这是一个段落,这是一张图片),而 CSS 就像是皮肤、服装、妆容,用来定义这些骨架元素的呈现方式(标题是什么颜色,段落用什么字体,图片显示多大,元素之间的距离是多少等)。
1.2 为什么需要 CSS?
在 CSS 出现之前,开发者使用 HTML 的属性来控制样式,比如 <font color="red">
或 <table border="1">
。这种方式存在很多问题:
- 样式与结构混杂: HTML 文件变得非常臃肿,难以阅读和维护。
- 重复劳动: 如果网站有很多页面,而所有页面都有相似的样式,你需要一遍又一遍地在每个 HTML 文件中重复相同的样式代码。
- 修改困难: 想要改变一个元素的样式(比如网站所有段落的字体大小),你需要在每一个 HTML 文件中找到所有段落标签并修改它们的字体属性,这几乎是不可能高效完成的任务。
CSS 完美地解决了这些问题:
- 分离关注点: CSS 将网页的样式与 HTML 结构完全分离。HTML 负责内容和结构,CSS 负责样式和表现。这使得代码更清晰、更易于理解和维护。
- 提高效率: 你可以将所有的样式规则写在一个或几个 CSS 文件中,然后在多个 HTML 页面中引用这些 CSS 文件。修改一个 CSS 文件就可以影响到所有引用它的页面,大大提高了工作效率。
- 更强的控制力: CSS 提供了比 HTML 属性强大得多的样式控制能力,可以实现更复杂、更精美的设计。
- 响应式设计基础: CSS 是实现响应式网页设计的关键技术,可以根据用户的设备(电脑、平板、手机)自动调整网页的布局和样式,提供更好的用户体验。
简单来说,HTML 负责“是什么”,CSS 负责“长什么样”。它们是构建现代网页不可或缺的两大基石。
第二章:CSS 基础语法
学习任何一门编程或标记语言,首先要掌握的就是它的基本语法。CSS 的语法相对直观。
一个基本的 CSS 规则由两部分组成:选择器 (Selector) 和 声明块 (Declaration Block)。
css
/* 这是一个 CSS 规则示例 */
p {
color: blue;
font-size: 16px;
}
让我们拆解这个规则:
-
选择器 (Selector):
p
- 选择器告诉浏览器,这条 CSS 规则应该应用到哪个或哪些 HTML 元素上。
- 在这个例子中,
p
选择器选中了页面中所有的<p>
(段落)元素。
-
声明块 (Declaration Block):
{ color: blue; font-size: 16px; }
- 声明块包含了一个或多个声明 (Declaration),用大括号
{}
包围。 - 每个声明都指定了要设置的样式属性及其值。
- 声明由 属性 (Property) 和 值 (Value) 组成,之间用冒号
:
分隔。 - 多个声明之间用分号
;
分隔。 - 在这个例子中,有两个声明:
color: blue;
:将元素的文本颜色设置为蓝色。font-size: 16px;
:将元素的字体大小设置为 16 像素。
- 声明块包含了一个或多个声明 (Declaration),用大括号
CSS 注释:
与 HTML 类似,CSS 也有注释。CSS 注释以 /*
开始,以 */
结束。注释用于解释代码或暂时禁用代码,不会被浏览器解析执行。
“`css
/ 这是一个单行注释 /
p {
color: blue; / 这也是一个注释,解释颜色 /
font-size: 16px;
}
/ 这是一个
多行
注释 /
“`
第三章:如何将 CSS 应用到 HTML?
有三种主要的方式可以将 CSS 代码应用到 HTML 文件中:
- 内联样式 (Inline CSS)
- 内部样式表 (Internal CSS)
- 外部样式表 (External CSS)
3.1 内联样式 (Inline CSS)
内联样式是直接在 HTML 元素的 style
属性中编写 CSS 规则。
“`html
这是一个使用了内联样式的段落。
这是一个没有内联样式的段落。
“`
优点:
- 简单直接,适用于对单个元素应用少量特殊样式。
缺点:
- 样式与 HTML 结构高度耦合,违背了 CSS 的初衷。
- 可维护性极差,修改样式需要修改每个元素的
style
属性。 - 无法复用样式。
- 强烈不推荐在实际项目中广泛使用。
3.2 内部样式表 (Internal CSS)
内部样式表是将 CSS 代码放在 HTML 文件的 <head>
标签内的 <style>
标签中。
“`html
欢迎学习 CSS
这是一个使用了内部样式表的段落。
另一个段落也会应用相同的样式。
“`
优点:
- 相对于内联样式,将 CSS 代码集中存放,更容易管理。
- 适用于样式仅对当前 HTML 页面生效的场景(例如,一些测试页面或单页应用)。
缺点:
- 如果网站有多个页面,每个页面都需要复制粘贴相同的样式代码,仍然存在重复劳动。
- 不利于样式的复用和整个网站的统一风格管理。
3.3 外部样式表 (External CSS)
外部样式表是将 CSS 代码保存在一个单独的 .css
文件中,然后在 HTML 文件中使用 <link>
标签引用它。这是最推荐和最常用的方式。
步骤:
-
创建一个 CSS 文件,例如
style.css
。在文件中只编写 CSS 规则,不包含任何 HTML 标签。“`css
/ style.css /
body {
font-family: sans-serif;
margin: 0; / 移除默认的 body 外边距 /
padding: 0; / 移除默认的 body 内边距 /
}h1 {
color: purple;
border-bottom: 2px solid purple;
padding-bottom: 10px;
}.highlight {
color: orange;
font-weight: bold;
}
“` -
在需要应用这个样式的 HTML 文件的
<head>
标签中,使用<link>
标签引用它。“`html
<!DOCTYPE html>
外部样式表示例
这是一个标题
这是一个普通段落。
这段文本被高亮显示。
“`rel="stylesheet"
:表示链接的文件是一个样式表。href="style.css"
:指定 CSS 文件的路径。如果 CSS 文件在子文件夹中,需要写相对路径,例如href="css/style.css"
。
优点:
- 完全分离 HTML 结构和 CSS 样式,代码清晰,易于维护。
- 样式可复用,同一个 CSS 文件可以被多个 HTML 页面引用,实现网站统一风格。
- 浏览器可以将 CSS 文件缓存起来,提高网站加载速度(当用户访问同一个网站的其他页面时,如果样式文件没有变化,无需重新下载)。
- 最符合现代 Web 开发的最佳实践。
总结: 对于任何非最简单的测试页面,都应该优先使用外部样式表。
第四章:核心概念 – 选择器 (Selectors)
选择器是 CSS 的核心,它们决定了你的样式规则将作用于哪些 HTML 元素。掌握常见的选择器是学习 CSS 的关键一步。
4.1 基本选择器
-
元素选择器 (Type Selector): 选中所有指定类型的 HTML 元素。
css
p { /* 选中所有 <p> 元素 */ }
h2 { /* 选中所有 <h2> 元素 */ }
div { /* 选中所有 <div> 元素 */ } -
类选择器 (Class Selector): 选中所有具有指定
class
属性的元素。在 CSS 中,类选择器以点.
开头。
html
<p class="important">重要信息</p>
<div class="important">也很重要</div>
css
.important { /* 选中所有 class="important" 的元素 */
color: red;
font-weight: bold;
}
注意: 一个元素可以有多个类,用空格分隔,例如<p class="important highlight">
。 -
ID 选择器 (ID Selector): 选中具有指定
id
属性的唯一元素。在 CSS 中,ID 选择器以井号#
开头。
html
<div id="header">网站头部</div>
<!-- 注意:id 在一个页面中应该是唯一的 -->
css
#header { /* 选中 id="header" 的元素 */
background-color: #f0f0f0;
padding: 20px;
}
注意: ID 在一个 HTML 文档中必须是唯一的。ID 选择器的优先级高于类选择器和元素选择器。 -
通用选择器 (Universal Selector): 选中页面中的所有元素。以星号
*
表示。
“`css- { / 选中页面中所有元素 /
box-sizing: border-box; / 这是一个常用的重置样式 /
margin: 0; / 移除所有元素的默认外边距 /
padding: 0; / 移除所有元素的默认内边距 /
}
“`
注意: 通用选择器会影响所有元素,可能会降低性能,谨慎使用。
- { / 选中页面中所有元素 /
4.2 组合选择器 (Combinator Selectors)
组合选择器用于选择基于它们与其他元素的关系的元素。
-
后代选择器 (Descendant Selector): 选中作为指定元素的后代的元素(可以是子元素、孙子元素等)。用空格分隔。
html
<div class="container">
<p>这是一个段落</p>
<span>
<p>这是 span 里的段落</p>
</span>
</div>
css
.container p { /* 选中所有 class="container" 元素内的所有 <p> 元素 */
color: green;
} -
子元素选择器 (Child Selector): 选中作为指定元素的直接子元素的元素。用大于号
>
分隔。
html
<div class="container">
<p>这是一个段落 (直接子元素)</p>
<span>
<p>这是 span 里的段落 (非直接子元素)</p>
</span>
</div>
css
.container > p { /* 选中所有 class="container" 元素的直接子元素 <p> */
color: blue; /* 只有第一个段落会变成蓝色 */
} -
相邻兄弟选择器 (Adjacent Sibling Selector): 选中紧接在指定元素后面的第一个兄弟元素。用加号
+
分隔。
html
<p>第一个段落</p>
<p>第二个段落</p>
<div>一个 div</div>
<p>第三个段落</p>
css
p + p { /* 选中紧接在 <p> 元素后面的第一个 <p> 元素 */
margin-top: 20px; /* 第二个段落会有一个上外边距 */
} -
通用兄弟选择器 (General Sibling Selector): 选中紧接在指定元素后面的所有兄弟元素。用波浪号
~
分隔。
html
<p>第一个段落</p>
<h2>一个标题</h2>
<p>第二个段落</p>
<div>一个 div</div>
<p>第三个段落</p>
css
h2 ~ p { /* 选中紧接在 <h2> 元素后面的所有 <p> 兄弟元素 */
background-color: yellow; /* 第二个和第三个段落会有一个黄色背景 */
}
4.3 属性选择器 (Attribute Selectors)
根据元素的属性及其值来选择元素。
[attribute]
:选中所有带有指定属性的元素。
css
a[href] { /* 选中所有带有 href 属性的 <a> 元素 */
text-decoration: none;
}[attribute="value"]
:选中属性值等于指定值的元素。
css
input[type="text"] { /* 选中所有 type="text" 的 <input> 元素 */
border: 1px solid gray;
}[attribute~="value"]
:选中属性值中包含指定词语(以空格分隔)的元素。
html
<p data-info="important message"></p>
<p data-info="warning"></p>
css
p[data-info~="important"] { /* 选中 data-info 属性值中包含 "important" 词语的 <p> */
color: red;
}[attribute|="value"]
:选中属性值以指定值开头,后面紧跟着连字符-
的元素,或者属性值就是指定值的元素(常用于语言属性lang
或自定义属性)。
html
<p lang="en"></p>
<p lang="en-US"></p>
<p lang="fr"></p>
css
p[lang|="en"] { /* 选中 lang 属性值为 "en" 或以 "en-" 开头的 <p> */
font-style: italic;
}[attribute^="value"]
:选中属性值以指定值开头的元素。
css
a[href^="https"] { /* 选中所有 href 属性值以 "https" 开头的 <a> */
color: green;
}[attribute$="value"]
:选中属性值以指定值结尾的元素。
css
a[href$=".pdf"] { /* 选中所有 href 属性值以 ".pdf" 结尾的 <a> */
background: url(pdf-icon.png) no-repeat right center;
padding-right: 20px; /* 为图标留出空间 */
}[attribute*="value"]
:选中属性值中包含指定值的元素(任意位置)。
css
a[href*="example.com"] { /* 选中所有 href 属性值中包含 "example.com" 的 <a> */
border: 1px dotted blue;
}
4.4 伪类 (Pseudo-classes)
伪类用于选中处于特定状态的元素,或者根据它们在文档树中的位置来选择元素,而不需要在 HTML 中添加额外的类或 ID。伪类以冒号 :
开头。
常见的伪类用于链接状态:
a:link
:选中未被访问过的链接。a:visited
:选中已被访问过的链接。a:hover
:选中鼠标指针悬停在其上的元素。a:active
:选中被用户激活(点击)的元素。
css
a:link {
color: blue;
}
a:visited {
color: purple;
}
a:hover {
color: red;
text-decoration: underline;
}
a:active {
color: orange;
}
重要提示: 通常建议按照 L-V-H-A(Link, Visited, Hover, Active)的顺序来书写这四个伪类规则,以确保它们能够按预期工作,因为它们之间存在层叠和特异性问题。
其他常用的伪类:
:focus
:选中当前获得焦点的元素(常用于表单输入框)。:first-child
:选中作为其父元素的第一个子元素的元素。:last-child
:选中作为其父元素的最后一个子元素的元素。:nth-child(n)
:选中作为其父元素的第 n 个子元素的元素(n 可以是数字、关键词even
或odd
,或表达式如2n+1
)。:not(selector)
:选中不匹配指定选择器的元素。:empty
:选中没有子元素(包括文本节点)的元素。
“`css
input:focus { / 当输入框获得焦点时 /
outline: 2px solid blue;
}
p:first-child { / 选中父元素的第一个
子元素 /
font-weight: bold;
}
li:nth-child(odd) { / 选中列表中奇数行的
background-color: #f0f0f0;
}
div:not(.special) { / 选中所有不是 class=”special” 的
margin-bottom: 10px;
}
“`
4.5 伪元素 (Pseudo-elements)
伪元素用于选中元素内容的特定部分,或者在元素内容的前面或后面插入内容,而不需要修改 HTML 结构。伪元素以双冒号 ::
开头(虽然旧版本 CSS 使用单冒号,但双冒号是推荐的标准)。
::before
:在元素内容的前面插入内容(需要配合content
属性使用)。::after
:在元素内容的后面插入内容(需要配合content
属性使用)。::first-line
:选中元素的第一行文本。::first-letter
:选中元素的第一个字母。::selection
:选中用户当前高亮的文本。
“`css
p::first-line { / 选中所有
元素的第一行 /
font-variant: small-caps; / 小号大写字母 /
}
h2::after { / 在所有
元素内容的后面插入一个点 /
content: ” .”;
color: gray;
}
a[href$=”.pdf”]::before { / 在指向 PDF 的链接前面插入一个图标 /
content: url(“pdf-icon-small.png”); / 插入图片内容 /
margin-right: 5px;
}
::selection { / 当用户选中文本时 /
background-color: yellow;
color: black;
}
“`
掌握这些选择器是编写高效和精准 CSS 的基础。你可以组合使用不同的选择器来定位更特定的元素(例如 div.container > p.important:last-child
)。
第五章:核心概念 – 属性 (Properties) 和值 (Values)
选择器告诉我们对“谁”应用样式,而属性和值则告诉我们应用“什么”样式。CSS 提供了数百种属性,用于控制元素的方方面面。这里我们介绍一些最常用和最基础的属性。
5.1 颜色 (Color)
color
: 设置文本颜色。background-color
: 设置元素背景颜色。
颜色的值有很多表示方法:
- 预定义颜色名:
red
,blue
,green
,white
,black
等。 - 十六进制记号:
#RRGGBB
或#RGB
,例如#ff0000
(红色),#0000ff
(蓝色),#336699
。 - RGB 函数:
rgb(red, green, blue)
,值可以是 0-255 或 0%-100%,例如rgb(255, 0, 0)
(红色),rgb(0, 0, 255)
(蓝色),rgb(51, 102, 153)
。 - RGBA 函数:
rgba(red, green, blue, alpha)
,多一个 alpha 参数控制透明度,0 表示完全透明,1 表示完全不透明。例如rgba(0, 0, 0, 0.5)
(半透明黑色)。 - HSL 函数:
hsl(hue, saturation, lightness)
,基于色相、饱和度、亮度。例如hsl(0, 100%, 50%)
(红色)。 - HSLA 函数:
hsla(hue, saturation, lightness, alpha)
,HSL 加上透明度。
css
p {
color: #333; /* 深灰色文本 */
background-color: rgba(255, 255, 0, 0.2); /* 半透明黄色背景 */
}
5.2 文本和字体 (Text and Font)
font-family
: 设置字体。可以指定多个字体作为备选,浏览器会按顺序查找用户系统中可用的字体。
css
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
注意: 如果字体名称包含空格,需要用引号括起来。通常建议以一个通用字体族(如sans-serif
,serif
,monospace
)作为备选列表的最后一个。font-size
: 设置字体大小。常见单位有px
(像素),em
(相对于父元素字体大小),rem
(相对于根元素html
字体大小),%
(相对于父元素字体大小的百分比)。
css
font-size: 16px;
font-size: 1.2em; /* 父元素字体大小的 1.2 倍 */
font-size: 1.5rem; /* 根元素字体大小的 1.5 倍 */
font-size: 120%;font-weight
: 设置字体粗细。常用值有normal
,bold
,或数字值 100-900 (400 对应normal
, 700 对应bold
)。
css
font-weight: bold;
font-weight: 700;font-style
: 设置字体样式。常用值有normal
,italic
(斜体),oblique
(倾斜)。text-align
: 设置文本对齐方式。常用值有left
,right
,center
,justify
(两端对齐)。text-decoration
: 设置文本装饰。常用值有none
(移除链接下划线等),underline
,overline
,line-through
。line-height
: 设置行高,即文本基线之间的距离。可以是一个数字(相对于字体大小的倍数)或具体单位。
css
line-height: 1.5; /* 行高是字体大小的 1.5 倍 */
line-height: 24px;letter-spacing
: 设置字母之间的间距。word-spacing
: 设置单词之间的间距。text-transform
: 控制文本的大小写。uppercase
(全部大写),lowercase
(全部小写),capitalize
(首字母大写)。
“`css
h1 {
font-family: Georgia, serif;
font-size: 2em; / 根元素字体大小的 2 倍 /
font-weight: normal;
text-align: center;
text-decoration: underline;
}
p {
font-size: 1rem; / 根元素字体大小 /
line-height: 1.6;
text-indent: 2em; / 首行缩进 /
}
“`
5.3 尺寸 (Dimensions)
width
: 设置元素的宽度。height
: 设置元素的高度。max-width
: 设置元素的最大宽度。min-width
: 设置元素的最小宽度。max-height
: 设置元素的最大高度。min-height
: 设置元素的最小高度。
值可以使用各种单位:px
, %
, em
, rem
, vw
(viewport width, 视口宽度百分比), vh
(viewport height, 视口高度百分比), auto
(自动计算)。
“`css
div {
width: 500px;
height: 300px;
max-width: 100%; / 最大宽度不超过父元素的 100% /
min-height: 100px;
}
img {
max-width: 100%; / 图片宽度不超过其父容器的宽度 /
height: auto; / 高度按比例自适应 /
}
“`
5.4 背景 (Background)
background-color
: 设置背景颜色。background-image
: 设置背景图片。值是url()
。background-repeat
: 控制背景图片的重复方式。no-repeat
(不重复),repeat
(平铺),repeat-x
(沿 x 轴重复),repeat-y
(沿 y 轴重复)。background-position
: 控制背景图片的初始位置。可以使用关键词 (如top
,center
,bottom
,left
,right
) 或百分比/长度值 (如50% 50%
,10px 20px
)。background-size
: 控制背景图片的大小。auto
,cover
(覆盖整个元素,可能裁剪),contain
(包含在元素内,保持比例,可能留白), 或具体尺寸。background-attachment
: 控制背景图片是否随页面滚动。scroll
(随滚动),fixed
(固定在视口)。
也可以使用 background
缩写属性一次设置多个背景属性:
“`css
div {
/ background: color image repeat position / size attachment; /
background: #e0e0e0 url(“pattern.png”) repeat top left / 100px auto scroll;
/ 或者更简单的 /
background: url(“hero.jpg”) no-repeat center center / cover;
color: white; / 背景是图片时,设置文本颜色方便阅读 /
}
“`
第六章:核心概念 – CSS 盒模型 (Box Model)
理解 CSS 盒模型是进行网页布局的基础。网页上的每一个元素都可以被看作一个矩形的盒子,这个盒子由四个部分组成:
- Content (内容): 元素的实际内容区域,如文本、图片等。其大小由
width
和height
属性决定。 - Padding (内边距): 内容区域和边框之间的空间。
padding
是透明的,其背景色是元素的背景色。 - Border (边框): 围绕在内边距和内容区域之外的边框。
- Margin (外边距): 边框之外,元素与其他元素之间的空间。
margin
是透明的,其背景色是其父元素的背景色或页面的背景色。
(图片来源: MDN Web Docs)
6.1 控制盒模型的各个部分
你可以分别控制盒模型的每个部分的四个方向(上、右、下、左):
- Padding:
padding-top
,padding-right
,padding-bottom
,padding-left
。也可以使用padding
缩写属性:padding: 10px;
(上下左右都是 10px)padding: 10px 20px;
(上下 10px,左右 20px)padding: 10px 20px 30px;
(上 10px,左右 20px,下 30px)padding: 10px 20px 30px 40px;
(上 10px,右 20px,下 30px,左 40px)
- Border:
border-width
,border-style
,border-color
。也可以使用border
缩写属性:border: width style color;
。每个方向也可以单独设置:border-top
,border-right
,border-bottom
,border-left
。
css
border: 1px solid black; /* 1px 粗细,实线,黑色 */
border-bottom: 2px dashed red; /* 底部是 2px 粗细,虚线,红色 */
border-radius: 5px; /* 圆角边框 */ - Margin:
margin-top
,margin-right
,margin-bottom
,margin-left
。也可以使用margin
缩写属性,用法同padding
。
css
margin: 20px auto; /* 上下 20px,左右自动 (常用于块级元素水平居中) */
注意: 相邻块级元素的上下margin
会发生外边距折叠 (Margin Collapse),最终的垂直外边距是两个元素中较大的那个,而不是它们的和。左右外边距不会折叠。
6.2 box-sizing
属性
默认情况下,CSS 盒模型是 content-box
。这意味着你设置的 width
和 height
只包含内容区域。padding
和 border
的大小会额外增加元素的总尺寸。
css
div {
width: 200px;
padding: 20px;
border: 5px solid black;
}
/* 在 content-box 模型下,这个 div 的实际总宽度是 200px (content) + 20px*2 (padding) + 5px*2 (border) = 250px */
这在布局时常常令人困惑。box-sizing: border-box;
模型改变了这种计算方式。当你设置 box-sizing: border-box;
时,你设置的 width
和 height
会包含内容、内边距和边框。内边距和边框会从内容区域的大小中扣除。
css
div {
width: 200px;
padding: 20px;
border: 5px solid black;
box-sizing: border-box; /* 改变盒模型 */
}
/* 在 border-box 模型下,这个 div 的实际总宽度就是 200px。 */
/* 内部内容区域的大小会是 200px - 20px*2 (padding) - 5px*2 (border) = 150px */
border-box
模型通常在布局时更直观和易于控制。很多 CSS reset 或 normalize 样式表会设置 * { box-sizing: border-box; }
作为全局规则。
第七章:核心概念 – 显示类型 (Display Property)
display
属性是 CSS 中最重要的属性之一,它决定了元素如何呈现在页面上,以及如何与其他元素互动。理解不同的显示类型对于布局至关重要。
常见的 display
值:
-
display: block;
- 块级元素。总是从新行开始,并尽可能占据其父容器的全部可用宽度。
- 可以设置
width
,height
,margin-top
,margin-bottom
,padding-top
,padding-bottom
以及左右内外边距。 - 常见的块级元素有
<div>
,<p>
,<h1>
到<h6>
,<ul>
,<li>
,<form>
,<header>
,<footer>
,<article>
,<section>
等。
-
display: inline;
- 行内元素。不会强制换行,宽度和高度由其内容决定,只占据所需的空间。
- 不能设置
width
和height
。 - 不能设置
margin-top
和margin-bottom
(左右外边距可以设置)。 - 不能设置
padding-top
和padding-bottom
(左右内边距可以设置,但不会影响相邻行元素的布局)。 - 常见的行内元素有
<span>
,<a>
,<strong>
,<em>
,<img>
,<br>
,<input>
,<label>
,<select>
等。
-
display: inline-block;
- 行内块级元素。可以像行内元素一样在同一行排列,但同时又拥有块级元素的特性。
- 可以设置
width
,height
,margin
,padding
。 - 常用于需要设置宽高但又希望它们在同一行排列的元素,比如导航菜单项、按钮等。
-
display: none;
- 元素不会被显示,并且不占据任何空间。就像元素完全不存在一样。
“`css
/ 将 span 元素变为块级元素 /
span {
display: block;
width: 100px;
height: 50px;
background-color: lightblue;
margin-bottom: 10px;
}
/ 将 div 元素变为行内块级元素 /
div {
display: inline-block;
width: 150px;
height: 80px;
background-color: lightgreen;
margin-right: 10px;
}
/ 隐藏某个元素 /
.hidden {
display: none;
}
“`
还有一些其他的 display
值,如 flex
和 grid
,它们是更现代、更强大的布局方式,我们将在后续学习或更高级的指南中介绍。对于基础入门,理解 block
, inline
, inline-block
, none
已经足够。
第八章:定位 (Positioning)
CSS 的定位属性 (position
) 允许你更精确地控制元素在页面上的位置。它与 top
, right
, bottom
, left
属性配合使用。
-
position: static;
- 默认值。元素按照正常的文档流排列。
- 此时
top
,right
,bottom
,left
属性无效。
-
position: relative;
- 相对定位。元素仍然占据其在正常文档流中的空间。
- 可以使用
top
,right
,bottom
,left
属性相对于其正常位置进行偏移。 - 相对定位的元素可以作为其子元素(如果子元素是绝对定位)的包含块(containing block)。
html
<div style="border: 1px solid black;">
<p style="position: relative; top: 10px; left: 20px;">
这个段落相对于其正常位置向下偏移 10px,向右偏移 20px。
</p>
<p>这是另一个段落,位置正常。</p>
</div> -
position: absolute;
- 绝对定位。元素会从正常的文档流中移除,不再占据空间。
- 可以使用
top
,right
,bottom
,left
属性相对于其最近的已定位祖先元素(position 不是 static 的祖先元素)进行定位。如果找不到已定位的祖先元素,则相对于初始包含块(通常是浏览器视口或<html>
元素)进行定位。 - 绝对定位元素的大小通常由内容决定,除非设置了
width
和height
。 - 可以使用
z-index
控制元素的堆叠顺序(值越大越靠上)。
html
<div style="position: relative; width: 300px; height: 200px; border: 1px solid blue;">
这是一个相对定位的父容器。
<div style="position: absolute; top: 20px; right: 20px; background-color: yellow;">
这个绝对定位的子元素相对于父容器定位。
</div>
</div> -
position: fixed;
- 固定定位。元素会从正常的文档流中移除。
- 可以使用
top
,right
,bottom
,left
属性相对于浏览器视口 (viewport) 进行定位。 - 元素在页面滚动时会保持固定位置,常用于创建固定头部、底部或侧边导航。
- 可以使用
z-index
控制元素的堆叠顺序。
css
.fixed-header {
position: fixed;
top: 0;
left: 0;
width: 100%;
background-color: #f1f1f1;
padding: 10px 0;
text-align: center;
}
html
<div class="fixed-header">这是一个固定在顶部的标题</div>
<!-- 页面内容需要有足够的 padding-top 来避免被固定元素遮挡 -->
<div style="padding-top: 50px;">页面主要内容...</div> -
position: sticky;
- 粘性定位。元素起初按照正常文档流排列(类似于
relative
),但在滚动超出某个阈值时,会固定在指定位置(类似于fixed
)。 - 需要指定至少一个
top
,right
,bottom
,left
属性才能生效。 - 常用于实现滚动到一定位置时吸顶或吸底的效果。
css
.sticky-sidebar {
position: sticky;
top: 10px; /* 滚动到距离视口顶部 10px 时固定 */
/* left/right/bottom 也可以 */
} - 粘性定位。元素起初按照正常文档流排列(类似于
定位属性是实现一些特定布局效果的强大工具,但需要结合理解文档流和包含块的概念来使用。
第九章:层叠与特异性 (Cascading and Specificity)
CSS 的全称是“层叠样式表”,这里的“层叠”是 CSS 的一个核心概念。它决定了当多个样式规则应用到同一个元素上并且发生冲突时,哪条规则会最终生效。
层叠遵循以下规则(优先级从高到低):
-
重要性 (Importance): 带有
!important
标记的规则 > 普通规则。!important
会强制应用该规则,但强烈不推荐过度使用它,因为它破坏了正常的层叠规则,使得调试和维护变得困难。
-
来源 (Origin): 用户样式表 > 作者样式表 > 浏览器默认样式表。
- 用户可以在浏览器中设置自己的样式表(User Stylesheet),优先级高于网站作者的样式。
- 作者样式表(你写的 CSS)优先级高于浏览器内置的默认样式表(User Agent Stylesheet)。
-
特异性 (Specificity): 选择器越具体的规则,优先级越高。这是最常见的冲突解决方式。
- 特异性是通过给不同的选择器类型分配点值来计算的。一个常见的计算方法是:
- 内联样式:1000 点
- ID 选择器 (
#id
):100 点 - 类选择器 (
.class
)、属性选择器 ([attr]
)、伪类 (:pseudo-class
):10 点 - 元素选择器 (
element
)、伪元素 (::pseudo-element
):1 点 - 通用选择器 (
*
)、组合器 (>
,+
,~
, 空格)、否定伪类
:not()内部的选择器不会增加特异性(但
:not()` 本身算作 10 点)。
- 比较特异性时,从左到右比较(1000s > 100s > 10s > 1s)。例如,(0,1,0) 比 (0,0,10) 高。
- 例如:
p
: 特异性 = (0,0,1).my-class
: 特异性 = (0,10,0)#my-id
: 特异性 = (100,0,0)div p
: 特异性 = (0,0,2) (两个元素选择器)#header p
: 特异性 = (100,0,1) (一个 ID, 一个元素).container .item
: 特异性 = (0,20,0) (两个类)
“`css
p { / (0,0,1) /
color: blue;
}
.red-text { / (0,10,0) /
color: red;
}main-paragraph { / (100,0,0) /
color: green;
}
html
这是一个段落。
``
p
*规则应用,颜色为 blue。
.red-text
*规则应用,颜色变为 red (特异性更高)。
#main-paragraph
*规则应用,颜色变为 green (特异性最高)。
* 如果元素还有内联样式`,则最终颜色是 orange (内联样式特异性最高 1000)。
- 特异性是通过给不同的选择器类型分配点值来计算的。一个常见的计算方法是:
-
书写顺序 (Source Order): 如果多条规则具有相同的特异性,则在样式表中后面出现的规则会覆盖前面出现的规则。
理解层叠和特异性对于调试 CSS 冲突至关重要。当你发现某个样式没有生效时,很可能是被特异性更高的规则覆盖了。使用浏览器的开发者工具检查元素,可以看到哪些规则被应用,哪些被覆盖,以及覆盖的原因。
9.1 继承 (Inheritance)
某些 CSS 属性是可以继承的。这意味着如果你为一个父元素设置了这些属性,它的子元素会默认继承这个值,除非子元素自己也设置了相同属性的值。
常见的可继承属性有:
- 文本相关属性:
color
,font-family
,font-size
,font-weight
,font-style
,text-align
,line-height
,letter-spacing
,word-spacing
,text-transform
等。 - 列表属性:
list-style
。 - 某些表属性:
border-collapse
,border-spacing
,caption-side
,empty-cells
。 - 用户界面属性:
cursor
,visibility
。
不可继承的属性:
- 盒模型相关属性:
width
,height
,margin
,padding
,border
,box-sizing
,display
等。 - 定位属性:
position
,top
,right
,bottom
,left
,z-index
。 - 背景属性:
background-color
,background-image
,background-repeat
,background-position
,background-size
等。
“`html
这个段落会继承父元素的颜色和字体大小,但不会继承边框。
“`
理解继承可以帮助你写更简洁的 CSS,例如设置 body
或 html
的基本字体和颜色,让整个页面的元素都继承这些默认值。
第十章:开发者工具 (Developer Tools)
学习 CSS 最好的伙伴就是浏览器的开发者工具。几乎所有现代浏览器(Chrome, Firefox, Edge, Safari)都内置了强大的开发者工具,可以帮助你查看、调试和修改页面的 HTML、CSS 和 JavaScript。
如何打开开发者工具:
- 大多数浏览器:按
F12
键。 - 右键点击页面元素,选择“检查” (Inspect) 或“检查元素” (Inspect Element)。
使用开发者工具调试 CSS:
- 元素面板 (Elements Panel): 查看页面的 HTML 结构。当你选中一个元素时,旁边的样式面板会显示所有应用到这个元素上的 CSS 规则。
- 样式面板 (Styles Panel): 显示选中元素的 CSS 规则。
- 你可以看到哪些规则是直接应用到元素上的,哪些是继承的。
- 你可以看到哪些规则被特异性更高的规则覆盖了(通常被画上删除线)。
- 你可以临时修改属性的值,或者添加新的属性,实时查看效果。这对于测试不同的样式非常有用。
- 你可以看到该规则来自哪个文件及行号(如果是外部 CSS)。
- 计算样式面板 (Computed Panel): 显示选中元素所有 CSS 属性的最终计算值。这里可以看到经过层叠、继承等规则处理后,元素实际拥有的样式值。这在你对哪个规则最终生效感到困惑时非常有帮助。
- 盒模型视图: 通常在样式面板下方或旁边,会有一个可视化的盒模型图,显示选中元素的 Content, Padding, Border, Margin 的大小。鼠标悬停在盒模型图的各个部分,页面上对应的区域会高亮显示。
熟练使用开发者工具是每一个前端开发者必备的技能。它能极大地提高你调试 CSS 问题的效率。
第十一章:CSS 规范与兼容性
CSS 由万维网联盟(W3C)维护和发展。新的 CSS 模块和特性不断被添加到规范中。不同的浏览器在实现这些新特性时可能存在差异或滞后,这就是所谓的浏览器兼容性问题。
作为初学者,你使用的基础 CSS 属性(如颜色、字体、盒模型、显示类型、基本定位)在所有现代浏览器中都有很好的支持。但当你学习更高级的特性(如 Flexbox, Grid, 动画, 滤镜等)时,需要了解它们的支持情况。
- MDN Web Docs (Mozilla Developer Network): 是一个非常权威和全面的前端开发文档网站。查阅 CSS 属性或选择器时,MDN 页面底部通常会有一个兼容性表格,列出主流浏览器对该特性的支持情况。
- Can I Use: 一个专门查询 Web 技术浏览器兼容性的网站(caniuse.com)。输入 CSS 属性或选择器名称,就可以看到详细的兼容性报告。
在开发过程中,可以使用 CSS 预处理器(如 Sass, Less)来处理一些兼容性前缀问题,或者使用 PostCSS 这样的工具来自动添加浏览器前缀。但在基础入门阶段,先专注于掌握核心概念即可。
第十二章:下一步学习什么?
掌握了这篇指南中的基础知识后,你已经具备了使用 CSS 美化和简单布局网页的能力。但是 CSS 的世界远不止于此。接下来,你可以继续学习以下更高级或相关的概念:
- Flexbox (弹性盒子): 一种强大的现代布局模型,用于在容器中对项目进行水平或垂直方向的排列和对齐。是构建响应式布局的关键。
- Grid (网格布局): 另一种强大的二维布局模型,适用于创建复杂的网格结构,如整个页面的布局。
- 响应式设计 (Responsive Design): 使用媒体查询 (
@media
) 根据设备特性(屏幕宽度、分辨率等)应用不同的样式,使网站能在不同设备上良好显示。 - 伪类和伪元素的更多用法: 探索
:nth-child
,:not
,::before
,::after
等在复杂选择和装饰中的应用。 - 过渡 (Transitions) 和 动画 (Animations): 使用 CSS 实现元素的平滑过渡和复杂动画效果。
- CSS 变量 (Custom Properties): 定义可复用的变量来存储颜色、字体大小等值,提高 CSS 的可维护性。
- CSS 方法论: 学习一些组织 CSS 代码的流行方法论,如 BEM (Block, Element, Modifier),OOCSS (Object-Oriented CSS),SMACSS 等,帮助你构建大型、可维护的 CSS 项目。
- CSS 预处理器: 学习 Sass, Less 等,它们提供了变量、嵌套、混入、函数等功能,使 CSS 更具编程性,提高开发效率。
- CSS 框架: 了解 Bootstrap, Tailwind CSS, Bulma 等 CSS 框架,它们提供了大量的预设样式和组件,可以快速构建美观的页面。
一步一个脚印,不断实践和探索,你会在 CSS 的世界中走得更远。
第十三章:实践出真知
理论知识固然重要,但学习 CSS 最有效的方式是实践。
- 动手写代码: 打开你的文本编辑器,创建一个 HTML 文件和一个 CSS 文件,尝试应用这篇指南中介绍的每一个选择器、属性和概念。
- 模仿: 找一个你喜欢的网页,尝试模仿它的某个部分(如导航栏、一个卡片、一个按钮)的样式和布局。使用开发者工具查看它是如何实现的(虽然高级布局可能使用了 Flexbox/Grid,但基础的颜色、字体、间距等可以模仿)。
- 做小项目: 从一个简单的静态页面开始,逐步增加复杂度,如一个个人简历页面、一个产品展示页面、一个简单的博客布局等。
- 参与挑战: 参加一些在线的 CSS 编码挑战平台(如 CodePen Challenges, Frontend Mentor, CSS Battle)来锻炼你的技能。
不要害怕犯错误,调试是学习过程中的重要组成部分。利用好开发者工具,分析问题,解决问题。
结语
恭喜你走出了学习 CSS 的第一步!本指南为你介绍了 CSS 的基本概念、语法、如何应用样式、核心的盒模型、显示类型、定位以及层叠规则。这些是构建任何网页外观的基础。
CSS 是一个庞大且不断发展的领域,但掌握了这些基础,你就已经拥有了继续深入学习和探索的钥匙。记住,HTML 是内容的骨架,CSS 是美丽的衣裳。通过它们,你可以创造出无限精彩的网页世界。
持续学习,不断实践,享受用 CSS 创造视觉效果的乐趣吧!祝你学习顺利!