CSS基础教程
1. CSS简介与基础语法
1.什么是 CSS?
CSS 指的是层叠样式表* (Cascading Style Sheets)
CSS 描述了如何在屏幕、纸张或其他媒体上显示 HTML 元素
CSS 节省了大量工作。它可以同时控制多张网页的布局
外部样式表存储在 CSS 文件中
2.CSS语法?
CSS 规则集(rule-set)由选择器和声明块组成:
选择器指向您需要设置样式的 HTML 元素。声明块包含一条或多条用分号分隔的声明。每条声明都包含一个 CSS 属性名称和一个值,以冒号分隔。多条 CSS 声明用分号分隔,声明块用花括号括起来。
在此例中,所有<p>元素都将居中对齐,并带有红色文本颜色。
p { color: red; text-align: center; }
例子解释:
p 是 CSS 中的选择器(它指向要设置样式的 HTML 元素:<p>)。
color 是属性,red 是属性值
text-align 是属性,center 是属性值
3.CSS 注释
注释用于解释代码,以后在您编辑源代码时可能会有所帮助。浏览器会忽略注释。
位于<style>元素内的 CSS 注释,以 /* 开始,以 */ 结束。
/* 这是一条单行注释 */ p { color: red; }
您可以在代码中的任何位置添加注释。
p { color: red; /* 把文本设置为红色 */ }
注释能横跨多行。
/* 这是 一条多行的 注释 */ p { color: red; }
4.CSS使用
有三种插入样式表的方法:
外部CSS
通过使用外部样式表,您只需修改一个文件即可改变整个网站的外观!每张HTML页面必须在head部分的<link>元素内包含对外部样式表文件的引用。
<!DOCTYPE html> <html> <head> <link rel="stylesheet" type="text/css" href="mystyle.css"> </head> <body> <h1>This is a heading</h1> <p>This is a paragraph.</p> </body> </html>
外部样式表可以在任何文本编辑器中编写,并且必须以.css扩展名保存。
外部 .css 文件不应包含任何HTML标签。
"mystyle.css" 是这样的。
body { background-color: lightblue; } h1 { color: navy; margin-left: 20px; }
注意:请勿在属性值和单位之间添加空格(例如margin-left: 20 px;)。正确的写法是margin-left: 20px;。
内部CSS
如果一张HTML页面拥有唯一的样式,那么可以使用内部样式表。内部样式是在head部分的<style>元素中进行定义。
内部样式在HTML页面的<head>部分内的<style>元素中进行定义。
<!DOCTYPE html> <html> <head> <style> body { background-color: linen; } h1 { color: maroon; margin-left: 40px; } </style> </head> <body> <h1>This is a heading</h1> <p>This is a paragraph.</p> </body> </html>
行内CSS
行内样式(也称内联样式)可用于为单个元素应用唯一的样式。如需使用行内样式,请将 style 属性添加到相关元素。style 属性可包含任何 CSS 属性。
行内样式在相关元素的 "style" 属性中定义。
<!DOCTYPE html> <html> <body> <h1 style="color:blue;text-align:center;">This is a heading</h1> <p style="color:red;">This is a paragraph.</p> </body> </html>
提示:行内样式失去了样式表的许多优点(通过将内容与呈现混合在一起)。请谨慎使用此方法。
5.层叠顺序
当为某个 HTML 元素指定了多个样式时,会使用哪种样式呢?
页面中的所有样式将按照以下规则“层叠”为新的“虚拟”样式表,其中第一优先级最高:
1.行内样式(在 HTML 元素中)
2.外部和内部样式表(在 head 部分)
3.浏览器默认样式
因此,行内样式具有最高优先级,并且将覆盖外部和内部样式以及浏览器默认样式。
2. CSS基本样式
1.CSS颜色
指定颜色是通过使用预定义的颜色名称,或 RGB、HEX、HSL、RGBA、HSLA 值。
CSS颜色名
在 CSS 中,可以使用颜色名称来指定颜色。
CSS背景色
您可以为HTML元素设置背景色。
<h1 style="background-color:DodgerBlue;">China</h1> <p style="background-color:Tomato;">China is a great country!</p>
CSS文本颜色
您可以设置文本的颜色。
<h1 style="color:Tomato;">China</h1> <p style="color:DodgerBlue;">China is a great country!</p> <p style="color:MediumSeaGreen;">China, officially the People's Republic of China...</p>
CSS边框颜色
您可以设置边框的颜色。
<h1 style="border:2px solid Tomato;">Hello World</h1> <h1 style="border:2px solid DodgerBlue;">Hello World</h1> <h1 style="border:2px solid Violet;">Hello World</h1>
CSS颜色值
在CSS中,还可以使用RGB值、HEX值、HSL值、RGBA值或者HSLA值来指定颜色。
与颜色名 "Tomato" 等效的CSS颜色值。
与颜色名"Tomato"等效的CSS颜色值,但是透明度为50%。
<h1 style="background-color:rgb(255, 99, 71);">...</h1> <h1 style="background-color:#ff6347;">...</h1> <h1 style="background-color:hsl(9, 100%, 64%);">...</h1> <h1 style="background-color:rgba(255, 99, 71, 0.5);">...</h1> <h1 style="background-color:hsla(9, 100%, 64%, 0.5);">...</h1>
RGB颜色
在 CSS 中,可以使用下面的公式将颜色指定为RGB值。
rgb(red, green, blue)
每个参数 (red、green 以及 blue) 定义了 0 到 255 之间的颜色强度。
例如,rgb(255, 0, 0) 显示为红色,因为红色设置为最大值(255),其他设置为 0。
要显示黑色,请将所有颜色参数设置为 0,如下所示:rgb(0, 0, 0)。
要显示白色,请将所有颜色参数设置为 255,如下所示:rgb(255, 255, 255)。
RGBA值
RGBA颜色值是具有alpha通道的RGB颜色值的扩展,alpha指定了颜色的不透明度。
RGBA颜色值指定为:
rgba(red, green, blue, alpha)
alpha 参数是介于 0.0(完全透明)和 1.0(完全不透明)之间的数字:
2.CSS 背景
CSS 背景属性用于定义元素的背景效果。
CSS background-color
background-color 属性指定元素的背景色。
页面的背景色设置如下:
body { background-color: lightblue; }
opacity 属性指定元素的不透明度/透明度。取值范围为 0.0 - 1.0。值越低,越透明:
div { background-color: green; opacity: 0.3; }
注意:使用 opacity 属性为元素的背景添加透明度时,其所有子元素都继承相同的透明度。这可能会使完全透明的元素内的文本难以阅读。
3.CSS 背景图像
background-image
background-image 属性指定用作元素背景的图像。
默认情况下,图像会重复,以覆盖整个元素。
页面的背景图像可以像这样设置:
body { background-image: url("paper.gif"); }
注意:使用背景图像时,请使用不会干扰文本的图像。
还可以为特定元素设置背景图像,例如 <p> 元素:
p { background-image: url("paper.gif"); }
CSS background-repeat
默认情况下,background-image 属性在水平和垂直方向上都重复图像。
某些图像应只适合水平或垂直方向上重复,否则它们看起来会很奇怪,如下所示:
body { background-image: url("gradient_bg.png"); }
如果上面的图像仅在水平方向重复 (background-repeat: repeat-x;),则背景看起来会更好:
body { background-image: url("gradient_bg.png"); background-repeat: repeat-x; }
提示:如需垂直重复图像,请设置 background-repeat: repeat-y;。
CSS background-repeat: no-repeat
background-repeat 属性还可指定只显示一次背景图像:
body { background-image: url("tree.png"); background-repeat: no-repeat; }
CSS background-position
background-position 属性用于指定背景图像的位置。
把背景图片放在右上角:
body { background-image: url("tree.png"); background-repeat: no-repeat; background-position: right top; }
4.CSS 背景附着
CSS background-attachment
background-attachment 属性指定背景图像是应该滚动还是固定的(不会随页面的其余部分一起滚动):
body { background-image: url("tree.png"); background-repeat: no-repeat; background-position: right top; background-attachment: fixed; }
指定背景图像应随页面的其余部分一起滚动:
body { background-image: url("tree.png"); background-repeat: no-repeat; background-position: right top; background-attachment: scroll; }
5.CSS 背景简写
CSS background - 简写属性
如需缩短代码,也可以在一个属性中指定所有背景属性。它被称为简写属性。
而不是这样写:
body { background-color: #ffffff; background-image: url("tree.png"); background-repeat: no-repeat; background-position: right top; }
您能够使用简写属性 background:
使用简写属性在一条声明中设置背景属性:
body { background: #ffffff url("tree.png") no-repeat right top; }
在使用简写属性时,属性值的顺序为:
background-color
background-image
background-repeat
background-attachment
background-position
属性值之一缺失并不要紧,只要按照此顺序设置其他值即可。请注意,在上面的例子中,我们没有使用 background-attachment 属性,因为它没有值。
6.CSS 轮廓
轮廓是在元素周围绘制的一条线,在边框之外,以凸显元素。
CSS 拥有如下轮廓属性:
outline-style
outline-color
outline-width
outline-offset
outline
注意:轮廓与边框不同!不同之处在于:轮廓是在元素边框之外绘制的,并且可能与其他内容重叠。同样,轮廓也不是元素尺寸的一部分;元素的总宽度和高度不受轮廓线宽度的影响。
CSS 轮廓样式
outline-style 属性指定轮廓的样式,并可设置如下值:
dotted - 定义点状的轮廓。
dashed - 定义虚线的轮廓。
solid - 定义实线的轮廓。
double - 定义双线的轮廓。
groove - 定义 3D 凹槽轮廓。
ridge - 定义 3D 凸槽轮廓。
inset - 定义 3D 凹边轮廓。
outset - 定义 3D 凸边轮廓。
none - 定义无轮廓。
hidden - 定义隐藏的轮廓。
下例展示了不同的 outline-style 值:
演示不同的轮廓样式:
p.dotted {outline-style: dotted;} p.dashed {outline-style: dashed;} p.solid {outline-style: solid;} p.double {outline-style: double;} p.groove {outline-style: groove;} p.ridge {outline-style: ridge;} p.inset {outline-style: inset;} p.outset {outline-style: outset;}
效果如下:
CSS 轮廓宽度
outline-width 属性指定轮廓的宽度,并可设置如下值之一:
thin(通常为 1px)
medium(通常为 3px)
thick (通常为 5px)
特定尺寸(以 px、pt、cm、em 计)
下例展示了一些不同宽度的轮廓:
p.ex1 { border: 1px solid black; outline-style: solid; outline-color: red; outline-width: thin; } p.ex2 { border: 1px solid black; outline-style: solid; outline-color: red; outline-width: medium; } p.ex3 { border: 1px solid black; outline-style: solid; outline-color: red; outline-width: thick; } p.ex4 { border: 1px solid black; outline-style: solid; outline-color: red; outline-width: 4px; }
7.CSS 文本
文本颜色
color 属性用于设置文本的颜色。颜色由以下值指定:
颜色名 - 比如 "red"
十六进制值 - 比如 "#ff0000"
RGB 值 - 比如 "rgb(255,0,0)"
页面的默认文本颜色是在 body 选择器中定义的。
body { color: blue; } h1 { color: green; }
提示:对于 W3C compliant CSS:如果您定义了 color 属性,则还必须定义background-color 属性。
文本颜色和背景色
在本例中,我们定义了 background-color 属性和 color 属性:
body { background-color: lightgrey; color: blue; } h1 { background-color: black; color: white; }
CSS 文本对齐
text-align 属性用于设置文本的水平对齐方式。
文本可以左对齐或右对齐,或居中对齐。
下例展示了居中对齐以及左右对齐的文本(如果文本方向是从左到右,则默认为左对齐;如果文本方向是从右到左,则默认是右对齐):
h1 { text-align: center; } h2 { text-align: left; } h3 { text-align: right; }
当 text-align 属性设置为 "justify" 后,将拉伸每一行,以使每一行具有相等的宽度,并且左右边距是直的(就像在杂志和报纸中):
div { text-align: justify; }
文本方向
direction 和 unicode-bidi 属性可用于更改元素的文本方向:
p { direction: rtl; unicode-bidi: bidi-override; }
垂直对齐
vertical-align 属性设置元素的垂直对齐方式。
本例演示如何设置文本中图像的垂直对齐方式:
img.top { vertical-align: top; } img.middle { vertical-align: middle; } img.bottom { vertical-align: bottom; }
文字装饰
text-decoration 属性用于设置或删除文本装饰。
text-decoration: none; 通常用于从链接上删除下划线:
a { text-decoration: none; }
文本转换
text-transform 属性用于指定文本中的大写和小写字母。
它可用于将所有内容转换为大写或小写字母,或将每个单词的首字母大写:
p.uppercase { text-transform: uppercase; } p.lowercase { text-transform: lowercase; } p.capitalize { text-transform: capitalize; }
文字缩进
text-indent 属性用于指定文本第一行的缩进:
p { text-indent: 50px; }
字母间距
letter-spacing 属性用于指定文本中字符之间的间距。
下例演示如何增加或减少字符之间的间距:
h1 { letter-spacing: 3px; } h2 { letter-spacing: -3px; }
行高
line-height 属性用于指定行之间的间距:
p.small { line-height: 0.8; } p.big { line-height: 1.8; }
字间距
word-spacing 属性用于指定文本中单词之间的间距。
下例演示如何增加或减少单词之间的间距:
h1 { word-spacing: 10px; } h2 { word-spacing: -5px; }
文本阴影
text-shadow 属性为文本添加阴影。
最简单的用法是只指定水平阴影(2px)和垂直阴影(2px):
h1 { text-shadow: 2px 2px; }
接下来,向阴影添加颜色(红色):
h1 { text-shadow: 2px 2px red; }
8.CSS 字体
字体样式
font-style 属性主要用于指定斜体文本。
此属性可设置三个值:
normal - 文字正常显示
italic - 文本以斜体显示
oblique - 文本为“倾斜”(倾斜与斜体非常相似,但支持较少)
p.normal { font-style: normal; } p.italic { font-style: italic; } p.oblique { font-style: oblique; }
字体粗细
font-weight 属性指定字体的粗细:
p.normal { font-weight: normal; } p.thick { font-weight: bold; }
字体变体
font-variant 属性指定是否以 small-caps 字体(小型大写字母)显示文本。
在 small-caps 字体中,所有小写字母都将转换为大写字母。但是,转换后的大写字母的字体大小小于文本中原始大写字母的字体大小。
p.normal { font-variant: normal; } p.small { font-variant: small-caps; }
字体大小
font-size 属性设置文本的大小。
在网页设计中,能够管理文本大小很重要。但是,不应使用调整字体大小来使段落看起来像标题,或是使标题看起来像段落。
请始终使用正确的 HTML 标签,例如 <h1> - <h6> 用于标题,而 <p> 仅用于段落。
font-size 值可以是绝对或相对大小。
绝对尺寸:
将文本设置为指定大小
不允许用户在所有浏览器中更改文本大小(可访问性不佳)
当输出的物理尺寸已知时,绝对尺寸很有用
相对尺寸:
设置相对于周围元素的大小
允许用户在浏览器中更改文本大小
注释:如果您没有指定字体大小,则普通文本(如段落)的默认大小为 16px(16px = 1em)。
1.以像素设置字体大小
使用像素设置文本大小可以完全控制文本大小:
h1 { font-size: 40px; } h2 { font-size: 30px; } p { font-size: 14px; }
2.用 em 设置字体大小
为了允许用户调整文本大小(在浏览器菜单中),许多开发人员使用 em 而不是像素。
W3C 建议使用 em 尺寸单位。
1em 等于当前字体大小。浏览器中的默认文本大小为 16px。因此,默认大小 1em 为 16px。
可以使用这个公式从像素到 em 来计算大小:pixels/16=em。
h1 { font-size: 2.5em; /* 40px/16=2.5em */ } h2 { font-size: 1.875em; /* 30px/16=1.875em */ } p { font-size: 0.875em; /* 14px/16=0.875em */ }
在上例中,em 单位的文本大小与上一个例子中的像素大小相同。但是,若使用 em 尺寸,则可以在所有浏览器中调整文本大小。
不幸的是,旧版本的 Internet Explorer 仍然存在问题。放大文本时它比应该大的尺寸更大
3.响应式字体大小
可以使用 vw 单位设置文本大小,它的意思是“视口宽度”("viewport width")。
这样,文本大小将遵循浏览器窗口的大小,请调整浏览器窗口的大小,以查看字体大小如何缩放:
<h1 style="font-size:10vw">Hello World</h1>
视口(Viewport)是浏览器窗口的大小。 1vw = 视口宽度的 1%。如果视口为 50 厘米宽,则 1vw 为 0.5 厘米。
3. CSS盒子模型
CSS 盒子模型(Box Model)
所有HTML元素可以看作盒子,在CSS中,"box model"这一术语是用来设计和布局时使用。
CSS盒模型本质上是一个盒子,封装周围的HTML元素,它包括:边距,边框,填充,和实际内容。
盒模型允许我们在其它元素和周围元素边框之间的空间放置元素。
下面的图片说明了盒子模型(Box Model):
不同部分的说明:
Margin(外边距) - 清除边框外的区域,外边距是透明的。
Border(边框) - 围绕在内边距和内容外的边框。
Padding(内边距) - 清除内容周围的区域,内边距是透明的。
Content(内容) - 盒子的内容,显示文本和图像。
1.CSS 边框
CSS 边框属性
CSS border 属性允许您指定元素边框的样式、宽度和颜色。
CSS 边框样式
border-style 属性指定要显示的边框类型。
允许以下值:
dotted - 定义点线边框
dashed - 定义虚线边框
solid - 定义实线边框
double - 定义双边框
groove - 定义 3D 坡口边框。效果取决于 border-color 值
ridge - 定义 3D 脊线边框。效果取决于 border-color 值
inset - 定义 3D inset 边框。效果取决于 border-color 值
outset - 定义 3D outset 边框。效果取决于 border-color 值
none - 定义无边框
hidden - 定义隐藏边框
border-style 属性可以设置一到四个值(用于上边框、右边框、下边框和左边框)。
演示不同的边框样式:
p.dotted {border-style: dotted;} p.dashed {border-style: dashed;} p.solid {border-style: solid;} p.double {border-style: double;} p.groove {border-style: groove;} p.ridge {border-style: ridge;} p.inset {border-style: inset;} p.outset {border-style: outset;} p.none {border-style: none;} p.hidden {border-style: hidden;} p.mix {border-style: dotted dashed solid double;}
效果如下:
注意:除非设置了 border-style 属性,否则其他 CSS 边框属性(将在下一章中详细讲解)都不会有任何作用!
CSS 边框宽度
border-width 属性指定四个边框的宽度。
可以将宽度设置为特定大小(以 px、pt、cm、em 计),也可以使用以下三个预定义值之一:thin、medium 或 thick:
实例
演示不同的边框宽度:
p.one { border-style: solid; border-width: 5px; } p.two { border-style: solid; border-width: medium; } p.three { border-style: dotted; border-width: 2px; } p.four { border-style: dotted; border-width: thick; }
效果如下:
特定边的宽度
border-width 属性可以设置一到四个值(用于上边框、右边框、下边框和左边框):
p.one { border-style: solid; border-width: 5px 20px; /* 上边框和下边框为 5px,其他边为 20px */ } p.two { border-style: solid; border-width: 20px 5px; /* 上边框和下边框为 20px,其他边为 5px */ } p.three { border-style: solid; border-width: 25px 10px 4px 35px; /* 上边框 25px,右边框 10px,下边框 4px,左边框 35px */ }
CSS 边框颜色
border-color 属性用于设置四个边框的颜色。
可以通过以下方式设置颜色:
name - 指定颜色名,比如 "red"
HEX - 指定十六进制值,比如 "#ff0000"
RGB - 指定 RGB 值,比如 "rgb(255,0,0)"
HSL - 指定 HSL 值,比如 "hsl(0, 100%, 50%)"
transparent
注释:如果未设置 border-color,则它将继承元素的颜色。
演示不同的边框颜色:
p.one { border-style: solid; border-color: red; } p.two { border-style: solid; border-color: green; } p.three { border-style: dotted; border-color: blue; }
效果如下:
border-color 属性可以设置一到四个值(用于上边框、右边框、下边框和左边框)。
p.one { border-style: solid; border-color: red green blue yellow; /* 上红、右绿、下蓝、左黄 */ }
CSS Border - 简写属性
就像您在上一章中所见,处理边框时要考虑许多属性。
为了缩减代码,也可以在一个属性中指定所有单独的边框属性。
border 属性是以下各个边框属性的简写属性:
border-width
border-style(必需)
border-color
p { border: 5px solid red; }
CSS 圆角边框
border-radius 属性用于向元素添加圆角边框:
p { border: 2px solid red; border-radius: 5px; }
2.CSS 外边距
CSS margin 属性用于在任何定义的边框之外,为元素周围创建空间。
通过 CSS,您可以完全控制外边距。有一些属性可用于设置元素每侧(上、右、下和左)的外边距。
Margin - 单独的边
CSS 拥有用于为元素的每一侧指定外边距的属性:
margin-top
margin-right
margin-bottom
margin-left
所有外边距属性都可以设置以下值:
auto - 浏览器来计算外边距
length - 以 px、pt、cm 等单位指定外边距
% - 指定以包含元素宽度的百分比计的外边距
inherit - 指定应从父元素继承外边距
提示:允许负值。
为 <p> 元素的所有四个边设置不同的外边距:
p { margin-top: 100px; margin-bottom: 100px; margin-right: 150px; margin-left: 80px; }
Margin - 简写属性
为了缩减代码,可以在一个属性中指定所有外边距属性。
margin 属性是以下各外边距属性的简写属性:
margin-top
margin-right
margin-bottom
margin-left
工作原理是这样的:
如果 margin 属性有四个值:
margin: 25px 50px 75px 100px;
上外边距是 25px
右外边距是 50px
下外边距是 75px
左外边距是 100px
margin 简写属性设置四个值:
p { margin: 25px 50px 75px 100px; }
如果 margin 属性设置三个值:
margin: 25px 50px 75px;
上外边距是 25px
右和左外边距是 50px
下外边距是 75px
使用已设置三个值的 margin 简写属性:
p { margin: 25px 50px 75px; }
如果 margin 属性设置两个值:
margin: 25px 50px;
上和下外边距是 25px
右和左外边距是 50px
实例
使用设置了两个值的 margin 简写属性:
p { margin: 25px 50px; }
如果 margin 属性设置了一个值:
margin: 25px;
所有四个外边距都是 25px
使用设置一个值的 margin 简写属性:
p { margin: 25px; }
CSS 外边距合并
外边距合并指的是,当两个垂直外边距相遇时,它们将形成一个外边距。合并后的外边距的高度等于两个发生合并的外边距的高度中的较大者。
外边距合并(叠加)是一个相当简单的概念。但是,在实践中对网页进行布局时,它会造成许多混淆。
简单地说,外边距合并指的是,当两个垂直外边距相遇时,它们将形成一个外边距。合并后的外边距的高度等于两个发生合并的外边距的高度中的较大者。
当一个元素出现在另一个元素上面时,第一个元素的下外边距与第二个元素的上外边距会发生合并。请看下图:
当一个元素包含在另一个元素中时(假设没有内边距或边框把外边距分隔开),它们的上和/或下外边距也会发生合并。请看下图:
注释:只有普通文档流中块框的垂直外边距才会发生外边距合并。行内框、浮动框或绝对定位之间的外边距不会合并。
3.CSS 内边距
CSS padding 属性用于在任何定义的边界内的元素内容周围生成空间。
通过 CSS,您可以完全控制内边距(填充)。有一些属性可以为元素的每一侧(上、右、下和左侧)设置内边距。
Padding - 单独的边
CSS 拥有用于为元素的每一侧指定内边距的属性:
padding-top
padding-right
padding-bottom
padding-left
所有内边距属性都可以设置以下值:
length - 以 px、pt、cm 等单位指定内边距
% - 指定以包含元素宽度的百分比计的内边距
inherit - 指定应从父元素继承内边距
提示:不允许负值。
为 <div> 元素的所有四个边设置不同的内边距:
div { padding-top: 50px; padding-right: 30px; padding-bottom: 50px; padding-left: 80px; }
Padding - 简写属性
为了缩减代码,可以在一个属性中指定所有内边距属性。
padding 属性是以下各内边距属性的简写属性:
padding-top
padding-right
padding-bottom
padding-left
工作原理是这样的:
如果 padding 属性有四个值:
padding: 25px 50px 75px 100px;
上内边距是 25px
右内边距是 50px
下内边距是 75px
左内边距是 100px
使用设置了四个值的 padding 简写属性:
div { padding: 25px 50px 75px 100px; }
如果 padding 属性设置了三个值:
padding: 25px 50px 75px;
上内边距是 25px
右和左内边距是 50px
下内边距是 75px
使用设置了三个值的 padding 简写属性:
div { padding: 25px 50px 75px; }
如果 padding 属性设置了两个值:
padding: 25px 50px;
上和下内边距是 25px
右和左内边距是 50px
使用设置了两个值的 padding 简写属性:
div { padding: 25px 50px; }
如果 padding 属性设置了一个值:
padding: 25px;
所有四个内边距都是 25px
使用设置了一个值的 padding 简写属性:
div { padding: 25px; }
内边距和元素宽度
CSS width 属性指定元素内容区域的宽度。内容区域是元素(盒模型)的内边距、边框和外边距内的部分。
因此,如果元素拥有指定的宽度,则添加到该元素的内边距会添加到元素的总宽度中。这通常是不希望的结果。
实例
在这里,<div> 元素的宽度为 300px。但是,<div> 元素的实际宽度将是 350px(300px + 左内边距 25px + 右内边距 25px):
div { width: 300px; padding: 25px; }
若要将宽度保持为 300px,无论填充量如何,那么您可以使用 box-sizing 属性。这将导致元素保持其宽度。如果增加内边距,则可用的内容空间会减少。
使用 box-sizing 属性将宽度保持为 300px,无论填充量如何:
div { width: 300px; padding: 25px; box-sizing: border-box; }
4.CSS 高度和宽度
height 和 width 属性用于设置元素的高度和宽度。
height 和 width 属性不包括内边距、边框或外边距。它设置的是元素内边距、边框以及外边距内的区域的高度或宽度。
CSS 高度和宽度值
height 和 width 属性可设置如下值:
auto - 默认。浏览器计算高度和宽度。
length - 以 px、cm 等定义高度/宽度。
% - 以包含块的百分比定义高度/宽度。
initial - 将高度/宽度设置为默认值。
inherit - 从其父值继承高度/宽度。
设置 <div> 元素的高度和宽度:
div { height: 200px; width: 50%; background-color: powderblue; }
注意:请记住,height 和 width 属性不包括内边距、边框或外边距!它们设置的是元素的内边距、边框和外边距内的区域的高度/宽度!
设置 max-width
max-width 属性用于设置元素的最大宽度。
可以用长度值(例如 px、cm 等)或包含块的百分比(%)来指定 max-width(最大宽度),也可以将其设置为 none(默认值。意味着没有最大宽度)。
当浏览器窗口小于元素的宽度(500px)时,会发生之前那个 <div> 的问题。然后,浏览器会将水平滚动条添加到页面。
在这种情况下,使用 max-width 能够改善浏览器对小窗口的处理。
提示:将浏览器窗口拖动到小于500px的宽度,以查看两个 div 之间的区别!
注释:max-width 属性的值将覆盖 width(宽度)。
实例
这个 <div> 元素的高度为 100 像素,最大宽度为 500 像素:
div { max-width: 500px; height: 100px; background-color: powderblue; }
4. CSS选择器
CSS 选择器
CSS 选择器用于“查找”(或选取)要设置样式的 HTML 元素。
我们可以将 CSS 选择器分为五类:
简单选择器(根据名称、id、类来选取元素)
组合选择器(根据它们之间的特定关系来选取元素)
伪类选择器(根据特定状态选取元素)
伪元素选择器(选取元素的一部分并设置其样式)
属性选择器(根据属性或属性值来选取元素)
1.简单选择器
CSS 元素选择器
元素选择器根据元素名称来选择 HTML 元素。
在这里,页面上的所有 <p> 元素都将居中对齐,并带有红色文本颜色:
p { text-align: center; color: red; }
CSS id 选择器
id 选择器使用 HTML 元素的 id 属性来选择特定元素。
元素的 id 在页面中是唯一的,因此 id 选择器用于选择一个唯一的元素!
要选择具有特定 id 的元素,请写一个井号(#),后跟该元素的 id。
这条 CSS 规则将应用于 id="para1" 的 HTML 元素:
#para1 { text-align: center; color: red; }
注意:id 名称不能以数字开头。
CSS 类选择器
类选择器选择有特定 class 属性的 HTML 元素。
如需选择拥有特定 class 的元素,请写一个句点(.)字符,后面跟类名。
在此例中,所有带有 class="center" 的 HTML 元素将为红色且居中对齐:
.center { text-align: center; color: red; }
CSS 通用选择器
通用选择器(*)选择页面上的所有的 HTML 元素。
下面的 CSS 规则会影响页面上的每个 HTML 元素:
* { text-align: center; color: blue; }
CSS 分组选择器
分组选择器选取所有具有相同样式定义的 HTML 元素。
请看下面的 CSS 代码(h1、h2 和 p 元素具有相同的样式定义):
h1 { text-align: center; color: red; } h2 { text-align: center; color: red; } p { text-align: center; color: red; }
最好对选择器进行分组,以最大程度地缩减代码。
如需对选择器进行分组,请用逗号来分隔每个选择器。
在这个例子中,我们对上述代码中的选择器进行分组:
h1, h2, p { text-align: center; color: red; }
2.组合选择器
组合器是解释选择器之间关系的某种机制。
CSS 选择器可以包含多个简单选择器。在简单选择器之间,我们可以包含一个组合器。
CSS 中有四种不同的组合器:
后代选择器 (空格)
子选择器 (>)
相邻兄弟选择器 (+)
通用兄弟选择器 (~)
后代选择器
后代选择器匹配属于指定元素后代的所有元素。
下面的例子选择 <div> 元素内的所有 <p> 元素:
div p { background-color: yellow; }
子选择器
子选择器匹配属于指定元素子元素的所有元素。
下面的例子选择属于 <div> 元素子元素的所有 <p> 元素:
div > p { background-color: yellow; }
相邻兄弟选择器
相邻兄弟选择器匹配所有作为指定元素的相邻同级的元素。
兄弟(同级)元素必须具有相同的父元素,“相邻”的意思是“紧随其后”。
下面的例子选择紧随 <div> 元素之后的所有 <p> 元素:
div + p { background-color: yellow; }
通用兄弟选择器
通用兄弟选择器匹配属于指定元素的同级元素的所有元素。
下面的例子选择属于 <div> 元素的同级元素的所有 <p> 元素:
div ~ p { background-color: yellow; }
3.伪类选择器
什么是伪类?
伪类用于定义元素的特殊状态。
例如,它可以用于:
设置鼠标悬停在元素上时的样式
为已访问和未访问链接设置不同的样式
设置元素获得焦点时的样式
语法
伪类的语法:
selector:pseudo-class { property: value; }
锚伪类
链接能够以不同的方式显示:
/* 未访问的链接 */ a:link { color: #FF0000; } /* 已访问的链接 */ a:visited { color: #00FF00; } /* 鼠标悬停链接 */ a:hover { color: #FF00FF; } /* 已选择的链接 */ a:active { color: #0000FF; }
注意:a:hover 必须在 CSS 定义中的 a:link 和 a:visited 之后,才能生效!a:active 必须在 CSS 定义中的 a:hover 之后才能生效!伪类名称对大小写不敏感。
伪类和 CSS 类
伪类可以与 CSS 类结合使用:
当您将鼠标悬停在例子中的链接上时,它会改变颜色:
a.highlight:hover { color: #ff0000; }
悬停在 <div> 上
在 <div> 元素上使用 :hover 伪类的实例:
div:hover { background-color: blue; }
CSS - :first-child 伪类
:first-child 伪类与指定的元素匹配:该元素是另一个元素的第一个子元素。
匹配首个 <p> 元素
在下面的例子中,选择器匹配作为任何元素的第一个子元素的任何 <p> 元素:
p:first-child { color: blue; }
匹配所有 <p> 元素中的首个 <i> 元素
在下面的例子中,选择器匹配所有 <p> 元素中的第一个 <i> 元素:
p i:first-child { color: blue; }
匹配所有首个 <p> 元素中的所有 <i> 元素
在下面的例子中,选择器匹配作为另一个元素的第一个子元素的 <p> 元素中的所有 <i> 元素:
p:first-child i { color: blue; }
4.伪元素选择器
什么是伪元素?
CSS 伪元素用于设置元素指定部分的样式。
例如,它可用于:
设置元素的首字母、首行的样式
在元素的内容之前或之后插入内容
语法
伪元素的语法:
selector::pseudo-element { propert: value; }
::first-line 伪元素
::first-line 伪元素用于向文本的首行添加特殊样式。
下面的例子为所有 <p> 元素中的首行添加样式:
p::first-line { color: #ff0000; font-variant: small-caps; }
注意:::first-line 伪元素只能应用于块级元素。
以下属性适用于 ::first-line 伪元素:
字体属性
颜色属性
背景属性
word-spacing
letter-spacing
text-decoration
vertical-align
text-transform
line-height
clear
请注意双冒号表示法 - ::first-line 对比 :first-line
在 CSS3 中,双冒号取代了伪元素的单冒号表示法。这是 W3C 试图区分伪类和伪元素的尝试。
在 CSS2 和 CSS1 中,伪类和伪元素都使用了单冒号语法。
为了向后兼容,CSS2 和 CSS1 伪元素可接受单冒号语法。
::first-letter 伪元素
::first-letter 伪元素用于向文本的首字母添加特殊样式。
下面的例子设置所有 <p> 元素中文本的首字母格式:
p::first-letter { color: #ff0000; font-size: xx-large; }
注意:::first-letter 伪元素只适用于块级元素。
下面的属性适用于 ::first-letter 伪元素:
字体属性
颜色属性
背景属性
外边距属性
内边距属性
边框属性
text-decoration
vertical-align(仅当 "float" 为 "none")
text-transform
line-height
float
clear
伪元素和 CSS 类
伪元素可以与 CSS 类结合使用:
p.intro::first-letter { color: #ff0000; font-size: 200%; }
上面的例子将以红色和较大的字体显示 class="intro" 的段落的首字母。
5.属性选择器
为带有特定属性的 HTML 元素设置样式
我们可以设置带有特定属性或属性值的 HTML 元素的样式。
CSS [attribute] 选择器
[attribute] 选择器用于选取带有指定属性的元素。
下例选择所有带有 target 属性的 <a> 元素;
a[target] { background-color: yellow; }
CSS [attribute="value"] 选择器
[attribute="value"] 选择器用于选取带有指定属性和值的元素。
下例选取所有带有 target="_blank" 属性的 <a> 元素:
a[target="_blank"] { background-color: yellow; }
CSS [attribute~="value"] 选择器
[attribute~="value"] 选择器选取属性值包含指定词的元素。
下例选取 title 属性包含 "flower" 单词的所有元素:
[title~="flower"] { border: 5px solid yellow; }
上面的例子会匹配以下属性的元素:title="flower"、title="summer flower" 以及 title="flower new",但不匹配:title="my-flower" 或 title="flowers"。
CSS [attribute|="value"] 选择器
[attribute|="value"] 选择器用于选取指定属性以指定值开头的元素。
下例选取 class 属性以 "top" 开头的所有元素:
注释:值必须是完整或单独的单词,比如 class="top" 或者后跟连字符的,比如 class="top-text"。
[class|="top"] { background: yellow; }
CSS [attribute^="value"] 选择器
[attribute^="value"] 选择器用于选取指定属性以指定值开头的元素。
下例选取 class 属性以 "top" 开头的所有元素:
提示:值不必是完整单词!
[class^="top"] { background: yellow; }
CSS [attribute$="value"] 选择器
[attribute$="value"] 选择器用于选取指定属性以指定值结尾的元素。
下例选取 class 属性以 "test" 结尾的所有元素:
提示:值不必是完整单词!
[class$="test"] { background: yellow; }
CSS [attribute*="value"] 选择器
[attribute*="value"] 选择器选取属性值包含指定词的元素。
下例选取 class 属性包含 "te" 的所有元素:
提示:值不必是完整单词!
[class*="te"] { background: yellow; }
设置表单样式
若需为不带 class 或 id 的表单设置样式,属性选择器会很有用:
实例
input[type="text"] { width: 150px; display: block; margin-bottom: 10px; background-color: yellow; } input[type="button"] { width: 120px; margin-left: 35px; display: block; }
5. CSS常见布局方式
网站布局
网站通常分为页眉、菜单、内容和页脚:
1.文档流布局
使用 display 属性将窗体自上而下分成一行一行,块级元素从上至下、 行内元素在每行中按从左至右的依次排放元素。
display 属性
display 属性规定是否/如何显示元素。
每个 HTML 元素都有一个默认的 display 值,具体取决于它的元素类型。大多数元素的默认 display 值为 block 或 inline。
块级元素(block element)
块级元素的一些例子:
<div> <h1> - <h6> <p> <form> <header> <footer> <section>
行内元素(inline element)
内联元素不从新行开始,仅占用所需的宽度。这是段落中的行内 <span> 元素。
行内元素的一些例子:
<span> <a> <img>
Display: none;
display: none; 通常与 JavaScript 一起使用,以隐藏和显示元素,而无需删除和重新创建它们。如果您想知道如何实现此目标,请查看本页面上的最后一个实例。
默认情况下,<script> 元素使用 display: none;。
覆盖默认的 Display 值
如前所述,每个元素都有一个默认 display 值。但是,您可以覆盖它。
将行内元素更改为块元素,反之亦然,对于使页面以特定方式显示同时仍遵循 Web 标准很有用。
一个常见的例子是为实现水平菜单而生成行内的 <li> 元素:
li { display: inline; }
注意:设置元素的 display 属性仅会更改元素的显示方式,而不会更改元素的种类。因此,带有 display: block; 的行内元素不允许在其中包含其他块元素。
下例将 <span> 元素显示为块元素:
span { display: block; }
下例将 <a> 元素显示为块元素:
a { display: block; }
隐藏元素 - display:none 还是 visibility:hidden?
通过将 display 属性设置为 none 可以隐藏元素。该元素将被隐藏,并且页面将显示为好像该元素不在其中:
h1.hidden { display: none; }
visibility:hidden; 也可以隐藏元素。
但是,该元素仍将占用与之前相同的空间。元素将被隐藏,但仍会影响布局:
h1.hidden { visibility: hidden; }
2.浮动布局
浮动和清除
CSS float 属性规定元素如何浮动。
CSS clear 属性规定哪些元素可以在清除的元素旁边以及在哪一侧浮动。
float 属性
float 属性用于定位和格式化内容,例如让图像向左浮动到容器中的文本那里。
float 属性可以设置以下值之一:
left - 元素浮动到其容器的左侧
right - 元素浮动在其容器的右侧
none - 元素不会浮动(将显示在文本中刚出现的位置)。默认值。
inherit - 元素继承其父级的 float 值
最简单的用法是,float 属性可实现(报纸上)文字包围图片的效果。
请看下图,当把框 1 向右浮动时,它脱离文档流并且向右移动,直到它的右边缘碰到包含框的右边缘:
再请看下图,当框 1 向左浮动时,它脱离文档流并且向左移动,直到它的左边缘碰到包含框的左边缘。因为它不再处于文档流中,所以它不占据空间,实际上覆盖住了框 2,使框 2 从视图中消失。
如果把所有三个框都向左移动,那么框 1 向左浮动直到碰到包含框,另外两个框向左浮动直到碰到前一个浮动框。
如下图所示,如果包含框太窄,无法容纳水平排列的三个浮动元素,那么其它浮动块向下移动,直到有足够的空间。如果浮动元素的高度不同,那么当它们向下移动时可能被其它浮动元素“卡住”:
clear 属性
clear 属性指定哪些元素可以浮动于被清除元素的旁边以及哪一侧。
clear 属性可设置以下值之一:
none - 允许两侧都有浮动元素。默认值
left - 左侧不允许浮动元素
right- 右侧不允许浮动元素
both - 左侧或右侧均不允许浮动元素
inherit - 元素继承其父级的 clear 值
使用 clear 属性的最常见用法是在元素上使用了 float 属性之后。
在清除浮动时,应该对清除与浮动进行匹配:如果某个元素浮动到左侧,则应清除左侧。您的浮动元素会继续浮动,但是被清除的元素将显示在其下方。
下例将清除向左的浮动。表示在(div 的)左侧不允许出现浮动元素:
div { clear: left; }
3.定位布局
position 属性规定应用于元素的定位方法的类型(static、relative、fixed、absolute 或 sticky)。
position 属性
position 属性规定应用于元素的定位方法的类型。
有五个不同的位置值:
static
relative
fixed
absolute
sticky
元素其实是使用 top、bottom、left 和 right 属性定位的。但是,除非首先设置了 position 属性,否则这些属性将不起作用。根据不同的 position 值,它们的工作方式也不同。
position: relative;
position: relative; 的元素相对于其正常位置进行定位。
设置相对定位的元素的 top、right、bottom 和 left 属性将导致其偏离其正常位置进行调整。不会对其余内容进行调整来适应元素留下的任何空间。
这是所用的 CSS:
div.relative { position: relative; left: 30px; border: 3px solid #73AD21; }
position: fixed;
position: fixed; 的元素是相对于视口定位的,这意味着即使滚动页面,它也始终位于同一位置。 top、right、bottom 和 left 属性用于定位此元素。
固定定位的元素不会在页面中通常应放置的位置上留出空隙。
请注意页面右下角的这个固定元素。这是所用的 CSS:
div.fixed { position: fixed; bottom: 0; right: 0; width: 300px; border: 3px solid #73AD21; }
position: absolute;
position: absolute; 的元素相对于最近的定位祖先元素进行定位(而不是相对于视口定位,如 fixed)。
然而,如果绝对定位的元素没有祖先,它将使用文档主体(body),并随页面滚动一起移动。
注意:“被定位的”元素是其位置除 static 以外的任何元素。
这是一个简单的例子:
这是所用的 CSS:
div.relative { position: relative; width: 400px; height: 200px; border: 3px solid #73AD21; } div.absolute { position: absolute; top: 80px; right: 0; width: 200px; height: 100px; border: 3px solid #73AD21; }
position: sticky;
position: sticky; 的元素根据用户的滚动位置进行定位。
粘性元素根据滚动位置在相对(relative)和固定(fixed)之间切换。起先它会被相对定位,直到在视口中遇到给定的偏移位置为止 - 然后将其“粘贴”在适当的位置(比如 position:fixed)。
注意:Internet Explorer、Edge 15 以及更早的版本不支持粘性定位。 Safari 需要 -webkit- 前缀(请参见下面的实例)。您还必须至少指定 top、right、bottom 或 left 之一,以便粘性定位起作用。
在此例中,在到达其滚动位置时,sticky 元素将停留在页面顶部(top: 0)。
div.sticky { position: -webkit-sticky; /* Safari */ position: sticky; top: 0; background-color: green; border: 2px solid #4CAF50; }
重叠元素
在对元素进行定位时,它们可以与其他元素重叠。
z-index 属性指定元素的堆栈顺序(哪个元素应放置在其他元素的前面或后面)。
元素可以设置正或负的堆叠顺序:
img { position: absolute; left: 0px; top: 0px; z-index: -1; }
具有较高堆叠顺序的元素始终位于具有较低堆叠顺序的元素之前。
注意:如果两个定位的元素重叠而未指定 z-index,则位于 HTML 代码中最后的元素将显示在顶部。
4.flex 布局
flex 是一种新型的布局方式,使用该布局方式可以实现几乎所有你想要的效果。
flex 的使用方法很简单,只需要将其 display 属性设置为 flex 就可以,也可以设置行内的 flex,记得 Webkit 内核的浏览器,必须加上 -webkit 前缀。注意,设为 Flex 布局以后,子元素的 float、clear 和 vertical-align 属性将失效。
任何一个容器都可以指定为Flex布局。
#box{ display: flex; width: 500px; height: 300px; border: 10px solid red; }
有六个属性设置在box父容器上,来控制子元素的显示方式;分别是:
flex-direction 设置主轴对齐方式 默认 row x轴从左到右;
flex-wrap 子元素换行的方式 默认nowrap ;
flex-flow flex-direction和flex-wrap的简写 默认row nowrap;
justify-content 子元素的对齐方式 默认flex-start 左对齐
align-items
align-content
flex-direction 决定主轴的对齐方向,分别有四个属性:
row(默认值):主轴为水平方向,起点在左端。
row-reverse:主轴为水平方向,起点在右端。
column:主轴为垂直方向,起点在上沿。
column-reverse:主轴为垂直方向,起点在下沿。
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> </head> <style> #box{ display: flex; flex-direction: row; } .inner{ width: 100px; height: 100px; background: #20cccc; margin: 10px; } </style> <body> <div id="box"> <div class="inner"></div> <div class="inner"></div> <div class="inner"></div> </div> </html>
例如上面代码,主轴就是x轴横向的;起点在左端,从左到右排列;
flex-wrap :定义子元素超过一行,如何换行,分别有三个属性:
nowrap(默认值):默认不换行。
wrap:换行,第二行在第一行下面,从左到右
wrap-reverse:换行,第二行在第一行上面,从左到右;
1.nowrap:不换行,如果子元素超过父元素的宽度或者高度,会自动在主轴方向压缩
下面的例子,主轴是x轴,默认不换行,但是父元素的宽度是500,子元素明显大于父元素宽度,会默认宽度变窄;
#box{ display: flex; flex-direction: row; width: 500px; border: 1px solid red; }
2. wrap:换行,正常的折行
#box{ display: flex; flex-direction: row; width: 500px; flex-wrap: wrap; }
3 .wrap-reverse 第二行在第一行上方
#box { width: 400px; display: flex; flex-direction: row; flex-wrap: wrap-reverse; }
flex-flow
flex-flow:是flex-direction 和flex-wrap的简写形式,默认是 row nowrap
flex-flow:flex-direction|flex-wrap ;
justiy-content: 子元素在主轴对齐方式
flex-start(默认值):左对齐
flex-end:右对齐
center: 居中
space-between:两端对齐,项目之间的间隔都相等。
space-around:每个项目两侧的间隔相等。所以,项目之间的间隔比项目与边框的间隔大一倍。
flex-start和flex-end,center这三个都比较简单,主要区分开下面的space-between和space-around;
space-between:两端对齐,
space-evenly:
align-items
交叉轴如何对齐,如果flex-direction:row和row-reverse 那么交叉轴就是y轴,如果是column和column-reverse那么交叉轴是x轴
flex-start:交叉轴的起点对齐。
flex-end:交叉轴的终点对齐。
center:交叉轴的中点对齐。
baseline: 项目的第一行文字的基线对齐。
stretch(默认值):如果项目未设置高度或设为auto,将占满整个容器的高度。
align-content
属性定义了多根轴线的对齐方式。如果项目只有一根轴线,该属性不起作用。
flex-start:与交叉轴的起点对齐。
flex-end:与交叉轴的终点对齐。
center:与交叉轴的中点对齐。
space-between:与交叉轴两端对齐,轴线之间的间隔平均分布。
space-around:每根轴线两侧的间隔都相等。所以,轴线之间的间隔比轴线与边框的间隔大一倍。
stretch(默认值):轴线占满整个交叉轴。
有六个属性设置在子元素项目上:
order
flex-grow
flex-shrink
flex-basis
flex
align-self
order
子元素排列的位置默认是按照html先后顺序来排列的,html结构谁在前面默认就排列在前面;order的作用就是改变子元素排列顺序。
.inner:nth-child(5){ order: -1; }
flex-grow
放大比例 默认是0 当有放大空间的时候,值越大,放大的比例越大
.inner:nth-child(1){ flex-grow: 1; }
flex-shrink
缩小比例 默认是1 值越大,缩小的时候比例越小
.inner:nth-child(1){ flex-shrink:24; }
flex-basis
属性定义了在分配多余空间之前,项目占据的主轴空间(main size)。浏览器根据这个属性,计算主轴是否有多余空间。它的默认值为auto,即项目的本来大小。
flex-basis:200px ,如果项目有多余的空间,设置为200px。那么会放大到200的宽度;
align-self
允许单个项目有与其他项目不一样的对齐方式,可覆盖align-items属性。默认值为auto,表示继承父元素的align-items属性,如果没有父元素,则等同于stretch。
align-self
属性允许单个项目有与其他项目不一样的对齐方式,可覆盖align-items属性。默认值为auto,表示继承父元素的align-items属性,如果没有父元素,则等同于stretch。
5.网格布局
CSS 网格布局模块(CSS Grid Layout Module)提供了带有行和列的基于网格的布局系统,它使网页设计变得更加容易,而无需使用浮动和定位。
网格布局由一个父元素以及一个或多个子元素组成。
Display 属性
当 HTML 元素的 display 属性设置为 grid 或 inline-grid 时,它就会成为网格容器。
实例
.grid-container { display: grid; }
网格列(Grid Columns)网格项的垂直线被称为列。
网隔行(Grid Rows)网格项的水平线被称为行。
网格间隙(Grid Gaps)每列/行之间的间隔称为间隙。
您可以通过使用以下属性之一来调整间隙大小:
grid-column-gap
grid-row-gap
grid-gap
grid-column-gap 属性设置列之间的间隙:
.grid-container { display: grid; grid-column-gap: 50px; }
grid-row-gap 属性设置行之间的间隙:
.grid-container { display: grid; grid-row-gap: 50px; }
grid-gap 属性是 grid-row-gap 和 grid-column-gap 属性的简写属性:
.grid-container { display: grid; grid-gap: 50px 100px; }
grid-gap 属性还可用于将行间隙和列间隙设置为一个值:
.grid-container { display: grid; grid-gap: 50px; }
grid-template-columns 属性
grid-template-columns 属性定义网格布局中的列数,并可定义每列的宽度。
该值是以空格分隔的列表,其中每个值定义相应列的长度。
如果您希望网格布局包含 4 列,请指定这 4 列的宽度;如果所有列都应当有相同的宽度,则设置为 "auto"。
实例
生成包含四列的网格:
.grid-container { display: grid; grid-template-columns: auto auto auto auto; }
注意:如果在 4 列网格中有 4 个以上的项目,则网格会自动添加新行并将这些项目放入其中。
grid-template-columns 属性还可以用于指定列的尺寸(宽度)。
设置这 4 列的尺寸:
.grid-container { display: grid; grid-template-columns: 80px 200px auto 40px; }
grid-template-rows 属性
grid-template-rows 属性定义每列的高度。
它的值是以空格分隔的列表,其中每个值定义相应行的高度:
.grid-container { display: grid; grid-template-rows: 80px 200px; }
justify-content 属性
justify-content 属性用于在容器内对齐整个网格。
注意:网格的总宽度必须小于容器的宽度,这样 justify-content 属性才能生效。
.grid-container { display: grid; justify-content: space-evenly; }
.grid-container { display: grid; justify-content: space-around; }
子元素
网格容器包含网格项目。默认情况下,容器在每一行的每一列都有一个网格项目,但是您可以设置网格项目的样式,让它们跨越多个列和/或行。
grid-column 属性
grid-column 属性定义将项目放置在哪一列上。您可以定义项目的开始位置以及结束位置。
注释:grid-column 属性是 grid-column-start 和 grid-column-end 属性的简写属性。
如需放置某个项目,您可以引用行号(line numbers),或使用关键字 "span" 来定义该项目将跨越多少列。
使 "item1" 从第 1 列开始并在第 5 列之前结束:
.item1 { grid-column: 1 / 5; }
使 "item1" 从第 1 列开始,并跨越 3 列:
.item1 { grid-column: 1 / span 3; }
使 "item2" 从第 2 列开始,并跨越 3 列:
.item2 { grid-column: 2 / span 3; }
grid-row 属性
grid-row 属性定义了将项目放置在哪一行。
您可以定义项目的开始位置以及结束位置。
注释:grid-row 属性是 grid-row-start 和 grid-row-end 属性的简写属性。
如需放置项目,您可以引用行号,或使用关键字 "span" 定义该项目将跨越多少行:
使 "item1" 在 row-line 1 开始,在 row-line 4 结束:
.item1 { grid-row: 1 / 4; }
使 "item1" 从第 1 行开始并跨越 2 行:
.item1 { grid-row: 1 / span 2; }
grid-area 属性
grid-area 属性可以用作 grid-row-start、grid-column-start、grid-row-end 和 grid-column-end 属性的简写属性。
使 "item8" 从 row-line 1 和 column-line 2 开始,在 row-line 5 和 column line 6 结束:
.item8 { grid-area: 1 / 2 / 5 / 6; }
6. CSS综合练习
CSS 页面布局综合练习
先来看看我们需要完成的页面效果:
源码如下:
<!DOCTYPE html> <html> <head> <style> * { box-sizing: border-box; } body { font-family: Arial; padding: 10px; background: #f1f1f1; } /* 页眉/Blog 标题 */ .header { padding: 30px; text-align: center; background: white; } .header h1 { font-size: 50px; } /* 设置上导航栏的样式 */ .topnav { overflow: hidden; background-color: #333; } /* 设置 topnav 链接的样式 */ .topnav a { float: left; display: block; color: #f2f2f2; text-align: center; padding: 14px 16px; text-decoration: none; } /* 改变鼠标悬停时的颜色 */ .topnav a:hover { background-color: #ddd; color: black; } /* 创建两个不相等的彼此并排的浮动列 */ /* 左列 */ .leftcolumn { float: left; width: 75%; } /* 右列 */ .rightcolumn { float: left; width: 25%; background-color: #f1f1f1; padding-left: 20px; } /* 伪图像 */ .fakeimg { background-color: #aaa; width: 100%; padding: 20px; } /* 为文章添加卡片效果 */ .card { background-color: white; padding: 20px; margin-top: 20px; } /* 清除列之后的浮动 */ .row:after { content: ""; display: table; clear: both; } /* 页脚 */ .footer { padding: 20px; text-align: center; background: #ddd; margin-top: 20px; } /* 响应式布局 - 当屏幕的宽度小于 800 像素时,使两列堆叠而不是并排 */ @media screen and (max-width: 800px) { .leftcolumn, .rightcolumn { width: 100%; padding: 0; } } /* 响应式布局 - 当屏幕的宽度小于 400 像素时,使导航链接堆叠而不是并排 */ @media screen and (max-width: 400px) { .topnav a { float: none; width: 100%; } } </style> </head> <body> <div class="header"> <h1>我的网站</h1> <p>调整浏览器窗口的大小以查看效果。</p> </div> <div class="topnav"> <a href="#">Link</a> <a href="#">Link</a> <a href="#">Link</a> <a href="#" style="float:right">Link</a> </div> <div class="row"> <div class="leftcolumn"> <div class="card"> <h2>标题</h2> <h5>标题说明,2022年7月7日</h5> <div class="fakeimg" style="height:200px;">图像</div> <p>文本</p> <p>一些文本内容</p> </div> <div class="card"> <h2>标题</h2> <h5>标题说明,2022年7月7日</h5> <div class="fakeimg" style="height:200px;">图像</div> <p>文本</p> <p>一些文本内容</p> </div> </div> <div class="rightcolumn"> <div class="card"> <h2>关于我的</h2> <div class="fakeimg" style="height:100px;">图像</div> <p>一些关于我的文字</p> </div> <div class="card"> <h3>Popular Post</h3> <div class="fakeimg"><p>图像</p></div> <div class="fakeimg"><p>图像</p></div> <div class="fakeimg"><p>图像</p></div> </div> <div class="card"> <h3>Follow Me</h3> <p>Some text..</p> </div> </div> </div> <div class="footer"> <h2>页脚</h2> </div> </body> </html>
7. CSS3简介
1.什么事CSS3
CSS3是CSS(层叠样式表)技术的升级版本,于1999年开始制订,2001年5月23日W3C完成了CSS3的工作草案,主要包括盒子模型、列表模块、超链接方式、语言模块、背景和边框、文字特效、多栏布局等模块 [1] 。
CSS演进的一个主要变化就是W3C决定将CSS3分成一系列模块。浏览器厂商按CSS节奏快速创新,因此通过采用模块方法,CSS3规范里的元素能以不同速度向前发展,因为不同的浏览器厂商只支持给定特性。但不同浏览器在不同时间支持不同特性,这也让跨浏览器开发变得复杂 。
CSS3的新特征有很多,例如圆角效果、图形化边界、块阴影与文字阴影、使用RGBA实现透明效果、渐变效果、使用@Font-Face实现定制字体、多背景图、文字或图像的变形处理(旋转、缩放、倾斜、移动)、多栏布局、媒体查询等。
2.CSS3的好处
1、减少开发成本与维护成本
在CSS3出现之前,开发人员为了实现一个圆角效果,往往需要添加额外的HTML标签,使用一个或多个图片来完成,而使用CSS3只需要一个标签,利用CSS3中的border-radius属性就能完成。这样,CSS3技术能把人员从绘图、切图和优化图片的工作中解放出来。如果后续需要调整这个圆角的弧度或者圆角的颜色,使用CSS2.1,需要从头绘图、切图才能实现,使用CSS3只需修改border-radius属性值就可快速完成修改。
CSS3提供的动画特性,可让开发者在先实现一些动态按钮或者动态导航时远离JavaScript,让开发人员不需要花费大量的时间去写脚本或者寻找合适的脚本插件来适配一些动态网站效果。
2、提高页面性能
很多CSS3技术通过提供相同的视觉效果而成为图片的“替代品”,换句话说,在进行Web开发时,减少多余的标签嵌套以及图片的使用数量,意味着用户要下载的内容将会更少,页面加载也会更快。另外,更少的图片、脚本和Flash文件能够减少用户访问Web站点时的HTTP请求数,这是提升页面加载速度的最佳方法之一。而使用CSS3制作图形化网站无需任何图片,极大地减少了HTTP的请求数量,并且提升了页面的加载速度。例如CSS3的动画效果,能够减少对JavaScript和Flash文件的HTTP请求,但可能会要求浏览器执行很多的工作来完成这个动画效果的渲染,这有可能导致浏览器响应缓慢致使用户流失。因此,在使用一些复杂的特效时需要考虑清楚。其实很多CSS3技术能够在任何情况下都大幅提高页面的性能 [ 。
CSS3将完全向后兼容,所以没有必要修改的设计来让它们继续运作。网络浏览器也还将继续支持CSS2 。
8. CSS3元素属性
1.CSS圆角
通过 CSS border-radius 属性,可以实现任何元素的“圆角”样式。
CSS border-radius 属性
SS border-radius 属性定义元素角的半径。
提示:您可以使用此属性为元素添加圆角!
这里有三个例子:
1. 带有指定背景颜色的元素的圆角:
2. 带边框元素的圆角:
3. 带有背景图像的元素的圆角:
这是代码:
#rcorners1 { border-radius: 25px; background: #73AD21; padding: 20px; width: 200px; height: 150px; } #rcorners2 { border-radius: 25px; border: 2px solid #73AD21; padding: 20px; width: 200px; height: 150px; } #rcorners3 { border-radius: 25px; background: url(paper.gif); background-position: left top; background-repeat: repeat; padding: 20px; width: 200px; height: 150px; }
提示:border-radius 属性实际上是以下属性的简写属性:
border-top-left-radius
border-top-right-radius
border-bottom-right-radius
border-bottom-left-radius
CSS border-radius - 指定每个角
border-radius 属性可以接受一到四个值。规则如下:
四个值 - border-radius: 15px 50px 30px 5px;(依次分别用于:左上角、右上角、右下角、左下角):
三个值 - border-radius: 15px 50px 30px;(第一个值用于左上角,第二个值用于右上角和左下角,第三个用于右下角):
两个值 - border-radius: 15px 50px;(第一个值用于左上角和右下角,第二个值用于右上角和左下角):
一个值 - border-radius: 15px;(该值用于所有四个角,圆角都是一样的):
这是代码:
#rcorners1 { border-radius: 15px 50px 30px 5px; background: #73AD21; padding: 20px; width: 200px; height: 150px; } #rcorners2 { border-radius: 15px 50px 30px; background: #73AD21; padding: 20px; width: 200px; height: 150px; } #rcorners3 { border-radius: 15px 50px; background: #73AD21; padding: 20px; width: 200px; height: 150px; } #rcorners4 { border-radius: 15px; background: #73AD21; padding: 20px; width: 200px; height: 150px; }
您还可以创建椭圆角:
#rcorners1 { border-radius: 50px / 15px; background: #73AD21; padding: 20px; width: 200px; height: 150px; } #rcorners2 { border-radius: 15px / 50px; background: #73AD21; padding: 20px; width: 200px; height: 150px; } #rcorners3 { border-radius: 50%; background: #73AD21; padding: 20px; width: 200px; height: 150px; }
2.边框图像
CSS border-image 属性
CSS border-image 属性允许您指定要使用的图像,而不是包围普通边框。
该属性有三部分:
用作边框的图像
在哪里裁切图像
定义中间部分应重复还是拉伸
我们将使用这幅图像("border.png")
border-image 属性接受图像,并将其切成九部分,就像井字游戏板。然后,将拐角放置在拐角处,并根据您的设置重复或拉伸中间部分。
注意:为了使 border-image 起作用,该元素还需要设置 border 属性!
此处,重复图像的中间部分以创建边框:
图像作为边框!
这是代码:
#borderimg { border: 10px solid transparent; padding: 15px; border-image: url(border.png) 30 round; }
3.多重背景
CSS 多重背景
CSS 允许您通过 background-image 属性为一个元素添加多幅背景图像。
不同的背景图像用逗号隔开,并且图像会彼此堆叠,其中的第一幅图像最靠近观看者。
下面的例子有两幅背景图像,第一幅图像是花朵(与底部和右侧对齐),第二幅图像是纸张背景(与左上角对齐):
#example1 { background-image: url(flower.gif), url(paper.gif); background-position: right bottom, left top; background-repeat: no-repeat, repeat; }
多重背景图像可以使用单独的背景属性(如上所述)或 background 简写属性来指定。
下面的例子使用 background 简写属性(结果与上例相同):
#example1 { background: url(flower.gif) right bottom no-repeat, url(paper.gif) left top repeat; }
CSS 背景尺寸
CSS background-size 属性允许您指定背景图像的大小。
可以通过长度、百分比或使用以下两个关键字之一来指定背景图像的大小:contain 或 cover。
这是代码:
#div1 { background: url(img_flower.jpg); background-size: 100px 80px; background-repeat: no-repeat; }
background-size 的其他两个可能的值是 contain 和 cover。
contain 关键字将背景图像缩放为尽可能大的尺寸(但其宽度和高度都必须适合内容区域)。这样,取决于背景图像和背景定位区域的比例,可能存在一些未被背景图像覆盖的背景区域。
cover 关键字会缩放背景图像,以使内容区域完全被背景图像覆盖(其宽度和高度均等于或超过内容区域)。这样,背景图像的某些部分可能在背景定位区域中不可见。
下面的例子展示了 contain 和 cover 的用法:
#div1 { background: url(img_flower.jpg); background-size: contain; background-repeat: no-repeat; } #div2 { background: url(img_flower.jpg); background-size: cover; background-repeat: no-repeat; }
CSS background-origin 属性
CSS background-origin 属性指定背景图像的位置。
该属性接受三个不同的值:
border-box - 背景图片从边框的左上角开始
padding-box -背景图像从内边距边缘的左上角开始(默认)
content-box - 背景图片从内容的左上角开始
下面的示例展示了 background-origin 属性:
实例
#example1 { border: 10px solid black; padding: 35px; background: url(flower.gif); background-repeat: no-repeat; background-origin: content-box; }
CSS background-clip 属性
CSS background-clip 属性指定背景的绘制区域。
该属性接受三个不同的值:
border-box - 背景绘制到边框的外部边缘(默认)
padding-box - 背景绘制到内边距的外边缘
content-box - 在内容框中绘制背景
下面的例子展示了 background-clip 属性:
#example1 { border: 10px dotted black; padding: 35px; background: yellow; background-clip: content-box; }
4.CSS颜色
CSS支持140多种颜色名称,以及十六进制值、RGB 值、RGBA 值、HSL 值、HSLA 值和不透明度。
RGBA 颜色
RGBA 颜色值是 RGB 颜色值的扩展,带有 alpha 通道 - 该通道规定颜色的不透明度。
RGBA 颜色值是这样规定的:rgba(red, green, blue, alpha)。 alpha 参数是介于 0.0(完全透明)和 1.0(完全不透明)之间的数字。
下面的例子定义了不同的 RGBA 颜色:
#p1 {background-color: rgba(255, 0, 0, 0.3);} /* 带不透明度的红色 */ #p2 {background-color: rgba(0, 255, 0, 0.3);} /* 带不透明度的绿色 */ #p3 {background-color: rgba(0, 0, 255, 0.3);} /* 带不透明度的蓝色 */
HSL 颜色
HSL 指的是色相、饱和度和亮度(Hue、Saturation 以及 Lightness)。
HSL 颜色值是这样规定的:hsl(hue, saturation, lightness)。
色相是色轮上的度数(从 0 到 360):
0(或 360)是红色
120 是绿色
240 是蓝色
饱和度是一个百分比值:100% 是全色。
亮度也是一个百分比值:0% 是深色(黑色),而 100% 是白色。
下面的例子定义了不同的 HSL 颜色:
#p1 {background-color: hsl(120, 100%, 50%);} /* 绿色 */ #p2 {background-color: hsl(120, 100%, 75%);} /* 浅绿色 */ #p3 {background-color: hsl(120, 100%, 25%);} /* 深绿色 */ #p4 {background-color: hsl(120, 60%, 70%);} /* 淡绿色 */
不透明度
CSS opacity 属性设置整个元素的不透明度(背景颜色和文本都将是不透明/透明的)。
opacity 属性值必须是介于 0.0(完全透明)和 1.0(完全不透明)之间的数字。
请注意,上面的文本也将是透明/不透明的!
下面的例子显示了带有不透明度的不同元素:
实例
#p1 {background-color:rgb(255,0,0);opacity:0.6;} /* 带不透明度的红色 */ #p2 {background-color:rgb(0,255,0);opacity:0.6;} /* 带不透明度的绿色 */ #p3 {background-color:rgb(0,0,255);opacity:0.6;} /* 带不透明度的蓝色 */
5.CSS渐变
CSS 渐变使您可以显示两种或多种指定颜色之间的平滑过渡。
CSS 定义了两种渐变类型:
线性渐变(向下/向上/向左/向右/对角线)
径向渐变(由其中心定义)
CSS 线性渐变
如需创建线性渐变,您必须定义至少两个色标。色标是您要呈现平滑过渡的颜色。您还可以设置起点和方向(或角度)以及渐变效果。
语法
background-image: linear-gradient(direction, color-stop1, color-stop2, ...);
线性渐变 - 从上到下(默认)
下面的例子显示了从顶部开始的线性渐变。它从红色开始,过渡到黄色:
#grad { background-image: linear-gradient(red, yellow); }
线性渐变 - 从左到右
下面的例子展示了从左开始的线性渐变。它从红色开始,过渡到黄色:
#grad { background-image: linear-gradient(to right, red , yellow); }
使用角度
如果希望对渐变角度做更多的控制,您可以定义一个角度,来取代预定义的方向(向下、向上、向右、向左、向右下等等)。值 0deg 等于向上(to top)。值 90deg 等于向右(to right)。值 180deg 等于向下(to bottom)。
语法
background-image: linear-gradient(angle, color-stop1, color-stop2);
这个角度指定水平线和渐变线之间的角度。
下面的例子展示了如何在线性渐变上使用角度:
实例
#grad { background-image: linear-gradient(-90deg, red, yellow); }
CSS 径向渐变
径向渐变由其中心定义。如需创建径向渐变,您还必须定义至少两个色标。
语法
background-image: radial-gradient(shape size at position, start-color, ..., last-color);
默认地,shape 为椭圆形,size 为最远角,position 为中心。
径向渐变-均匀间隔的色标(默认)
下面的例子展示了带有均匀间隔的色标的径向渐变:
#grad { background-image: radial-gradient(red, yellow, green); }
设置形状
shape 参数定义形状。它可接受 circle 或 ellipse 值。默认值为 ellipse(椭圆)。
下面的例子展示了一个圆形的径向渐变:
#grad { background-image: radial-gradient(circle, red, yellow, green); }
6.CSS Box Shadow
CSS box-shadow 属性
CSS box-shadow 属性应用阴影于元素。
最简单的用法是只指定水平阴影和垂直阴影:
div { box-shadow: 10px 10px; }
接下来,为阴影添加颜色:
带有灰色 box-shadow 的黄色 <div> 元素
div { box-shadow: 10px 10px grey; }
接下来,向阴影添加模糊效果:
div { box-shadow: 10px 10px 5px grey; }
卡片
您还可以使用 box-shadow 属性创建纸质卡片效果:
div.card { width: 250px; box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19); text-align: center; }
9. CSS3动画和过度
1.CSS过渡
CSS过渡允许您在给定的时间内平滑地改变属性值。
在本章中,您将学习如下属性:
transition
transition-delay
transition-duration
transition-property
transition-timing-function
如何使用 CSS 过渡?
如需创建过渡效果,必须明确两件事:
您要添加效果的 CSS 属性
效果的持续时间
注意:如果未规定持续时间部分,则过渡不会有效果,因为默认值为 0。
下面的例子展示了 100px * 100px 的红色 <div> 元素。 <div> 元素还为 width 属性指定了过渡效果,持续时间为 2 秒:
div { width: 100px; height: 100px; background: red; transition: width 2s; }
当指定的 CSS 属性(width)值发生变化时,将开始过渡效果。
现在,让我们为 width 属性指定一个鼠标悬停在 <div> 元素上时的新值:
div:hover { width: 300px; }
请注意,当光标从元素上移开时,它将逐渐变回其原始样式。
改变若干属性值
下面的例子为 width 和 height 属性都添加了过渡效果,width 是 2 秒,height 是 4 秒:
div { transition: width 2s, height 4s; }
指定过渡的速度曲线
transition-timing-function 属性规定过渡效果的速度曲线。
transition-timing-function 属性可接受以下值:
ease - 规定过渡效果,先缓慢地开始,然后加速,然后缓慢地结束(默认)
linear - 规定从开始到结束具有相同速度的过渡效果
ease-in -规定缓慢开始的过渡效果
ease-out - 规定缓慢结束的过渡效果
ease-in-out - 规定开始和结束较慢的过渡效果
cubic-bezier(n,n,n,n) - 允许您在三次贝塞尔函数中定义自己的值
下面的例子展示了可以使用的一些不同的速度曲线:
#div1 {transition-timing-function: linear;} #div2 {transition-timing-function: ease;} #div3 {transition-timing-function: ease-in;} #div4 {transition-timing-function: ease-out;} #div5 {transition-timing-function: ease-in-out;}
延迟过渡效果
transition-delay 属性规定过渡效果的延迟(以秒计)。
下例在启动之前有 1 秒的延迟:
div { transition-delay: 1s; }
过渡 + 转换
下例为转换添加过渡效果:
div { transition: width 2s, height 2s, transform 2s; }
您可以可以一一指定 CSS 过渡属性,如下所示:
div { transition-property: width; transition-duration: 2s; transition-timing-function: linear; transition-delay: 1s; }
或使用简写的 transition 属性:
div { transition: width 2s linear 1s; }
2.CSS动画
CSS 可实现 HTML 元素的动画效果,而不使用 JavaScript 或 Flash!
在本章中,您将学习如下属性:
@keyframes
animation-name
animation-duration
animation-delay
animation-iteration-count
animation-direction
animation-timing-function
animation-fill-mode
animation
什么是 CSS 动画?
动画使元素逐渐从一种样式变为另一种样式。
您可以随意更改任意数量的 CSS 属性。
如需使用 CSS 动画,您必须首先为动画指定一些关键帧。
关键帧包含元素在特定时间所拥有的样式。
@keyframes 规则
如果您在 @keyframes 规则中指定了 CSS 样式,动画将在特定时间逐渐从当前样式更改为新样式。
要使动画生效,必须将动画绑定到某个元素。
下面的例子将 "example" 动画绑定到 <div> 元素。动画将持续 4 秒钟,同时将 <div> 元素的背景颜色从 "red" 逐渐改为 "yellow":
/* 动画代码 */ @keyframes example { from {background-color: red;} to {background-color: yellow;} } /* 向此元素应用动画效果 */ div { width: 100px; height: 100px; background-color: red; animation-name: example; animation-duration: 4s; }
注意:animation-duration 属性定义需要多长时间才能完成动画。如果未指定 animation-duration 属性,则动画不会发生,因为默认值是 0s(0秒)。
在上面的例子中,通过使用关键字 "from" 和 "to"(代表 0%(开始)和 100%(完成)),我们设置了样式何时改变。
您也可以使用百分比值。通过使用百分比,您可以根据需要添加任意多个样式更改。
下面的例子将在动画完成 25%,完成 50% 以及动画完成 100% 时更改 <div> 元素的背景颜色:
/* 动画代码 */ @keyframes example { 0% {background-color: red;} 25% {background-color: yellow;} 50% {background-color: blue;} 100% {background-color: green;} } /* 应用动画的元素 */ div { width: 100px; height: 100px; background-color: red; animation-name: example; animation-duration: 4s; }
下面的例子将在动画完成 25%,完成 50% 以及动画完成 100% 时更改背景颜色和 <div> 元素的位置:
/* 动画代码 */ @keyframes example { 0% {background-color:red; left:0px; top:0px;} 25% {background-color:yellow; left:200px; top:0px;} 50% {background-color:blue; left:200px; top:200px;} 75% {background-color:green; left:0px; top:200px;} 100% {background-color:red; left:0px; top:0px;} } /* 应用动画的元素 */ div { width: 100px; height: 100px; position: relative; background-color: red; animation-name: example; animation-duration: 4s; }
延迟动画
animation-delay 属性规定动画开始的延迟时间。
下面的例子在开始动画前有 2 秒的延迟:
div { width: 100px; height: 100px; position: relative; background-color: red; animation-name: example; animation-duration: 4s; animation-delay: 2s; }
负值也是允许的。如果使用负值,则动画将开始播放,如同已播放 N 秒。
在下面的例子中,动画将开始播放,就好像它已经播放了 2 秒钟一样:
div { width: 100px; height: 100px; position: relative; background-color: red; animation-name: example; animation-duration: 4s; animation-delay: -2s; }
设置动画应运行多少次
animation-iteration-count 属性指定动画应运行的次数。
下面的例子在停止前把动画运行 3 次:
div { width: 100px; height: 100px; position: relative; background-color: red; animation-name: example; animation-duration: 4s; animation-iteration-count: 3; }
下面的例子使用值 "infinite" 使动画永远持续下去:
div { width: 100px; height: 100px; position: relative; background-color: red; animation-name: example; animation-duration: 4s; animation-iteration-count: infinite; }
反向或交替运行动画
animation-direction 属性指定是向前播放、向后播放还是交替播放动画。
animation-direction 属性可接受以下值:
normal - 动画正常播放(向前)。默认值
reverse - 动画以反方向播放(向后)
alternate - 动画先向前播放,然后向后
alternate-reverse - 动画先向后播放,然后向前
下例将以相反的方向(向后)运行动画:
div { width: 100px; height: 100px; position: relative; background-color: red; animation-name: example; animation-duration: 4s; animation-direction: reverse; }
下面的例子使用值 "alternate" 使动画先向前运行,然后向后运行:
div { width: 100px; height: 100px; position: relative; background-color: red; animation-name: example; animation-duration: 4s; animation-iteration-count: 2; animation-direction: alternate; }
下面的例子使用值 "alternate-reverse" 使动画先向后运行,然后向前运行:
div { width: 100px; height: 100px; position: relative; background-color: red; animation-name: example; animation-duration: 4s; animation-iteration-count: 2; animation-direction: alternate-reverse; }
指定动画的速度曲线
animation-timing-function 属性规定动画的速度曲线。
animation-timing-function 属性可接受以下值:
ease - 指定从慢速开始,然后加快,然后缓慢结束的动画(默认)
linear - 规定从开始到结束的速度相同的动画
ease-in - 规定慢速开始的动画
ease-out - 规定慢速结束的动画
ease-in-out - 指定开始和结束较慢的动画
cubic-bezier(n,n,n,n) - 运行您在三次贝塞尔函数中定义自己的值
下面这些例子展示了可以使用的一些不同速度曲线:
#div1 {animation-timing-function: linear;} #div2 {animation-timing-function: ease;} #div3 {animation-timing-function: ease-in;} #div4 {animation-timing-function: ease-out;} #div5 {animation-timing-function: ease-in-out;}
指定动画的填充模式
CSS 动画不会在第一个关键帧播放之前或在最后一个关键帧播放之后影响元素。animation-fill-mode 属性能够覆盖这种行为。
在不播放动画时(在开始之前,结束之后,或两者都结束时),animation-fill-mode 属性规定目标元素的样式。
animation-fill-mode 属性可接受以下值:
none - 默认值。动画在执行之前或之后不会对元素应用任何样式。
forwards - 元素将保留由最后一个关键帧设置的样式值(依赖 animation-direction 和 animation-iteration-count)。
backwards - 元素将获取由第一个关键帧设置的样式值(取决于 animation-direction),并在动画延迟期间保留该值。
both - 动画会同时遵循向前和向后的规则,从而在两个方向上扩展动画属性。
下面的例子让 <div> 元素在动画结束时保留来自最后一个关键帧的样式值:
div { width: 100px; height: 100px; background: red; position: relative; animation-name: example; animation-duration: 3s; animation-fill-mode: forwards; }
下面的例子在动画开始之前(在动画延迟期间)使 <div> 元素获得由第一个关键帧设置的样式值:
div { width: 100px; height: 100px; background: red; position: relative; animation-name: example; animation-duration: 3s; animation-delay: 2s; animation-fill-mode: backwards; }
下面的例子在动画开始之前使 <div> 元素获得第一个关键帧设置的样式值,以及在动画结束时保留最后一个关键帧的样式值:
div { width: 100px; height: 100px; background: red; position: relative; animation-name: example; animation-duration: 3s; animation-delay: 2s; animation-fill-mode: both; }
动画简写属性
下例使用六种动画属性:
div { animation-name: example; animation-duration: 5s; animation-timing-function: linear; animation-delay: 2s; animation-iteration-count: infinite; animation-direction: alternate; }
使用简写的 animation 属性也可以实现与上例相同的动画效果:
div { animation: example 5s linear 2s infinite alternate; }
10. CSS响应式设计
1.什么是响应式网页设计?
响应式web设计会让您的网页在所有设备上看起来都不错。
响应式web设计仅使用HTML和CSS。
响应式web设计并不是程序或JavaScript。
为所有用户获得最佳体验的设计,可以使用许多不同的设备来查看网页:台式机、平板电脑和手机。无论使用哪种设备,您的网页都应该看起来美观且易用。
网页不应舍弃信息来适合较小的设备,而应使其内容适合任何设备:
如果您使用 CSS 和 HTML 调整大小、隐藏、缩小、放大或移动内容,以使其在任何屏幕上看起来都很好,则称为响应式Web设计。
2.什么是视口?
视口(viewport)是用户在网页上的可见区域。
视口随设备而异,在移动电话上会比在计算机屏幕上更小。
在平板电脑和手机之前,网页仅设计为用于计算机屏幕,并且网页拥有静态设计和固定大小是很常见的。
然后,当我们开始使用平板电脑和手机上网时,固定大小的网页太大了,无法适应视口。为了解决这个问题,这些设备上的浏览器会按比例缩小整个网页以适合屏幕大小。
这并不是完美的!勉强是一种快速的修正。
设置视口
HTML5 引入了一种方法,使 Web 设计者可以通过 <meta> 标签来控制视口。
您应该在所有网页中包含以下 <meta> 视口元素:
<meta name="viewport" content="width=device-width, initial-scale=1.0">
它为浏览器提供了关于如何控制页面尺寸和缩放比例的指令。
width=device-width 部分将页面的宽度设置为跟随设备的屏幕宽度(视设备而定)。
当浏览器首次加载页面时,initial-scale=1.0 部分设置初始缩放级别。
下面分别是不带视口 meta 标签的网页、以及带视口 meta 标签的网页的例子:
3.什么是网格视图?
许多网页都基于网格视图(grid-view),这意味着页面被分割为几列:
在设计网页时,使用网格视图非常有帮助。这样可以更轻松地在页面上放置元素。
响应式网格视图通常有 12 列,总宽度为 100%,并且在调整浏览器窗口大小时会收缩和伸展。
构建响应式网格视图
让我们开始构建响应式网格视图。
首先,确保所有 HTML 元素的 box-sizing 属性设置为 border-box。这样可以确保元素的总宽度和高度中包括内边距(填充)和边框。
请在 CSS 中添加如下代码:
* { box-sizing: border-box; }
下面的例子展示了一张简单的响应式网页,其中包含两列:
.menu { width: 25%; float: left; } .main { width: 75%; float: left; }
4.什么是媒体查询?
媒体查询是 CSS3 中引入的一种 CSS 技术。
仅在满足特定条件时,它才会使用 @media 规则来引用 CSS 属性块。
如果浏览器窗口是 600px 或更小,则背景颜色为浅蓝色:
@media only screen and (max-width: 600px) { body { background-color: lightblue; } }
添加断点
在本教程中稍早前,我们制作了一张包含行和列的网页,但是这张响应式网页在小屏幕上看起来效果并不好。
媒体查询可以帮助您。我们可以添加一个断点,其中设计的某些部分在断点的每一侧会表现得有所不同。
使用媒体查询在 768px 处添加断点:
当屏幕(浏览器窗口)小于 768px 时,每列的宽度应为 100%:
/* 针对桌面设备: */ .col-1 {width: 8.33%;} .col-2 {width: 16.66%;} .col-3 {width: 25%;} .col-4 {width: 33.33%;} .col-5 {width: 41.66%;} .col-6 {width: 50%;} .col-7 {width: 58.33%;} .col-8 {width: 66.66%;} .col-9 {width: 75%;} .col-10 {width: 83.33%;} .col-11 {width: 91.66%;} .col-12 {width: 100%;} @media only screen and (max-width: 768px) { /* 针对手机: */ [class*="col-"] { width: 100%; } }
实验链接:https://developer.aliyun.com/adc/scenario/e01983c6c38b481db611c59ab514bc97