html+css最佳实践
html5语义化标签
HTML5 中新引入的语义化标签大多数默认都是块级元素(block-level elements)
| 标签 | 描述 |
|---|---|
<article> |
定义文档内的文章。 |
<aside> |
定义页面内容之外的内容。 |
<bdi> |
定义与其他文本不同的文本方向。 |
<details> |
定义用户可查看或隐藏的额外细节。 |
<dialog> |
定义对话框或窗口。 |
<figcaption> |
定义 <figure> 元素的标题。 |
<figure> |
定义自包含内容,比如图示、图表、照片、代码清单等等。 |
<footer> |
定义文档或节的页脚。 |
<header> |
定义文档或节的页眉。 |
<main> |
定义文档的主内容。 |
<mark> |
定义重要或强调的内容。 |
<menuitem> |
定义用户能够从弹出菜单调用的命令/菜单项目。 |
<nav> |
定义文档内的导航链接。 |
<progress> |
定义任务进度。 |
<section> |
定义文档中的节。 |
<summary> |
定义 <details> 元素的可见标题。 |
<time> |
定义日期/时间。 |
CSS选择器
CSS选择器是用于指定应用样式规则的HTML元素的方法。通过使用不同的选择器,你可以精确地控制页面上几乎任何元素的样式。
- 元素选择器(Element Selector)
描述:根据元素名称匹配。
1
p { color: blue; } /* 所有<p>标签内的文本颜色变为蓝色 */
- 类选择器(Class Selector)
描述:以
.开头,根据元素的class属性值匹配。1
.note { font-size: 12px; } /* 所有带有class="note"的元素字体大小设置为12px */
- ID选择器(ID Selector)
描述:以
#开头,根据元素的id属性值匹配。1
#header { background-color: yellow; } /* id为"header"的元素背景色设置为黄色 */
- 属性选择器(Attribute Selector)
- 描述:根据元素的属性和/或属性值来匹配。
[type="text"] { width: 200px; }匹配所有type属性值为”text”的输入框。[hreflang|="en"] { color: green; }匹配所有hreflang属性值以”en”开头的链接。
- 后代选择器(Descendant Selector)
描述:由空格分隔的两个或多个选择器组成,选择第一个选择器所选元素内部的所有后代元素。
1
div p { color: red; } /* div内部的所有<p>标签文本颜色变为红色 */
- 子选择器(Child Selector)
描述:由
>符号连接的选择器,选择某个元素的直接子元素。1
ul > li { list-style-type: square; } /* 直接位于<ul>下的<li>列表项前缀改为方块 */
- 相邻兄弟选择器(Adjacent Sibling Selector)
描述:由
+符号连接的选择器,选择紧跟在另一个元素之后的元素。1
h1 + p { font-weight: bold; } /* 紧跟在<h1>后的第一个<p>标签字体加粗 */
- 泛型兄弟选择器(General Sibling Selector)
描述:由
~符号连接的选择器,选择与另一元素同属一个父元素的所有后续兄弟元素。1
h1 ~ p { color: gray; } /* <h1>后所有同级的<p>标签文本颜色设为灰色 */
- 伪类选择器(Pseudo-class Selector)
- 描述:以
:开头,用于向某些选择器添加特殊的效果。a:hover { text-decoration: underline; }当鼠标悬停在链接上时显示下划线。input:focus { border: 2px solid blue; }输入框获得焦点时边框变为蓝色。
- 伪元素选择器(Pseudo-element Selector)
- 描述:以
::开头,用于向某些选择器添加额外的内容或样式。p::first-line { font-weight: bold; }给段落的第一行文本加粗。q::before { content: "“"; } q::after { content: "”"; }在引用文本前后添加引号。
链接伪类选择器
:link:适用于尚未被访问过的链接。
1
2
3a:link {
color: blue;
}
:visited:适用于已被用户访问过的链接。
注意:出于隐私考虑,浏览器对
:visited样式的控制有限制,例如不能改变border或者outline属性。1
2
3a:visited {
color: purple;
}
:hover:当用户的指针悬停在元素上时应用的样式。
这个伪类不仅限于链接,也可以应用于其他元素。
1
2
3a:hover {
color: red;
}
:active:当链接被激活(通常是指点击或按下的瞬间)时应用的样式。
1
2
3a:active {
color: orange;
}
:focus:当元素获得焦点时应用的样式,比如通过键盘导航到该链接。
这个伪类同样可以应用于其他可聚焦的元素,如表单控件。
1
2
3a:focus {
outline: 2px solid yellow;
}
使用顺序 (LVHA)
为了确保样式按照预期生效,应该遵循特定的顺序来声明链接伪类选择器,这个顺序是 LVHA:
:link:visited:hover:active
这种顺序保证了当多个伪类同时适用时,正确的一个会覆盖之前的样式。例如,如果一个链接既是已访问的又处于悬停状态,则 :hover 的样式会覆盖 :visited 的样式。
组合使用
你可以将多个伪类组合起来以创建更复杂的效果。例如,要为获得焦点且被悬停的链接设置样式,可以这样写:
1 | a:focus:hover { |
focus伪类选择器
:focus 是 CSS 中的一个伪类选择器,用于选择当前获得焦点的元素。当用户通过点击、使用键盘导航(例如 Tab 键)或者通过 JavaScript 程序性地将焦点设置到某个元素上时,该元素即处于 :focus 状态。
功能与用途
- 交互反馈:为用户提供视觉上的提示,表明当前哪个元素是可以操作的或已经选择了。
- 可访问性:确保那些依赖键盘导航的用户也能清楚地知道他们在页面中的位置,这对于提高网站和应用的无障碍性非常重要。
- 样式控制:允许开发者自定义获得焦点时的样式,比如改变边框颜色、添加背景色、调整文本颜色等。
1 | /* 当输入框获得焦点时改变边框颜色 */ |
CSS 伪元素
CSS 伪元素用于设置元素指定部分的样式
CSS3 引入了双冒号 :: 来区分伪类和伪元素,尽管单冒号 : 仍然支持向后兼容旧版本。
::before在选中元素的内容前插入生成的内容。
1
2
3
4p::before {
content: "提示: ";
color: blue;
}- 这将在每个
<p>元素的内容前添加“提示: ”字样,并将其颜色设置为蓝色。
- 这将在每个
::after在选中元素的内容后插入生成的内容。
1
2
3
4p::after {
content: " - 完";
color: green;
}- 这将在每个
<p>元素的内容后添加“ - 完”字样,并将其颜色设置为绿色。
- 这将在每个
::first-line仅应用于块级元素,用于设置元素第一行文本的样式。
1
2
3
4p::first-line {
font-weight: bold;
color: red;
}- 这将使
<p>元素的第一行文本变为粗体且颜色为红色。
- 这将使
::first-letter仅应用于块级元素,用于设置元素首字母的样式。
1
2
3
4p::first-letter {
font-size: 200%;
color: purple;
}- 这将使
<p>元素的第一个字母大小变为原来的两倍,并将其颜色设置为紫色。
- 这将使
::selection(非标准但广泛支持)用于更改用户选中文本时的外观。
1
2
3
4::selection {
background-color: yellow;
color: red;
}- 当用户选中页面上的文本时,背景色会变成黄色,文字颜色会变成红色。
:nth-child()
:nth-child() 是一种 CSS 伪类选择器,它允许你根据元素在其父元素中的位置来选择一个或多个特定的子元素。这个选择器非常强大,可以用来创建复杂的样式规则而无需对每个目标元素单独添加类或ID。
1 | :nth-child(an+b) |
an+b是一个公式,用于确定哪些子元素会被选中。a表示周期(每隔几个元素)。n是计数器,从0开始递增。b是偏移量,表示从第几个元素开始计算。
:root
:root 这个 CSS 伪类匹配文档树的根元素。对于 HTML 来说,:root 表示<html>元素,除了优先级更高之外,与html 选择器相同。
1 | /* 选择文档的根元素(HTML 中的 <html>) */ |
声明全局 CSS 变量
在声明全局 CSS 变量时 :root 会很有用:
1 | :root { |
使用 CSS 自定义属性
- 自定义属性是由 CSS 作者定义的,它包含的值可以在整个文档中重复使用
- 由自定义属性标记设定值(比如:
--main-color: black;) - 由 var() 函数来获取值(比如:
color: var(--main-color);) - 自定义属性在某个地方存储一个值,然后在其他许多地方引用它
- 另一个好处是语义化的标识。比如,
--main-text-color会比#00ff00更易理解 - 自定义属性受级联的约束,并从其父级继承其值
基本用法
声明一个自定义属性,属性名需要以两个减号(--)开始,属性值则可以是任何有效的 CSS 值
和其他属性一样,自定义属性也是写在规则集之内的,如下:
1 | element { |
注意,规则集所指定的选择器定义了自定义属性的可见作用域。
通常的最佳实践是定义在根伪类 :root下,这样就可以在 HTML 文档的任何地方访问到它了:
1 | :root { |
注意
自定义属性名是大小写敏感的,--my-color 和 --My-color 会被认为是两个不同的自定义属性
Var()函数
如前所述,使用一个局部变量时用 var() 函数包裹以表示一个合法的属性值:
1 | element { |
自定义属性的继承性
自定义属性会继承。这意味着如果在一个给定的元素上,没有为这个自定义属性设置值,在其父元素上的值会被使用。
1 | <div class="one"> |
1 | .two { |
在这个情况下, var(--test) 的结果分别是:
- 对于元素
class="two":10px - 对于元素
class="three":2em - 对于元素
class="four":10px(继承自父属性) - 对于元素
class="one":非法值,会变成自定义属性的默认值
注意,这些是自定义属性,并不是你在其他编程语言中遇到的实际的变量。这些值仅当需要的时候才会计算,而并不会按其他规则进行保存。
自定义属性备用值
用 var()函数可以定义多个备用值(fallback value),当给定值未定义时将会用备用值替换。
备注: 备用值并不是用于实现浏览器兼容性的。如果浏览器不支持 CSS 自定义属性,备用值也没什么用。它仅对支持 CSS 自定义属性的浏览器提供了一个备份机制,该机制仅当给定值未定义或是无效值的时候生效。
- 函数的第一个参数是自定义属性的名称。
- 如果提供了第二个参数,则表示备用值
- 当自定义属性值无效时生效。第二个参数可以嵌套,但是不能继续平铺展开下去了
1 | .two { |
第二个例子展示了如何处理一个以上的 fallback。该技术可能会导致性能问题,因为它花了更多的时间在处理这些变量上。
JavaScript 中的值
在 JavaScript 中获取或者修改 CSS 变量和操作普通 CSS 属性是一样的:
1 | // 获取一个 Dom 节点上的 CSS 变量 |
最佳单位实践
1. px(像素)
- 描述:绝对单位,基于显示设备的物理像素点。尽管称为“像素”,但在高分辨率屏幕上可能会有所不同。
- 特点:
- 提供了精确的尺寸控制。
- 不随浏览器设置或父元素字体大小的变化而变化。
- 适用场景:当你需要固定的、不可缩放的尺寸时使用,例如细线边框、图标大小等。
1 | div { |
2. em
- 描述:相对单位,相对于当前元素的字体大小。如果父元素设置了字体大小,则
em的值基于该字体大小计算。 - 特点:
- 允许根据文本大小调整布局。
- 如果嵌套元素较多,可能导致复杂度增加,因为每个层级的字体大小都会影响下一层级。
- 适用场景:适用于希望随着父元素的字体大小变化而变化的设计部分,如段落、标题等。
1 | p { |
3. rem(root em)
- 描述:类似于
em,但它是相对于根元素(即<html>标签)的字体大小来计算。 - 特点:
- 简化了响应式设计中的尺寸管理,因为它只依赖于根元素的字体大小。
- 避免了
em可能导致的嵌套层级问题。
- 适用场景:非常适合用于整个页面的基础布局和排版,因为它提供了更一致的尺寸关系。
1 | html { |
4. vw 和 vh(视窗宽度和高度百分比)
- 描述:
1vw等于视口宽度的 1%,1vh等于视口高度的 1%。 - 特点:
- 动态地适应用户的屏幕尺寸。
- 特别适合创建全屏或基于视口比例的设计。
- 适用场景:当需要设计能够自适应不同屏幕尺寸的内容时非常有用,比如全屏背景图、响应式布局等。
1 | div { |
5. %(百分比)
- 描述:相对单位,相对于包含块(通常是父元素)的宽度或高度。
- 特点:
- 提供了一种灵活的方式来定义元素大小,使其可以根据其容器大小自动调整。
- 可以应用于宽度、高度、内边距、外边距等多个属性。
- 适用场景:流体布局中,尤其是那些需要根据父容器大小动态调整自身大小的元素。
1 | div { |
6. fr(网格分数单位)
- 描述:仅在 CSS Grid 布局中使用的单位,表示可用空间的一部分。
- 特点:
- 提供了一种简单的方法来分配网格轨道的空间。
- 可以轻松创建复杂的网格布局。
- 适用场景:在构建基于网格的布局时,用于定义行和列的大小。
1 | .container { |
@media
@media CSS@规则可用于基于一个或多个媒体查询的结果来应用样式表的一部分。使用它,你可以指定一个媒体查询和一个 CSS 块,当且仅当该媒体查询与正在使用其内容的设备匹配时,该 CSS 块才能应用于该文档。
备注: 在 JavaScript 中,可以使用 CSSMediaRuleCSS 对象模型接口访问使用 @media 创建的规则。
语法
@media at 规则可置于你代码的顶层或嵌套至其他任何的 at 条件规则组中。
1 | /* 在你的代码的顶层 */ |
媒体类型
媒体类型(media type)描述设备的一般类别。除非使用 not 或 only 逻辑运算符,否则媒体类型是可选的,并且会(隐式地)应用 all 类型。
all适用于所有设备
print适用于在打印预览模式下在屏幕上查看的分页材料和文档
screen主要用于屏幕
块元素
块级元素的特点
独占一行:
- 每个块级元素通常会从新的一行开始,并且在其后也会创建换行,使得它与前后元素之间有明显的分隔。
宽度默认为容器宽度:
- 如果没有特别指定宽度,块级元素的宽度将自动扩展到其包含块(通常是父元素)的100%。
可以设置高度和宽度:
- 与内联元素不同,块级元素支持设置明确的高度和宽度属性。
支持内边距和外边距:
- 可以使用
padding和margin属性来控制元素内部和外部的空间。
- 可以使用
可包含其他块级或内联元素:
- 块级元素不仅能够容纳文本内容,还可以包含其他块级元素或内联元素。
影响布局流:
- 块级元素会影响文档的正常流,它们按照出现的顺序垂直排列。
生成新的块格式化上下文 (BFC):
- 某些块级元素(如浮动元素、绝对定位元素等)可以生成新的 BFC,这有助于解决某些布局问题,例如清除浮动。
常见的块级元素
<div>:通用的块容器,用于分组和布局。<p>:段落元素,用来定义文本段落。<h1>至<h6>:标题元素,表示不同级别的标题,<h1>是最高级别,<h6>是最低级别。<ul>,<ol>,<li>:无序列表、有序列表及其列表项。<table>,<tr>,<td>,<th>:表格及其行、单元格(数据单元格和表头单元格)。<form>:表单元素,用于收集用户输入。<header>,<footer>,<nav>,<article>,<section>,<aside>:HTML5 引入的语义化标签,用于定义页面的不同部分。<blockquote>:长引用块,通常用于显示较长的引用文本。<pre>:预格式化文本,保留文本中的空格和换行符。<address>:用于联系信息的容器,通常用于网页底部的作者或组织的联系信息。<figure>,<figcaption>:用于媒体内容(如图片、图表、照片等)及其标题。
行内元素
行内元素的特点
不独占一行:
- 行内元素不会自动换行,它们与其他行内元素或文本内容在同一行内显示,直到同一行的空间用尽为止。
宽度和高度由内容决定:
- 行内元素的宽度和高度仅限于其包含的内容,不会扩展到父容器的宽度。
不影响文档流布局:
- 行内元素不会影响周围块级元素的布局,它们只在当前行内占据空间。
有限的内边距和外边距控制:
- 可以设置
padding和margin,但这些属性对水平方向的影响有效,而垂直方向(上下)的padding和margin不会影响周围的行内元素的位置。
- 可以设置
不能包含块级元素:
- 行内元素通常只能包含文本和其他行内元素,不能直接包含块级元素。如果尝试这样做,浏览器可能会根据规范调整结构,或者产生不可预期的效果。
支持行内样式:
- 行内元素可以接受各种 CSS 样式,如颜色、字体大小、文本装饰等,但不像块级元素那样可以自由地控制宽高。
常见的行内元素
<a>:超链接,用于创建指向其他页面或资源的链接。<span>:通用行内容器,用于对文本或其他行内内容进行分组和样式化,没有语义含义。<strong>:定义重要文本,通常以粗体显示。<em>:定义强调文本,通常以斜体显示。<img>:嵌入图像,尽管它是一个替换元素(replaced element),但它默认是行内显示。<br>:强制换行,不需要结束标签。<i>:定义斜体文本,通常用于技术限制下的强调。<b>:定义粗体文本,用于非语义性的视觉加粗。<u>:定义下划线文本,虽然不再推荐用于强调,但在某些情况下仍然有用。<s>,<strike>:定义删除线文本,表示已被废弃或不再准确的内容。<abbr>:定义缩写词或首字母缩略词,提供额外信息给用户。<code>:定义一段计算机代码,适用于展示编程语言片段。<var>:定义变量,通常用于数学表达式或编程上下文中。<mark>:定义标记或高亮文本,常用于突出显示搜索结果中的关键词。<q>:定义短引用,会自动添加引号。<sub>,<sup>:定义下标和上标文本,常用于化学公式或数学方程。<time>:定义日期或时间,提供了机器可读的格式。
行内块元素
行内块元素的特点
行内块元素(inline-block elements)结合了行内元素和块级元素的特性。它们在布局中像行内元素一样,不会自动换行,并且可以与其他行内内容并排显示;但同时,它们又像块级元素一样,可以设置宽度、高度、内边距(padding)和外边距(margin),并且这些属性会对元素的实际尺寸产生影响。以下是行内块元素的主要特点:
不独占一行:
- 行内块元素不会自动换行,而是与其他行内或行内块元素在同一行内显示。
可设置宽度和高度:
- 与块级元素类似,行内块元素支持明确地设置
width和height属性,这会影响它们在页面上的大小。
- 与块级元素类似,行内块元素支持明确地设置
支持内边距和外边距:
- 行内块元素可以应用所有方向的
padding和margin,并且这些属性会按照预期工作,包括垂直方向。
- 行内块元素可以应用所有方向的
不影响文档流布局:
- 行内块元素不会打断周围的文本流或其他行内内容,它们只是占据自身所需的水平空间。
可以包含其他行内或行内块元素:
- 虽然不如块级元素那样常见,但行内块元素也可以包含其他行内或行内块元素。
保持行内特性:
- 尽管它们具有某些块级元素的特性,但行内块元素仍然保留了作为行内元素的基本行为,例如它们不会像块级元素那样自动扩展到父容器的宽度。
常用的行内块元素
<img>:图像元素,默认为行内块显示模式。<input>:表单输入控件,如文本框、按钮等,默认为行内块显示。<textarea>:多行文本输入区域,默认为行内块显示。<select>:下拉列表框,默认为行内块显示。<button>:按钮元素,默认为行内块显示。<label>:表单标签,默认为行内显示,但经常被设置为行内块以更好地控制布局。- 自定义元素:通过 CSS 明确设置
display: inline-block;的任何 HTML 元素都可以成为行内块元素。例如,<span>或<div>可以根据需要设置为行内块显示。
font系列
字体系列
使用通用字体系列
如果你希望文档使用一种 sans-serif 字体,但是你并不关心是哪一种字体,以下就是一个合适的声明:
1 | body {font-family: sans-serif;} |
这样用户代理就会从 sans-serif 字体系列中选择一个字体(如 Helvetica),并将其应用到 body 元素。因为有继承,这种字体选择还将应用到 body 元素中包含的所有元素,除非有一种更特定的选择器将其覆盖。
使用font-family系列
下面的例子为所有 h1 元素设置了 Georgia 字体:
1 | h1 {font-family: Georgia;} |
这样的规则同时会产生另外一个问题,如果用户代理上没有安装 Georgia 字体,就只能使用用户代理的默认字体来显示 h1 元素。
我们可以通过结合特定字体名和通用字体系列来解决这个问题:
1 | h1 {font-family: Georgia, serif;} |
如果读者没有安装 Georgia,但安装了 Times 字体(serif 字体系列中的一种字体),用户代理就可能对 h1 元素使用 Times。尽管 Times 与 Georgia 并不完全匹配,但至少足够接近。
因此,我们建议在所有 font-family 规则中都提供一个通用字体系列。这样就提供了一条后路,在用户代理无法提供与规则匹配的特定字体时,就可以选择一个候选字体。
如果您对字体非常熟悉,也可以为给定的元素指定一系列类似的字体。要做到这一点,需要把这些字体按照优先顺序排列,然后用逗号进行连接:
1 | p {font-family: Times, TimesNR, 'New Century Schoolbook', |
根据这个列表,用户代理会按所列的顺序查找这些字体。如果列出的所有字体都不可用,就会简单地选择一种可用的 serif 字体。
使用引号
您也许已经注意到了,上面的例子中使用了单引号。只有当字体名中有一个或多个空格(比如 New York),或者如果字体名包括 # 或 $ 之类的符号,才需要在 font-family 声明中加引号。
单引号或双引号都可以接受。但是,如果把一个 font-family 属性放在 HTML 的 style 属性中,则需要使用该属性本身未使用的那种引号:
1 | <p style="font-family: Times, TimesNR, 'New Century Schoolbook', Georgia, |
字体大小
font-size 属性设置文本的大小
字体加粗
font-weight 属性设置文本的粗细。
使用 bold 关键字可以将文本设置为粗体。
关键字 100 ~ 900 为字体指定了 9 级加粗度。如果一个字体内置了这些加粗级别,那么这些数字就直接映射到预定义的级别,100 对应最细的字体变形,900 对应最粗的字体变形。数字 400 等价于 normal,而 700 等价于 bold。
字体风格
font-style 属性最常用于规定斜体文本。
该属性有三个值:
- normal - 文本正常显示
- italic - 文本斜体显示
- oblique - 文本倾斜显示
italic 和 oblique 的区别
斜体(italic)是一种简单的字体风格,对每个字母的结构有一些小改动,来反映变化的外观
与此不同,倾斜(oblique)文本则是正常竖直文本的一个倾斜版本
通常情况下,italic 和 oblique 文本在 web 浏览器中看上去完全一样。
字体变形
font-variant 属性可以设定小型大写字母。
小型大写字母不是一般的大写字母,也不是小写字母,这种字母采用不同大小的大写字母。
font复合属性写法
font 属性是一个简写的复合属性,可以同时设置多个字体相关属性。它的语法如下:
1 | selector { |
[font-style] (可选):定义字体样式(如斜体)。可能的值包括:
normalitalicoblique
[font-variant] (可选):定义是否使用小型大写字母。可能的值包括:
normalsmall-caps
[font-weight] (可选):定义字体粗细。可能的值包括:
normalboldbolderlighter- 数字值 (
100,200, …,900)
[font-size] (必需):定义字体大小。可以是绝对尺寸(如
12px)、相对尺寸(如1.2em)或关键字(如larger、smaller)。/ [line-height] (可选):定义行高。如果提供,则必须紧跟在
font-size后面,并用斜杠分隔。它可以是数字、百分比或长度单位。[font-family] (必需):定义字体族。应该按照优先级顺序列出一系列字体名称,以逗号分隔。通常包括首选字体和通用字体族(如
serif,sans-serif,monospace等)作为后备选项。
CSS背景
background-color
background-color 属性指定元素的背景色。
通过 CSS,颜色通常由以下方式指定:
- 有效的颜色名称 - 比如 “red”
- 十六进制值 - 比如 “#ff0000”
- RGB 值 - 比如 “rgb(255,0,0)”
不透明度 / 透明度
opacity 属性指定元素的不透明度/透明度。取值范围为 0.0 - 1.0。值越低,越透明:
注意:使用 opacity 属性为元素的背景添加透明度时,其所有子元素都继承相同的透明度。
使用 RGBA 的透明度
如果您不希望对子元素应用不透明度,例如上面的例子,请使用 RGBA 颜色值。下面的例子设置背景色而不是文本的不透明度:
RGBA 颜色值指定为:rgba(red, green, blue, alpha)。alpha 参数是介于 0.0(完全透明)和 1.0(完全不透明)之间的数字。
1 | div { |
background-image
background-image属性指定用作元素背景的图像。默认情况下,图像会重复,以覆盖整个元素。
background-size
指定宽度和高度:可以使用具体的长度值(如像素px)、百分比或自动来设定背景图像的尺寸。例如,
background-size: 50px 100px;将宽度设置为50px,高度设置为100px。使用百分比:当使用百分比时,背景图像的大小是相对于其容器的宽度和高度而言的。例如,
background-size: 100% 100%;会使背景图像完全填充其容器,可能会导致图像变形,因为宽度和高度都被拉伸以匹配容器的尺寸。cover 关键字:
background-size: cover;会按比例缩放背景图像,使其完全覆盖背景区域。图像的比例保持不变,但是可能有一部分图像不会显示出来,因为它超出了容器的范围。contain 关键字:
background-size: contain;同样按比例缩放图像,但保证整个图像都可见。这意味着图像将被缩放到尽可能大的尺寸,同时仍完全适应内容区域,可能会在图像与容器之间留下空白空间。
background-repeat
默认情况下,
background-image属性在水平和垂直方向上都重复图像。**提示:**如果上面的图像仅在水平方向重复 (
background-repeat: repeat-x;),则背景看起来会更好:**提示:**如需垂直重复图像,请设置
background-repeat: repeat-y;。
background-repeat: no-repeat
background-repeat属性还可指定只显示一次背景图像:
background-position
background-position 属性用于指定背景图像的位置。
| 值 | 描述 |
|---|---|
| left-top right-center left-bottom | 如果您仅规定了一个关键词,那么第二个值将是”center”。默认值:0% 0%。 |
| x% y% | 第一个值是水平位置,第二个值是垂直位置。左上角是 0% 0%。右下角是 100% 100%。如果您仅规定了一个值,另一个值将是 50%。 |
| xpos ypos | 第一个值是水平位置,第二个值是垂直位置。左上角是 0 0。单位是像素 (0px 0px) 或任何其他的 CSS 单位。如果您仅规定了一个值,另一个值将是50%。您可以混合使用 % 和 position 值。 |
背景附着
background-attachment 属性指定背景图像是应该滚动还是固定的(不会随页面的其余部分一起滚动):
- 指定应该固定背景图像:
1 | body { |
- 指定背景图像应随页面的其余部分一起滚动:
1 | body { |
color
CSS 语法
1 | color: color|initial|inherit; |
属性值
| 值 | 描述 |
|---|---|
| color_name | 规定颜色值为颜色名称的颜色(比如 red)。 |
| hex_number | 规定颜色值为十六进制值的颜色(比如 #ff0000)。 |
| rgb_number | 规定颜色值为 rgb 代码的颜色(比如 rgb(255,0,0))。 |
| inherit | 规定应该从父元素继承颜色。 |
text-align
定义和用法
text-align 属性规定元素中的文本的水平对齐方式。
CSS 语法
1 | text-align: left|right|center|justify|initial|inherit; |
属性值
| 值 | 描述 |
|---|---|
| left | 把文本排列到左边。默认值:由浏览器决定。 |
| right | 把文本排列到右边。 |
| center | 把文本排列到中间。 |
| justify | 实现两端对齐文本效果。 |
| inherit | 规定应该从父元素继承 text-align 属性的值。 |
text-decoration
text-decoration 属性规定添加到文本的修饰。
CSS 语法
1 | text-decoration: text-decoration-line text-decoration-color text-decoration-style text-decoration-thickness|initial|inherit; |
属性值
| 值 | 描述 |
|---|---|
| text-decoration-line | 设置要使用的文本装饰类型(如下划线、上划线、划线)。 |
| text-decoration-color | 设置文字装饰的颜色。 |
| text-decoration-style | 设置文本装饰的样式(如实心、波浪形、点线、虚线、双线)。 |
| text-decoration-thickness | 设置装饰线的粗细。 |
| initial | 将此属性设置为其默认值。请参阅 initial。 |
| inherit | 从其父元素继承此属性。请参阅 inherit。 |
text-indent
text-indent 属性规定文本块中首行文本的缩进。
**注释:**允许使用负值。如果使用负值,那么首行会被缩进到左边。
**注意:**在 CSS 2.1 之前,text-indent 总是继承计算值,而不是声明值。
属性值
| 值 | 描述 |
|---|---|
| length | 定义固定的缩进。默认值:0。 |
| % | 定义基于父元素宽度的百分比的缩进。 |
| inherit | 规定应该从父元素继承 text-indent 属性的值。 |
line-height
line-height 属性设置行间的距离(行高)。
**注释:**不允许使用负值
CSS 语法
1 | line-height: normal|number|length|initial|inherit; |
属性值
| 值 | 描述 |
|---|---|
| normal | 默认。设置合理的行间距。 |
| number | 设置数字,此数字会与当前的字体尺寸相乘来设置行间距。 |
| length | 设置固定的行间距。 |
| % | 基于当前字体尺寸的百分比行间距。 |
| inherit | 规定应该从父元素继承 line-height 属性的值。 |
box-sizing 属性
为了更好地控制元素尺寸,CSS 提供了 box-sizing 属性:
content-box(默认值):width和height仅适用于内容区域,不包括padding和border。border-box:width和height包括padding和border,但不包括margin。这使得在设置固定宽度时更容易预测元素的实际尺寸。
flex布局
Flexbox 元素
要开始使用 Flexbox 模型,首先需要定义一个 Flex 容器。这通过设置容器的 display 属性为 flex 来完成。一旦定义了 Flex 容器,其直接子元素将自动成为 Flex 项目。
父元素(容器)
关键属性
display:设置为flex以创建一个 Flex 容器。flex-direction:决定主轴的方向,即 Flex 项目排列的方向。可以是row(默认),row-reverse,column或column-reverse。flex-wrap:控制 Flex 项目是否换行以及如何换行。选项包括nowrap(默认),wrap和wrap-reverse。flex-flow:flex-direction和flex-wrap的简写形式,允许同时设置这两个属性。justify-content:沿着主轴对齐 Flex 项目。可能的值有flex-start(默认),flex-end,center,space-between,space-around和space-evenly。align-items:沿着交叉轴对齐 Flex 项目。可选值包括stretch(默认),flex-start,flex-end,center和baseline。align-content:当有多条轴线时,沿着交叉轴对齐这些轴线。如果只有一条轴线,则此属性无效。选项类似于justify-content。
子元素(项目)
Flex 项目的特定属性允许进一步定制单个项目的布局行为:
order:定义项目在其容器内的顺序,默认值为0。数值越小,项目越靠前。flex-grow:指定项目相对于其他项目增长的空间比例。flex-shrink:指定项目相对于其他项目收缩的空间比例。flex-basis:定义项目在分配多余空间之前的初始大小。flex:flex-grow,flex-shrink和flex-basis的简写形式。align-self:覆盖容器中align-items对当前项目的设置,允许单独调整某个项目的对齐方式。建议大家在根元素声明所有需要使用到的样式,例如字体、颜色、大小等,这样你在书写盒子样式的时候会比较方便(自定义属性一般都是语义化标签)
尽量使用相对单位(例如em),在html设置字体大小,其他盒子使用相对单位,这样你可以通过调整html的字体大小来达到调整所有字体的目的
自顶向下书写css样式,养成良好习惯,配合@media媒体查询实现响应式布局