Main Content
DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>exampletitle>
<link rel="stylesheet" href="./index.css">
<script src="./index.js">script>
head>
<body>
<div>
<h1>1. CSSh1>
<p class="box">CSS(Cascading Style Sheets,层叠样式表)是用于控制HTML元素在网页上如何显示的一种标记语言。
它允许开发者为网页创建样式,包括布局、颜色、字体和响应式设计等。通过CSS,可以将设计和内容分离,使得网页更易于维护和访问。
CSS(Cascading Style Sheets,层叠样式表)是用于控制HTML元素在网页上如何显示的一种标记语言。
它允许开发者为网页创建样式,包括布局、颜色、字体和响应式设计等。通过CSS,可以将设计和内容分离,使得网页更易于维护和访问。
CSS(Cascading Style Sheets,层叠样式表)是用于控制HTML元素在网页上如何显示的一种标记语言。
它允许开发者为网页创建样式,包括布局、颜色、字体和响应式设计等。通过CSS,可以将设计和内容分离,使得网页更易于维护和访问。
p>
<span>测试spanspan>
div>
<div>
<h1>2. CSSh1>
<p>CCSS(Cascading Style Sheets,层叠样式表)是用于控制HTML元素在网页上如何显示的一种标记语言。
它允许开发者为网页创建样式,包括布局、颜色、字体和响应式设计等。通过CSS,可以将设计和内容分离,使得网页更易于维护和访问。
CSS(Cascading Style Sheets,层叠样式表)是用于控制HTML元素在网页上如何显示的一种标记语言。
它允许开发者为网页创建样式,包括布局、颜色、字体和响应式设计等。通过CSS,可以将设计和内容分离,使得网页更易于维护和访问。
CSS(Cascading Style Sheets,层叠样式表)是用于控制HTML元素在网页上如何显示的一种标记语言。
它允许开发者为网页创建样式,包括布局、颜色、字体和响应式设计等。通过CSS,可以将设计和内容分离,使得网页更易于维护和访问。
p>
div>
<div>
<h1>3. CSSh1>
<p>CSS(Cascading Style Sheets,层叠样式表)是用于控制HTML元素在网页上如何显示的一种标记语言。
它允许开发者为网页创建样式,包括布局、颜色、字体和响应式设计等。通过CSS,可以将设计和内容分离,使得网页更易于维护和访问。
CSS(Cascading Style Sheets,层叠样式表)是用于控制HTML元素在网页上如何显示的一种标记语言。
它允许开发者为网页创建样式,包括布局、颜色、字体和响应式设计等。通过CSS,可以将设计和内容分离,使得网页更易于维护和访问。
CSS(Cascading Style Sheets,层叠样式表)是用于控制HTML元素在网页上如何显示的一种标记语言。
它允许开发者为网页创建样式,包括布局、颜色、字体和响应式设计等。通过CSS,可以将设计和内容分离,使得网页更易于维护和访问。
p>
div>
<div>
<h1>4. CSSh1>
<p>CSS(Cascading Style Sheets,层叠样式表)是用于控制HTML元素在网页上如何显示的一种标记语言。
它允许开发者为网页创建样式,包括布局、颜色、字体和响应式设计等。通过CSS,可以将设计和内容分离,使得网页更易于维护和访问。
CSS(Cascading Style Sheets,层叠样式表)是用于控制HTML元素在网页上如何显示的一种标记语言。
它允许开发者为网页创建样式,包括布局、颜色、字体和响应式设计等。通过CSS,可以将设计和内容分离,使得网页更易于维护和访问。
CSS(Cascading Style Sheets,层叠样式表)是用于控制HTML元素在网页上如何显示的一种标记语言。
它允许开发者为网页创建样式,包括布局、颜色、字体和响应式设计等。通过CSS,可以将设计和内容分离,使得网页更易于维护和访问。
p>
div>
body>
html>
通常用在块级元素内,width
和height
属性是用来设置元素的宽度和高度的。这些属性定义了元素的尺寸,即宽度(水平方向)和高度(垂直方向)的大小。
默认情况下,浏览器会让元素自动适应浏览器的尺寸和屏幕尺寸,但是你可以使用这两个参数去设置它的具体数值。
width:
width
属性用于设置元素的宽度。在你的代码中,它被设置为500px
,意味着该元素的宽度是500像素。.box {
width: 500px; /* 设置元素的宽度为500像素 */
}
height:
height
属性用于设置元素的高度。在你的代码中,它被设置为280px
,意味着该元素的高度是280像素。.box {
height: 280px; /* 设置元素的高度为280像素 */
}
这些属性允许你明确地控制元素的大小,以适应你的设计需求。在CSS中,你可以使用不同的单位来指定宽度和高度,例如像素(px)、百分比(%)、em单位、rem单位等。像素是固定的尺寸单位,而百分比、em和rem则是相对的尺寸单位,它们的大小是相对于其他元素或屏幕尺寸而定的。
border:
.box {
border: 3px dotted grey;
}
3px
是边框宽度。dotted
表示边框是点状的。grey
是边框颜色。border-radius:
此属性设置元素边框的圆角半径,使得边框拐角处呈现为圆角,而非默认的直角。值会是圆角的半径。
示例
.box {
border-radius: 8px;
}
内边距(Padding): 内边距是**元素边框与元素内容之间的空间**。它是元素内部的空白区域,用于创建元素内容和元素边框之间的缓冲空间。在CSS中,内边距通过padding
属性来设置。
padding-top
: 设置元素的上内边距。padding-right
: 设置元素的右内边距。padding-bottom
: 设置元素的下内边距。padding-left
: 设置元素的左内边距。padding
: 同时设置元素的上、右、下、左内边距。/* 单独设置内边距 */
.element {
padding-top: 10px;
padding-right: 20px;
padding-bottom: 10px;
padding-left: 20px;
}
/* 使用一个值来设置所有的内边距 */
.element {
padding: 10px;
}
/* 使用两个值来设置内边距:第一个值为上下内边距,第二个值为左右内边距 */
.element {
padding: 10px 20px;
}
/* 使用四个值来分别设置上、右、下、左内边距 */
.element {
padding: 10px 20px 30px 40px;
}
外边距(Margin): 外边距是元素边框外侧到相邻元素边框的空间。它是元素周围的空白区域,用于在元素之间创建空间,以保持页面的清晰和组织良好的布局。在CSS中,外边距通过margin
属性来设置。
属性:
margin-top
: 设置元素的上外边距。margin-right
: 设置元素的右外边距。值设置为auto的时候可以实现元素垂直居中显示。margin-bottom
: 设置元素的下外边距。margin-left
: 设置元素的左外边距。值设置为auto的时候可以实现元素垂直居中显示。margin
: 同时设置元素的上、右、下、左外边距。设置为0 auto
可以实现垂直居中显示示例代码:
/* 单独设置外边距 */
.element {
margin-top: 10px;
margin-right: 20px;
margin-bottom: 10px;
margin-left: 20px;
}
/* 使用一个值来设置所有的外边距 */
.element {
margin: 10px;
}
/* 使用两个值来设置外边距:第一个值为上下外边距,第二个值为左右外边距 */
.element {
margin: 10px 20px;
}
/* 使用四个值来分别设置上、右、下、左外边距 */
.element {
margin: 10px 20px 30px 40px;
}
特殊处理:%百分比布局
width: 100%
的意义:
当你设置一个元素的width
属性为100%
时,你是在告诉浏览器将该元素的宽度设置为其父元素的宽度。这意味着,元素会尽可能地扩展以填充其父元素的水平空间。
.element {
width: 100%;
}
与父容器的宽度计算:
在默认情况下,一个元素的宽度是由其内容区的宽度、内边距、边框和外边距组成的。当你设置width: 100%
时,你只是设置了元素内容区的宽度等于父元素的宽度,而不是整个元素(包括内边距和边框)的宽度。
可能出现溢出屏幕的情况:
如果元素具有内边距或边框,那么即使设置了width: 100%
,元素的总宽度也会超过其父元素的宽度,可能导致元素溢出其父元素或溢出屏幕。
.element {
width: 100%;
padding: 10px;
border: 5px solid black;
}
解决方法 (box-sizing: border-box;
):
box-sizing
属性允许你更改浏览器计算元素宽度和高度的方式。通过设置box-sizing: border-box;
,你可以告诉浏览器包括内边距和边框在内,但不包括外边距在内,来计算元素的宽度和高度。
.element {
width: 100%;
padding: 10px;
border: 5px solid black;
box-sizing: border-box;
}
这样,即使有内边距和边框,元素的总宽度也会与其父元素的宽度相匹配,防止溢出。
为什么这样能解决:
box-sizing: border-box;
是因为它改变了浏览器计算元素宽度的方式。在这种模式下,元素的width
和height
属性包括了内边距和边框,而不仅仅是内容区域。这意味着,即使元素有内边距和边框,其宽度也会保持为100%
,与父元素的宽度相匹配,从而防止了溢出的问题。
*{ padding: 0; margin: 0;}
是一种CSS重置(CSS Reset)的简单形式。让我们逐一解释:
通配符 *
:
通配符 *
是一个全局选择器,它匹配页面上的所有元素。
padding: 0;
和 margin: 0;
:
这两条样式规则分别将所有元素的内边距(padding)和外边距(margin)设置为0。
* {
padding: 0;
margin: 0;
}
消除浏览器默认样式:
不同浏览器有不同的默认样式。例如,某些浏览器可能会为、
、
等元素提供默认的
margin
和padding
值。通过使用* { padding: 0; margin: 0; }
,你可以重置所有元素的margin
和padding
值,确保在不同浏览器中的一致性。
创建清晰的布局:
在开始创建网站布局之前重置margin
和padding
值是一个好习惯,我们可以放在css布局里的首行。这样做可以确保你的布局不会受到未预期的空间影响,使布局过程更为清晰和可预测。
减少样式冲突:
在大型项目或使用第三方库时,重置margin
和padding
值可以帮助减少样式冲突,使样式更容易管理和维护。
在CSS中,背景属性用于为元素设置背景内容。你可以设置颜色、图像、重复、位置和滚动等属性来配置背景。以下是背景属性及其用法的概述:
background-color
):设置元素的背景颜色。
.element {
background-color: #ff0000; /* 红色 */
}
background-image
):设置元素的背景图像。
.element {
background-image: url('background.jpg');
}
background-repeat
):设置背景图像是否以及如何重复。
.element {
background-repeat: no-repeat; /* 不重复 */
}
background-position
):设置背景图像的位置。
.element {
background-position: center center; /* 水平垂直居中 */
}
background-attachment
):设置背景图像是固定的,还是随着页面的其余部分滚动。
.element {
background-attachment: fixed;
}
background-size
):设置背景图像的大小。
.element {
background-size: cover; /* 覆盖整个元素 */
}
background
):你可以使用 background
属性将所有这些值组合到一个声明中。
.element {
background: #ff0000 url('background.jpg') no-repeat center center fixed;
}
你还可以为元素设置多个背景图像,每个背景图像之间用逗号分隔。
.element {
background-image: url('overlay.png'), url('background.jpg');
}
box-shadow
属性是用于向框(即元素的边框外边缘)添加阴影效果。这个属性可以创建出立体效果,或者强调某个元素。box-shadow
属性可以接受多个值,用于控制阴影的水平偏移、垂直偏移、模糊半径、扩展半径和颜色。这里是 box-shadow
属性的基本结构和用法:
基本语法:
box-shadow: h-offset v-offset blur spread color;
h-offset
(水平偏移): 水平方向上阴影的偏移量。正值向右偏移,负值向左偏移。v-offset
(垂直偏移): 垂直方向上阴影的偏移量。正值向下偏移,负值向上偏移。blur
(模糊半径): 阴影的模糊度。值越大,阴影越模糊。值为0时,阴影为硬边。spread
(扩展半径): 阴影的扩展大小。正值会使阴影扩大,负值会使阴影缩小。color
(颜色): 阴影的颜色。示例:
.element {
box-shadow: 10px 10px 5px 0 rgba(0, 0, 0, 0.5);
}
在这个示例中,元素具有一个向右和向下偏移10px的阴影,模糊半径为5px,没有扩展半径(因为它是0),并且阴影的颜色是半透明的黑色。
你还可以应用多重阴影,只需用逗号分隔每个阴影值即可:
.element {
box-shadow: 3px 3px 5px 0 rgba(0, 0, 0, 0.3),
-3px -3px 5px 0 rgba(255, 255, 255, 0.3);
}
在这个示例中,元素具有两个阴影:一个向右和向下偏移,另一个向左和向上偏移。
在处理文本时,CSS提供了多种属性来控制文本的显示和格式。以下是一些常用的文本处理属性及其用法和示例。
text-align
- 文本对齐方式此属性用于设置文本的水平对齐方式。
text-align: left | right | center | justify;
left
: 文本左对齐(默认值)。right
: 文本右对齐。center
: 文本居中对齐。justify
: 文本两端对齐。p {
text-align: center;
}
text-decoration
- 文本装饰此属性用于设置文本的装饰,如下划线、横线等。
基本语法:
text-decoration: none | underline | overline | line-through | blink;
none
: 无装饰(默认值)。underline
: 下划线。overline
: 上划线。line-through
: 删除线。blink
: 闪烁(不推荐使用,因为它可能导致可用性和可访问性问题)。p {
text-decoration: underline;
}
text-transform
- 文本转换此属性用于控制文本的大小写。
text-transform: none | uppercase | lowercase | capitalize;
none
: 无转换(默认值)。uppercase
: 全部大写。lowercase
: 全部小写。capitalize
: 每个单词的首字母大写。p {
text-transform: uppercase;
}
letter-spacing
- 字母间距此属性用于设置字符之间的间距。
letter-spacing: normal | length-value;
normal
: 正常间距(默认值)。length-value
: 自定义间距值(例如 2px
、0.1em
等)。p {
letter-spacing: 2px;
}
word-spacing
- 单词间距此属性用于设置单词之间的间距。
word-spacing: normal | length-value;
normal
: 正常间距(默认值)。length-value
: 自定义间距值(例如 4px
、0.2em
等)。p {
word-spacing: 4px;
}
line-height
- 行高此属性用于设置行之间的间距。
line-height: normal | number | length-value | percentage;
normal
: 正常行高(默认值)。number
: 相对于字体大小的倍数(例如 1.5
)。length-value
: 固定行高值(例如 20px
、1.5em
等)。percentage
: 相对于字体大小的百分比(例如 150%
)。p {
line-height: 1.5;
}
text-indent
- 文本缩进text-indent
属性用于设置文本的首行缩进。
text-indent: length-value | percentage;
length-value
: 固定缩进值(例如 20px
、2em
等)。percentage
: 相对于包含块宽度的百分比值。p {
text-indent: 2em;
}
在这个示例中,p
元素的首行将缩进相当于当前字体大小的2倍。
font
- 字体设置font
属性是一个复合属性,它允许您在一个声明中设置多个字体属性。
font: font-style font-variant font-weight font-size/line-height font-family;
font-style
: 字体样式 (normal
, italic
, oblique
)。font-variant
: 字体变体 (normal
, small-caps
)。font-weight
: 字体粗细 (normal
, bold
, bolder
, lighter
, 100
to 900
)。font-size
: 字体大小 (medium
, xx-small
, x-small
, small
, large
, x-large
, xx-large
, 或者使用长度值例如 12px
, 1.5em
等)。line-height
: 行高(同上面的 line-height
属性)。font-family
: 字体系列(例如 "Helvetica, Arial, sans-serif"
)。p {
font: italic small-caps bold 1em/1.5 Arial, sans-serif;
}
在这个示例中,p
元素将有斜体、小型大写字母、粗体、1em字体大小、1.5的行高,以及Arial或sans-serif字体。
text-shadow
- 文本阴影text-shadow
属性用于给文本添加阴影效果。
text-shadow: h-offset v-offset blur-radius color;
h-offset
(水平偏移): 水平方向上阴影的偏移量。正值向右偏移,负值向左偏移。v-offset
(垂直偏移): 垂直方向上阴影的偏移量。正值向下偏移,负值向上偏移。blur-radius
(模糊半径): 阴影的模糊度。值越大,阴影越模糊。值为0时,阴影为硬边。color
(颜色): 阴影的颜色。p {
text-shadow: 2px 2px 2px rgba(0, 0, 0, 0.3);
}
在这个示例中,p
元素的文本将有一个向右和向下偏移2px,模糊半径为2px,颜色为半透明的黑色的阴影。
writing-mode
- 写作模式writing-mode
属性用于定义文本方向和布局方向。
writing-mode: horizontal-tb | vertical-rl | vertical-lr;
horizontal-tb
(水平从上到下): 文字水平显示,并从上到下排列。vertical-rl
(垂直从右到左): 文字垂直显示,并从右到左排列。vertical-lr
(垂直从左到右): 文字垂直显示,并从左到右排列。p {
writing-mode: vertical-rl;
}
在这个示例中,p
元素的文本将垂直显示,并从右向左排列。
text-orientation
- 文本方向text-orientation
属性用于设置文字在垂直模式下的方向。
text-orientation: mixed | upright | sideways;
mixed
: 文字的方向根据单个字符的默认方向来确定。upright
: 所有字符都保持直立,不旋转。sideways
: 所有字符都侧面显示,旋转90度。p {
writing-mode: vertical-rl;
text-orientation: upright;
}
在这个示例中,p
元素的文本将垂直显示,并且所有字符都保持直立,不旋转。
这两个属性通常一起使用,以实现特定的文本布局和方向效果,特别是对于需要垂直文本布局的语言和设计。
position
- 定位属性position
属性用于设置元素的定位类型,它决定了元素如何在页面上定位。
position: static | relative | absolute | fixed | sticky;
static
(静态定位): 默认值,元素按照正常的文档流定位。relative
(相对定位): 元素相对于其正常位置进行定位。可以使得子容器按照父容器的位置进行定位,也就是让子容器的定位始终以父容器的尺寸进行活动。absolute
(绝对定位): 元素相对于最近的已定位祖先元素进行定位,如果没有已定位的祖先元素,则相对于文档的初始包含块进行定位。fixed
(固定定位): 元素相对于浏览器窗口进行定位,即使页面滚动,它也始终保持在相同的位置。可以做返回顶部的方式快捷方式实现。sticky
(粘性定位): 是相对定位和固定定位的混合类型,元素在跨越特定点时会切换为固定定位。.element {
position: absolute;
top: 50px;
left: 100px;
}
top
, right
, bottom
, left
- 偏移属性这些属性用于设置定位元素的偏移量,它们的效果会受到 position
属性的影响。
top: auto | | ;
right: auto | | ;
bottom: auto | | ;
left: auto | | ;
auto
: 自动计算偏移量。
: 指定偏移量,例如 50px
。
: 相对于包含块的百分比偏移。.element {
position: absolute;
top: 10%;
left: 20%;
}
在这个示例中,.element
元素被绝对定位,其顶部偏移了包含块高度的 10%,左侧偏移了包含块宽度的 20%。
这些属性允许你精确控制元素的位置,通常与 position
属性一起使用来实现各种布局效果。
布局分类
两种
文档流本来就是自适应的(响应式的),不需要加额外的样式
第三种布局
布局的两种思路
从大到小
从小到大
两种均可
布局需要用到什么属性?
Flexbox 是 CSS3 引入的一种新的布局模式,旨在提供一个更加高效的方式来对容器中的项进行对齐、方向和顺序的控制。
display: flex | inline-flex;
flex-direction
(方向): 定义主轴的方向(即项目的排列方向)。可选值有 row
(水平方向), row-reverse
(水平反向), column
(垂直方向), column-reverse
(垂直反向)。flex-wrap
(换行): 定义如果一条轴线排不下,如何换行。可选值有 nowrap
(不换行), wrap
(换行), wrap-reverse
(反向换行)。flex-flow
: 是 flex-direction
和 flex-wrap
的简写形式,默认值为 row nowrap
。justify-content
(主轴对齐): 定义项目在主轴上的对齐方式。可选值有 flex-start
(头部对齐), flex-end
(尾部对齐), center
(居中对齐), space-between
(两端对齐,项目之间的间隔相等), space-around
(每个项目两侧的间隔相等)。align-items
(交叉轴对齐): 定义项目在交叉轴上如何对齐。可选值有 flex-start
, flex-end
, center
, baseline
, stretch
。align-content
(多行对齐): 定义多轴线的对齐方式。该属性对单行 flex 容器无效。order
: 定义项目的排列顺序,数值越小,排列越靠前,默认为0。flex-grow
: 定义项目的放大比例,默认为0。flex-shrink
: 定义项目的缩小比例,默认为1。flex-basis
: 定义项目的原始大小。flex
: 是 flex-grow
, flex-shrink
和 flex-basis
的简写,默认值为 0 1 auto
。align-self
: 允许单个项目有与其他项目不一样的对齐方式,可覆盖 align-items
属性。.container {
display: flex;
flex-direction: row;
justify-content: space-between;
}
.item {
flex-grow: 1;
}
align-items
属性是用于在 Flexbox(弹性布局)或 Grid(网格布局)容器中对齐交叉轴上的项目。
align-items: stretch | flex-start | flex-end | center | baseline | first baseline | last baseline | start | end | self-start | self-end | safe center | unsafe center;
stretch
(默认值): 项目被拉伸以适应容器。flex-start / start
: 项目位于容器的开头。flex-end / end
: 项目位于容器的末尾。center
: 项目位于容器的中心。baseline
: 项目的基线对齐。first baseline
: 对齐到容器的第一个项目的基线。last baseline
: 对齐到容器的最后一个项目的基线。self-start
: 对齐到项目自己的开始位置。self-end
: 对齐到项目自己的结束位置。safe center
: 当对齐项目可能溢出容器时,将它们安全地对齐在容器的中心。unsafe center
: 忽略溢出,强制将项目对齐在容器的中心。.container {
display: flex;
align-items: center;
}
justify-content
属性用于在 Flexbox(弹性布局)或 Grid(网格布局)容器中对齐主轴上的项目。
justify-content: flex-start | flex-end | center | space-between | space-around | space-evenly | start | end | left | right | safe center | unsafe center;
flex-start / start / left
: 项目位于容器的开头。flex-end / end / right
: 项目位于容器的末尾。center
: 项目位于容器的中心。space-between
: 项目均匀分布在容器里,第一个项目位于容器的开始位置,最后一个项目位于容器的结束位置。space-around
: 项目均匀分布在容器里,项目之间的间隔是相同的。space-evenly
: 项目均匀分布在容器里,项目之间和容器边缘的间隔是相同的。.container {
display: flex;
justify-content: space-between;
}
flex
属性是 flex-grow
, flex-shrink
, 和 flex-basis
的简写属性。它是用于在 Flexbox(弹性布局)中设置弹性项目的放大、缩小和基础大小。
flex: flex-grow flex-shrink flex-basis | auto | initial | none;
flex-grow
: 定义项目的放大比例。flex-shrink
: 定义项目的缩小比例。flex-basis
: 定义项目的原始大小。auto
: 根据容器和项目的大小自动计算 flex-grow
, flex-shrink
, 和 flex-basis
。initial
: 设置 flex
的初始值为 0 1 auto
。none
: 设置 flex
的值为 0 0 auto
。.item {
flex: 1 0 auto;
}
该属性用于定义主轴的方向,即项目的排列方向。
row
(default): 从左到右排列。row-reverse
: 从右到左排列。column
: 从上到下排列。column-reverse
: 从下到上排列。<div style="display: flex; flex-direction: row;">
<div>Item 1div>
<div>Item 2div>
<div>Item 3div>
div>
该属性定义了项目在主轴上如何换行。
nowrap
(default): 不换行。wrap
: 换行,第一行在上方。wrap-reverse
: 换行,第一行在下方。<div style="display: flex; flex-wrap: wrap;">
<div>Item 1div>
<div>Item 2div>
<div>Item 3div>
div>
该属性定义了多轴线的对齐方式。
flex-start
: 各行向起点对齐。flex-end
: 各行向终点对齐。center
: 各行居中对齐。space-between
: 与交叉轴两端对齐,轴线之间的间隔平均分布。space-around
: 轴线之间的间隔平均分布。<div style="display: flex; flex-wrap: wrap; align-content: flex-start;">
<div>Item 1div>
<div>Item 2div>
<div>Item 3div>
div>
flex-flow
是flex-direction
和flex-wrap
的简写形式,默认值为row nowrap
。
<div style="display: flex; flex-flow: row wrap;">
<div>Item 1div>
<div>Item 2div>
<div>Item 3div>
div>
该属性允许默认对齐方式被覆盖,用于单个项目。
auto
: 继承容器的align-items
属性,如果没有父容器则为stretch
。flex-start
: 交叉轴的起点对齐。flex-end
: 交叉轴的终点对齐。center
: 交叉轴的中点对齐。baseline
: 项目的第一行文字的基线对齐。stretch
: 如果项目未设置高度或设为auto,将占满整个容器的高度。<div style="display: flex;">
<div style="align-self: flex-start;">Item 1div>
<div>Item 2div>
<div>Item 3div>
div>
该属性定义了在分配多余空间之前,项目占据的主轴空间(main size)。它的默认值为auto
,即项目的本来大小。
<div style="display: flex;">
<div style="flex-basis: 200px;">Item 1div>
<div>Item 2div>
<div>Item 3div>
div>
该属性定义了项目的缩小比例,默认为1
,即如果空间不足,该项目将缩小。
<div style="display: flex;">
<div style="flex-shrink: 2;">Item 1div>
<div>Item 2div>
<div>Item 3div>
div>
该属性定义了项目的放大比例,默认为0
,即如果存在剩余空间,也不放大。
<div style="display: flex;">
<div style="flex-grow: 1;">Item 1div>
<div>Item 2div>
<div>Item 3div>
div>
该属性定义了项目的排列顺序。数值越小,排列越靠前,默认为0
。
<div style="display: flex;">
<div style="order: 2;">Item 1div>
<div style="order: 1;">Item 2div>
<div style="order: 3;">Item 3div>
div>
CSS Grid Layout 是一个基于网格的布局系统,它可以处理两维布局,行和列。
display: grid | inline-grid;
grid-template-columns
/ grid-template-rows
: 定义列 / 行的大小。grid-template-areas
: 定义区域。grid-template
: 是 grid-template-rows
, grid-template-columns
和 grid-template-areas
的简写。grid-column-gap
/ grid-row-gap
: 定义列 / 行的间隔。grid-gap
: 是 grid-row-gap
和 grid-column-gap
的简写。justify-items
/ align-items
: 定义项目在单元格中的位置。justify-content
/ align-content
: 定义整个网格在容器中的位置。grid-column-start
/ grid-column-end
/ grid-row-start
/ grid-row-end
: 定义项目的位置和区域。grid-column
/ grid-row
: 是 grid-column-start
/ grid-column-end
, grid-row-start
/ grid-row-end
的简写形式。grid-area
: 定义项目所在的区域或位置。.container {
display: grid;
grid-template-columns: repeat(3, 1fr);
grid-gap: 10px;
}
.item {
grid-column: span 2;
}p
display
属性用于设置元素的显示模式。在 Grid 布局中,它可以设置为 grid
或 inline-grid
。
grid
: 此值将元素设置为块级网格容器。inline-grid
: 此值将元素设置为内联网格容器。.container {
display: grid;
}
在此示例中,.container
元素被设置为块级网格容器。
这两个属性用于定义网格的列和行的大小。
: 可以是长度值、百分比、分数值或者 auto
。
: 自定义线名,可以用于更好地定位网格项。.container {
display: grid; /* 设置容器为网格布局 */
grid-template-columns: repeat(3, 1fr); /* 设置三列,每列宽度为容器宽度的三分之一 */
grid-template-rows: 100px 200px; /* 设置两行,第一行高度为100px,第二行高度为200px */
/* grid-template-columns: 200px 300px 200px; */ /* 设置三列,宽度分别为200px, 300px, 200px */
/* grid-template-columns: 1fr 1fr 1fr*/ /* 设置三列,每列宽度为容器宽度的三分之一 */
/* grid-template-columns: repeat(3, 1fr); */ /* 设置三列,每列宽度为容器宽度的三分之一,与上面的代码相同 */
/* grid-template-columns: repeat(auto-fill, 200px);*/ /* 自动填充尽可能多的200px宽的列 */
grid-template-columns: 300px auto 200px; /* 设置三列,宽度分别为300px, 自动, 200px,中间的列宽度自适应 */
height: 600px; /* 设置容器高度为600px */
grid-template-rows: 1fr 2fr; /* 设置两行,第二行的高度是第一行的两倍 */
}
.container_item {
padding: 10px; /* 设置内边距为10px */
border: 1px solid #ccc; /* 设置1px宽的实线边框,颜色为#ccc */
border-radius: 5px; /* 设置边框圆角为5px */
background-color: #f9f9f9; /* 设置背景颜色为#f9f9f9 */
overflow: hidden; /* 设置溢出内容为隐藏 */
}
在此示例中:
.container
选择器下的代码是用于设置网格容器的布局和尺寸。.container_item
选择器下的代码是用于设置网格项的样式,包括内边距、边框、边框圆角、背景颜色和溢出处理。这两个属性用于指定网格项的位置。
/
: 指定网格项的起始和结束位置。.item {
grid-column: 1 / 3;
grid-row: 2 / 4;
}
在此示例中,.item
元素的列位置从第1列线开始到第3列线结束,行位置从第2行线开始到第4行线结束。
grid-gap
属性是 row-gap
和 column-gap
的简写,它用于设置行和列之间的间隙。
: 行间隙的大小。
: 列间隙的大小。.container {
grid-gap: 10px 15px;
}
在此示例中,设置了10px的行间隙和15px的列间隙。
这两个属性用于控制网格容器中的项如何对齐。
start
: 项对齐到网格的起始边。end
: 项对齐到网格的结束边。center
: 项在网格中居中对齐。stretch
: 项拉伸以填充网格区域。.container {
justify-items: center;
align-items: stretch;
}
在此示例中,所有项在其网格区域中水平居中,垂直方向上拉伸以填充网格区域。
当你有超出你明确定义的网格的项时,这些属性为自动创建的网格轨道设置大小。
: 轨道的大小,可以是长度值、百分比、分数值或者 auto
。.container {
grid-auto-columns: 100px;
grid-auto-rows: 100px;
}
在此示例中,任何超出明确定义网格的项都会在一个100px宽的列和100px高的行中放置。
Grid 布局是非常强大的,它可以用于创建复杂的布局,而不需要额外的 HTML 元素或复杂的 CSS。它特别适用于构建具有复杂结构的应用程序界面或网页。
过渡是指元素从一个状态逐渐改变为另一个状态的效果。在CSS中,我们通过transition
属性来实现过渡效果。
变换是指通过CSS改变元素的形状和位置。transform
属性提供了多种方法来控制元素的变换,包括移动、旋转、缩放和倾斜等。
translate
, translateX
, translateY
translate(x, y)
: 沿x和y轴移动元素。translateX(x)
: 沿x轴移动元素。translateY(y)
: 沿y轴移动元素。<div style="transform: translate(50px, 50px);">
Translate me
div>
rotate
rotate(angle)
: 旋转元素。参数是旋转的角度,可以是deg, rad, grad 或turn。<div style="transform: rotate(45deg);">
Rotate me
div>
transform-origin
transform-origin
: 改变元素的变换原点。<div style="transform: rotate(45deg); transform-origin: 20% 40%;">
Change my origin
div>
scale
scale(x, y)
: 缩放元素的大小。<div style="transform: scale(1.5, 1.5);">
Scale me
div>
skew
skew(x-angle, y-angle)
: 倾斜元素。<div style="transform: skew(30deg, 20deg);">
Skew me
div>
transform-style: preserve-3d
transform-style
: 设置嵌套元素是位于3D空间还是平面。preserve-3d
: 表示嵌套元素位于3D空间。<div style="transform-style: preserve-3d;">
3D space
div>
perspective
perspective
: 定义3D元素距视点的距离。<div style="perspective: 500px;">
3D perspective
div>
translate3d
, rotate3d
translate3d(x, y, z)
: 沿x, y和z轴移动元素。rotate3d(x, y, z, angle)
: 围绕一个3D向量旋转元素。<div style="transform: translate3d(50px, 50px, 50px);">
Translate me in 3D
div>
<div style="transform: rotate3d(1, 1, 1, 45deg);">
Rotate me in 3D
div>
这些属性和方法可以单独使用,也可以组合使用,创建丰富多彩的动画和效果。在3D变换中,preserve-3d
和perspective
属性是非常重要的,它们控制了3D空间的表现和视觉效果。
CSS动画是使元素从一种样式逐渐变为另一种样式的效果。
@keyframes
是 CSS 动画的基础,允许你创建动画序列,定义动画过程中的每个阶段。通过 @keyframes
, 你可以在不同的时间点指定元素的样式。这些时间点以百分比表示,0% 代表动画开始,100% 代表动画结束,而中间的百分比表示动画过程中的各个阶段。
@keyframes animationName {
0% {
/* 动画开始时的样式 */
}
50% {
/* 动画中间时的样式 */
}
100% {
/* 动画结束时的样式 */
}
}
animationName
: 是你为此动画定义的名称,它在 animation
属性中使用。0%
, 50%
, 100%
等):代表动画的各个阶段,你可以在每个阶段定义元素的不同样式。假设你想创建一个简单的动画,使元素在 2 秒内从左移动到右。你可以如下定义一个 @keyframes
动画:
@keyframes moveRight {
0% {
left: 0;
}
100% {
left: 200px;
}
}
/* 应用动画到元素 */
.element {
position: relative;
animation: moveRight 2s forwards;
}
HTML代码:
<div class="element">我是一个会移动的元素div>
在这个示例中:
moveRight
的 @keyframes
动画,该动画在 0%(开始)时具有 left
值为 0
,在 100%(结束)时具有 left
值为 200px
。.element
类中使用 animation
属性应用了 moveRight
动画,设置动画持续时间为 2s
,并使用 forwards
保留动画结束时的样式。你可以在 @keyframes
中定义多个阶段,以创建更复杂的动画。例如,如果你想让元素在动画过程中先变大,然后变小,你可以如下定义动画:
@keyframes growShrink {
0% {
transform: scale(1);
}
50% {
transform: scale(1.5);
}
100% {
transform: scale(1);
}
}
/* 应用动画到元素 */
.element {
animation: growShrink 2s infinite;
}
HTML代码:
<div class="element">我是一个会变大变小的元素div>
在这个示例中:
@keyframes growShrink
动画在 0% 和 100% 时保持原始大小(scale(1)
),在 50% 时变大到 1.5 倍(scale(1.5)
)。.element
类中的 animation
属性应用了 growShrink
动画,设置动画持续时间为 2s
,并使用 infinite
使动画无限次循环。@-webkit-keyframes
@-webkit-keyframes
是一个专为WebKit浏览器引擎(如Safari和旧版的Chrome)准备的前缀版本的 @keyframes
规则。它的语法和用法与 @keyframes
完全相同,但是加了 -webkit-
前缀以确保兼容性。
在早期,当 CSS 动画刚刚推出时,不同的浏览器需要不同的前缀来支持 CSS 动画。为了确保动画能在所有浏览器上运行,你需要为 @keyframes
规则提供多个版本。
下面是一个使用 @-webkit-keyframes
的示例:
@-webkit-keyframes myAnimation {
0% { transform: translateX(0); }
50% { transform: translateX(100px); }
100% { transform: translateX(0); }
}
@keyframes myAnimation {
0% { transform: translateX(0); }
50% { transform: translateX(100px); }
100% { transform: translateX(0); }
}
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>WebKit Animation Exampletitle>
<style>
@-webkit-keyframes myAnimation {
0% { transform: translateX(0); }
50% { transform: translateX(100px); }
100% { transform: translateX(0); }
}
@keyframes myAnimation {
0% { transform: translateX(0); }
50% { transform: translateX(100px); }
100% { transform: translateX(0); }
}
.animate {
width: 100px;
height: 100px;
background-color: blue;
animation-name: myAnimation;
animation-duration: 3s;
animation-iteration-count: infinite;
}
style>
head>
<body>
<div class="animate">
Animate me
div>
body>
html>
在上述示例中,我们为 @keyframes
规则提供了两个版本 - 一个普通的版本和一个带有 -webkit-
前缀的版本。这样,无论用户是使用WebKit浏览器还是其他浏览器,动画都能正常运行。但请注意,现代浏览器通常不再需要使用这种前缀版本。
animation-name
指定@keyframes动画的名称。
<div style="animation-name: mymove;">
Animate me
div>
animation-duration
指定动画完成一个周期所花费的时间。
<div style="animation-duration: 5s;">
Animate me
div>
animation-timing-function
指定动画的速度曲线。
<div style="animation-timing-function: ease-in;">
Animate me
div>
animation-delay
指定动画何时开始。
<div style="animation-delay: 2s;">
Animate me
div>
animation-iteration-count
指定动画应该播放多少次。
<div style="animation-iteration-count: infinite;">
Animate me
div>
animation-direction
指定动画是否在下一周期逆向播放。
<div style="animation-direction: alternate;">
Animate me
div>
示例
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Animation Exampletitle>
<style>
@keyframes myAnimation {
0% { transform: translateX(0); }
50% { transform: translateX(100px); }
100% { transform: translateX(0); }
}
.animate {
width: 100px;
height: 100px;
background-color: blue;
animation-name: myAnimation;
animation-duration: 3s;
animation-iteration-count: infinite;
}
style>
head>
<body>
<div class="animate">
Animate me
div>
body>
html>
在这个示例中,我们创建了一个简单的来回移动的动画。动画的名字是myAnimation
,总时长是3秒,会无限次重复播放。
立体旋转方块
HTML代码
DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>exampletitle>
<link rel="stylesheet" href="./index.css">
<script src="./index.js">script>
head>
<body>
<div class="wrap">
<div class="cube">
<div class="out_front">
<div class="pic" id="out_front"> div>
div>
<div class="out_back">
<div class="pic" id="out_back"> div>
div>
<div class="out_left">
<div class="pic" id="out_left"> div>
div>
<div class="out_right">
<div class="pic" id="out_right"> div>
div>
<div class="out_top">
<div class="pic" id="out_top"> div>
div>
<div class="out_bottom">
<div class="pic" id="out_bottom"> div>
div>
<span class="in_front">
<div class="in_pic" id="in_front"> div>
span>
<span class="in_back">
<div class="in_pic" id="in_back"> div>
span>
<span class="in_left">
<div class="in_pic" id="in_left"> div>
span>
<span class="in_right">
<div class="in_pic" id="in_right"> div>
span>
<span class="in_top">
<div class="in_pic" id="in_top"> div>
span>
<span class="in_bottom">
<div class="in_pic" id="in_bottom"> div>
span>
div>
div>
body>
html>
CSS代码
html {
background: #000;
height: 100%;
}
/*最外层容器样式*/
.wrap{
position: relative;
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
width: 200px;
height: 200px;
margin: auto;
/*改变左右上下,图片方块移动*/
}
/*包裹所有容器样式*/
.cube{
width: 200px;
height: 200px;
margin: 0 auto;
transform-style: preserve-3d;
transform: rotateX(-30deg) rotateY(-80deg);
-webkit-animation: rotate 20s infinite;
animation: rotate 20s infinite;
/*匀速*/
animation-timing-function: linear;
}
@-webkit-keyframes rotate{
from{transform: rotateX(0deg) rotateY(0deg);}
to{transform: rotateX(360deg) rotateY(360deg);}
}
@keyframes rotate{
from{transform: rotateX(0deg) rotateY(0deg);}
to{transform: rotateX(360deg) rotateY(360deg);}
}
.cube div{
position: absolute;
width: 200px;
height: 200px;
opacity: 0.8;
transition: all .4s;
}
/*定义所有图片样式*/
.pic{
width: 200px;
height: 200px;
}
.cube .pic#out_front {
background-color: blueviolet;
}
.cube .pic#out_back {
background-color: rgb(47, 49, 180);
}
.cube .pic#out_left {
background-color: rgb(255, 230, 1);
}
.cube .pic#out_right {
background-color: rgb(255, 94, 0);
}
.cube .pic#out_top {
background-color: rgba(43, 226, 58, 0.651);
}
.cube .pic#out_bottom {
background-color: rgb(5, 255, 213);
}
.cube .in_pic#in_front {
background-color: blueviolet;
}
.cube .in_pic#in_back {
background-color: rgb(47, 49, 180);
}
.cube .in_pic#in_left {
background-color: rgb(255, 230, 1);
}
.cube .in_pic#in_right {
background-color: rgb(94, 65, 49);
}
.cube .in_pic#in_bottom {
background-color: steelblue;
}
.cube .out_front{
transform: rotateY(0deg) translateZ(100px);
}
.cube .out_back{
transform: translateZ(-100px) rotateY(180deg);
}
.cube .out_left{
transform: rotateY(90deg) translateZ(100px);
}
.cube .out_right{
transform: rotateY(-90deg) translateZ(100px);
}
.cube .out_top{
transform: rotateX(90deg) translateZ(100px);
}
.cube .out_bottom{
transform: rotateX(-90deg) translateZ(100px);
}
/*定义小正方体样式*/
.cube span{
display: bloack;
width: 100px;
height: 100px;
position: absolute;
top: 50px;
left: 50px;
}
.cube .in_pic{
width: 100px;
height: 100px;
/* background-color: aqua; */
}
.cube .in_front{
transform: rotateY(0deg) translateZ(50px);
}
.cube .in_back{
transform: translateZ(-50px) rotateY(180deg);
}
.cube .in_left{
transform: rotateY(90deg) translateZ(50px);
}
.cube .in_right{
transform: rotateY(-90deg) translateZ(50px);
}
.cube .in_top{
transform: rotateX(90deg) translateZ(50px);
}
.cube .in_bottom{
transform: rotateX(-90deg) translateZ(50px);
}
/*鼠标移入后样式*/
.cube:hover .out_front{
transform: rotateY(0deg) translateZ(200px);
}
.cube:hover .out_back{
transform: translateZ(-200px) rotateY(180deg);
}
.cube:hover .out_left{
transform: rotateY(90deg) translateZ(200px);
}
.cube:hover .out_right{
transform: rotateY(-90deg) translateZ(200px);
}
.cube:hover .out_top{
transform: rotateX(90deg) translateZ(200px);
}
.cube:hover .out_bottom{
transform: rotateX(-90deg) translateZ(200px);
}
常见的两栏布局方式是一侧定宽,另一侧自适应宽度,例如左侧栏定宽,右侧自适应宽度,或者右侧栏定宽,左侧自适应宽度。
HTML代码
DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>exampletitle>
<link rel="stylesheet" href="./index.css">
<script src="./index.js">script>
head>
<body>
<div class="container">
<div class="sidebar">
<p class="title">Sidebar contentp>
<div class="footer" id="sidebar">Sidebar Footerdiv>
div>
<div class="main">
<p class="title" id="f_title">Main contentp>
<div class="footer" id="footer">Main Footerdiv>
div>
div>
body>
html>
CSS代码
/*
全局重置:
margin: 0; 将所有元素的外边距设置为0,以消除浏览器默认的外边距。
padding: 0; 将所有元素的内边距设置为0,以消除浏览器默认的内边距。
*/
* {
margin: 0;
padding: 0;
}
/*
.container样式:
display: flex; 将.container元素设置为弹性布局容器,使其子元素可以使用弹性布局属性。
height: 100vh; 将.container元素的高度设置为视口高度的100%,使其填充整个视口。
*/
.container {
display: flex;
height: 100vh;
}
/*
.sidebar和.main样式:
display: flex; 将.sidebar和.main元素设置为弹性布局容器,使其子元素可以使用弹性布局属性。
flex-direction: column; 将.flex容器的主轴方向设置为从上到下,使其子元素垂直排列。
*/
.sidebar, .main {
display: flex;
flex-direction: column;
}
/*
.sidebar样式:
justify-content: center; 在.sidebar元素的主轴方向上居中对齐其子元素。
width: 200px; 设置.sidebar元素的宽度为200像素。
background-color: #554646; 设置.sidebar元素的背景颜色为#554646。
*/
.sidebar {
justify-content: center;
width: 200px;
background-color: #554646;
}
/*
.main样式:
flex-grow: 1; 允许.main元素在主轴方向上占用剩余空间。
background-color: #b37777; 设置.main元素的背景颜色为#b37777。
*/
.main {
flex-grow: 1;
background-color: #b37777;
}
/*
.footer样式:
margin-top: auto; 将.footer元素的顶部外边距设置为自动,使其始终保持在其容器的底部。
padding: 10px; 设置.footer元素的内边距为10像素。
text-align: center; 将.footer元素中的文本居中对齐。
*/
.footer {
margin-top: auto;
padding: 10px;
text-align: center;
}
/*
.footer#sidebar样式:
background-color: #b0b0b0; 设置ID为sidebar的.footer元素的背景颜色为#b0b0b0。
*/
.footer#sidebar {
background-color: #b0b0b0;
}
/*
.footer#footer样式:
background-color: #5b9db8; 设置ID为footer的.footer元素的背景颜色为#5b9db8。
*/
.footer#footer {
background-color: #5b9db8;
}
/*
.title样式:
background-color: #bb4e4e; 设置.title元素的背景颜色为#bb4e4e。
padding: 20px; 设置.title元素的内边距为20像素。
border: 1px solid #ccc; 设置.title元素的边框宽度为1像素,样式为实线,颜色为#ccc。
*/
.title {
background-color: #bb4e4e;
padding: 20px;
border: 1px solid #ccc;
}
/*
.title#f_title样式:
margin: auto 0; 使ID为f_title的.title元素在其容器中垂直居中。
*/
.title#f_title {
margin: auto 0;
}
三栏布局类似于两栏布局,它的具体表现形式为,左侧和右侧两栏定宽,中间区域自适应宽度。
实现效果:
HTML代码
example
Main Content
CSS代码
/* 全局样式重置 */
* {
margin: 0;
padding: 0;
}
/* 容器样式 */
.container {
display: grid;
grid-template-columns: 200px auto 200px;
height: 100vh;
}
/* 左侧栏、右侧栏和主内容公共样式 */
.left-sidebar, .main-content, .right-sidebar {
display: flex;
flex-direction: column;
justify-content: center; /* 垂直居中对齐 */
align-items: center; /* 水平居中对齐 */
}
/* 主内容特定样式,重置垂直对齐 */
.main-content {
justify-content: flex-start; /* 垂直顶部对齐 */
}
/* 左侧栏、右侧栏和主内容公共样式 */
.left-sidebar, .main-content, .right-sidebar {
padding: 20px;
}
/* 左侧栏和右侧栏背景颜色 */
.left-sidebar, .right-sidebar {
background-color: #554646;
}
/* 主内容背景颜色 */
.main-content {
background-color: #b37777;
}
使用CSS动画来实现轮播图。这通常需要使用@keyframes
规则来定义动画,并使用animation
属性来应用这些动画。
HTML代码
example
CSS代码
.slider {
position: relative;
width: 300px;
height: 200px;
overflow: hidden;
}
.slides {
display: flex;
animation: slide-animation 15s infinite; /* 5s的持续时间 * 3个幻灯片 = 15s */
}
.slide {
width: 300px;
height: 200px;
flex-shrink: 0;
transition: transform 1s;
margin: 0 auto;
display: flex;
}
@keyframes slide-animation {
0% {
transform: translateX(0);
}
20% {
transform: translateX(0);
}
33.33% {
transform: translateX(-300px);
}
53.33% {
transform: translateX(-300px);
}
66.66% {
transform: translateX(-600px);
}
86.66% {
transform: translateX(-600px);
}
100% {
transform: translateX(0);
}
}
.slider
),它的overflow
属性设置为hidden
,以确保只显示一个幻灯片。.slides
),它包含所有的幻灯片。我们为这个容器应用了一个无限的动画(slide-animation
),其持续时间为15秒(每个幻灯片的显示时间为5秒,总共有3个幻灯片,所以总持续时间为15秒)。@keyframes
规则定义了一个动画(slide-animation
),它在不同的时间点将.slides
容器向左平移,以显示不同的幻灯片。.slide
)设置了宽度、高度和背景色,以便您可以看到动画效果。这只是一个
bar {
background-color: #554646;
}
/* 主内容背景颜色 */
.main-content {
background-color: #b37777;
}
# 综合项目:CSS动画版轮播图
使用CSS动画来实现轮播图。这通常需要使用`@keyframes`规则来定义动画,并使用`animation`属性来应用这些动画。
**HTML代码**
```HTML
example
CSS代码
.slider {
position: relative;
width: 300px;
height: 200px;
overflow: hidden;
}
.slides {
display: flex;
animation: slide-animation 15s infinite; /* 5s的持续时间 * 3个幻灯片 = 15s */
}
.slide {
width: 300px;
height: 200px;
flex-shrink: 0;
transition: transform 1s;
margin: 0 auto;
display: flex;
}
@keyframes slide-animation {
0% {
transform: translateX(0);
}
20% {
transform: translateX(0);
}
33.33% {
transform: translateX(-300px);
}
53.33% {
transform: translateX(-300px);
}
66.66% {
transform: translateX(-600px);
}
86.66% {
transform: translateX(-600px);
}
100% {
transform: translateX(0);
}
}
.slider
),它的overflow
属性设置为hidden
,以确保只显示一个幻灯片。.slides
),它包含所有的幻灯片。我们为这个容器应用了一个无限的动画(slide-animation
),其持续时间为15秒(每个幻灯片的显示时间为5秒,总共有3个幻灯片,所以总持续时间为15秒)。@keyframes
规则定义了一个动画(slide-animation
),它在不同的时间点将.slides
容器向左平移,以显示不同的幻灯片。.slide
)设置了宽度、高度和背景色,以便您可以看到动画效果。这只是一个