#### 第2章:
#### CSS
- CSS 指层叠样式表 (Cascading Style Sheets)。
- 样式定义如何显示HTML元素
- 样式通常存储在样式表中
- 把样式添加到 HTML 4.0 中,是为了解决内容与表现分离的问题
- 外部样式表可以极大提高工作效率
- 外部样式表通常存储在 CSS 文件中
- 多个样式定义可层叠为一个
CSS实例:
```
p
{
color:red;
text-align:center;
}
```
#### 2.1 CSS选择器
![img](https://www.runoob.com/wp-content/uploads/2013/07/632877C9-2462-41D6-BD0E-F7317E4C42AC.jpg)
##### id选择器
id 选择器可以为标有特定 id 的 HTML 元素指定特定的样式。
HTML元素以id属性来设置id选择器,CSS 中 id 选择器以 "#" 来定义。
以下的样式规则应用于元素属性 id="key":
###### 实例:
```
#key{
text-align:center;
color:red;
}
```
##### class选择器
class 选择器用于描述一组元素的样式,class 选择器有别于id选择器,class可以在多个元素中使用。
class 选择器在HTML中以class属性表示, 在 CSS 中,类选择器以一个点"."号显示:
在以下的例子中,所有拥有 center 类的 HTML 元素均为居中。
###### 实例:
```
.text {
text-align:center;
}
```
##### 属性选择器
```
[title]
{
color:blue;
}
```
##### 属性和值选择器
```
[title=runoob]
{
border:5px solid green;
}
```
多值
```
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>实例</title>
<style>
[title~=hello]
{
color:blue;
}
</style>
</head>
<body>
<h2>将适用:</h2>
<h1 title="hello world">Hello world</h1>
<p title="student hello">Hello CSS students!</p>
<hr>
<h2>将不适用:</h2>
<p title="student">Hi CSS students!</p>
</body>
</html>
```
##### CSS分组选择器
```
h1,h2,p
{
color:green;
}
```
##### 嵌套选择器
- p{ }: 为所有 **p** 元素指定一个样式。
- .marked{ }: 为所有 **class="marked"** 的元素指定一个样式。
- .marked p{ }: 为所有 **class="marked"** 元素内的 **p** 元素指定一个样式。
- p.marked{ }: 为所有 **class="marked"** 的 **p** 元素指定一个样式。
```
p
{
color:blue;
text-align:center;
}
.marked
{
background-color:red;
}
.marked p
{
color:white;
}
p.marked{
text-decoration:underline;
}
```
##### CSS 组合选择符
- 后代选择器(以空格 分隔) 选择后代
- 子元素选择器(以大于 > 号分隔)选择直接子元素
- 相邻兄弟选择器(以加号 + 分隔)选择之后相邻的第一个兄弟元素
- 普通兄弟选择器(以波浪号 ~ 分隔)想着之后相邻的所有兄弟元素
```
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>实例</title>
<style>
div~p
{
background-color:yellow;
}
</style>
</head>
<body>
<p>之前段落,不会添加背景颜色。</p>
<div>
<p>段落 1。 在 div 中。</p>
<p>段落 2。 在 div 中。</p>
</div>
<p>段落 3。不在 div 中。</p>
<p>段落 4。不在 div 中。</p>
</body>
</html>
```
##### CSS伪类
语法:
选择器:伪类{属性:值}
选择器.类:伪类{属性:值}
```
a:link {color:#FF0000;} /* 未访问的链接 */
a:visited {color:#00FF00;} /* 已访问的链接 */
a:hover {color:#FF00FF;} /* 鼠标划过链接 */
a:active {color:#0000FF;} /* 已选中的链接 */
```
伪类可以与 CSS 类配合使用:
```
a.red:visited {color:#FF0000;}
<a class="red" href="css-syntax.html">CSS 语法</a>
```
:first-child 伪类来选择父元素的第一个子元素。
```
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>实例</title>
<style>
p:first-child
{
color:blue;
}
</style>
</head>
<body>
<p>This is some text.</p>
<p>This is some text.</p>
<p><b>注意:</b>对于 :first-child 工作于 IE8 以及更早版本的浏览器, !DOCTYPE 必须已经声明.</p>
</body>
</html>
```
匹配所有<p> 元素中的第一个 <i> 元素
```
p > i:first-child
{
color:blue;
}
```
匹配所有作为第一个子元素的 <p> 元素中的所有 <i> 元素
```
p:first-child i
{
color:blue;
}
```
#### 2.2 如何插入样式表
- 外部样式表(External style sheet)
- 内部样式表(Internal style sheet)
- 内联样式(Inline style
##### 外部样式表(优先级最低)
当样式需要应用于很多页面时,外部样式表将是理想的选择。在使用外部样式表的情况下,你可以通过改变一个文件来改变整个站点的外观。每个页面使用 `<link> `标签链接到样式表。 `<link>` 标签在(文档的)头部:
```
<head>
<link rel="stylesheet" type="text/css" href="mystyle.css">
</head>
```
##### 内部样式表(优先级高)
当单个文档需要特殊的样式时,就应该使用内部样式表。你可以使用` <style> `标签在文档头部定义内部样式表,就像这样:
```
<head>
<style>
hr {color:sienna;}
body {background-image:url("images/back40.gif");}
p {margin-left:20px;}
</style>
</head>
```
##### 内联样式表 (优先级最高)
由于要将表现和内容混杂在一起,内联样式会损失掉样式表的许多优势。请慎用这种方法,例如当样式仅需要在一个元素上应用一次时。
要使用内联样式,你需要在相关的标签内使用样式(style)属性。Style 属性可以包含任何 CSS 属性。本例展示如何改变段落的颜色和左外边距:
```
<p style="color:sienna;margin-left:20px">这是一个段落。</p>
```
##### 优先级总结
**(内联样式) > (内部样式) >(外部样式)> 浏览器默认样式**
可以多重样式。
#### 2.3 常用CSS样式
##### CSS背景
- background-color 背景颜色
- background-image 背景图片
```
body {
background-image:url('111.png');
}
```
:-: ![](https://img.kancloud.cn/2e/77/2e779b4ba1195153c5892fdfda143981_512x282.png)
111.png:![](https://img.kancloud.cn/e6/d7/e6d77826fb39c16bad309abba61d1b8b_18x19.png)
- background-repeat 背景图片平铺
| repeat | 默认。背景图像将在垂直方向和水平方向重复。 |
| --------- | --------------------------------------------------- |
| repeat-x | 背景图像将在水平方向重复。 |
| repeat-y | 背景图像将在垂直方向重复。 |
| no-repeat | 背景图像将仅显示一次。 |
| inherit | 规定应该从父元素继承 background-repeat 属性的设置。 |
- background-attachment
| 值 | 描述 |
| ------- | ------------------------------------------------------- |
| scroll | 默认值。背景图像会随着页面其余部分的滚动而移动。 |
| fixed | 当页面的其余部分滚动时,背景图像不会移动。 |
| inherit | 规定应该从父元素继承 background-attachment 属性的设置。 |
- background-position
| 值 | 描述 |
| ------------------------------------------------------------ | ------------------------------------------------------------ |
| top left,top center,top right,center left,center center,center right,bottom left,bottom center,bottom right | 如果您仅规定了一个关键词,那么第二个值将是"center"。默认值:0% 0%。 |
| x% y% | 第一个值是水平位置,第二个值是垂直位置。左上角是 0% 0%。右下角是 100% 100%。如果您仅规定了一个值,另一个值将是 50%。 |
| xpos ypos | 第一个值是水平位置,第二个值是垂直位置。左上角是 0 0。单位是像素 (0px 0px) 或任何其他的 CSS 单位。如果您仅规定了一个值,另一个值将是50%。您可以混合使用 % 和 position 值。 |
##### 作业
制作一个页面,使背景图片不管上下滑动始终保持在一个位置。
##### CSS文本颜色
颜色属性被用来设置文字的颜色。
颜色是通过CSS最经常的指定:
- 十六进制值 - 如: **#FF0000**
- 一个RGB值 - 如: **RGB(255,0,0)**
- 颜色的名称 - 如: **red**
```
body {color:red;}
h1 {color:#00ff00;}
h2 {color:rgb(255,0,0);}
```
##### CSS文本对齐方式
文本排列属性是用来设置文本的水平对齐方式。
文本可居中或对齐到左或右,两端对齐.
当text-align设置为"justify",每一行被展开为宽度相等,左,右外边距是对齐(如杂志和报纸)。
```
div
{
text-align:justify;
text-justify:inter-word;
}
```
##### CSS文本修饰
text-decoration 属性用来设置或删除文本的装饰。
从设计的角度看 text-decoration属性主要是用来删除链接的下划线
```
a {text-decoration:none;}
h1 {text-decoration:overline;}
h2 {text-decoration:line-through;}
h3 {text-decoration:underline;}
```
##### CSS文本转换
文本转换属性是用来指定在一个文本中的大写和小写字母。
可用于所有字句变成大写或小写字母,或每个单词的首字母大写。
```
p.uppercase {text-transform:uppercase;}
p.lowercase {text-transform:lowercase;}
p.capitalize {text-transform:capitalize;}
```
##### CSS文本缩进
文本缩进属性是用来指定文本的第一行的缩进。
```
p {text-indent:50px;}
```
##### 作业
练习CSS文本样式。
##### CSS字体
font-family属性定义字体、color属性定义字体颜色以及font-size 属性分别定义元素文本字体尺寸:
```
<html>
<body>
<h1 style="font-family:verdana">A heading</h1>
<p style="font-family:arial;color:red;font-size:20px;">A paragraph.</p>
</body>
</html>
```
引入外部字体 ttf,otf字体文件
```
@font-face{
font-family: 'oswald';
src : url('..//fonts/oswald.regular.ttf');
}
```
引入多个外部字体
```
@font-face {
font-family: "SourceHanSansCN-Light";
src: url("../font/SourceHanSansCN-Light.otf"),
url("../font/SourceHanSansCN-Light.ttf");
font-family: "SourceHanSansCN-Normal";
src: url("../font/SourceHanSansCN-Normal.otf");
font-family: "SourceHanSansCN-Regular";
src: url("../font/SourceHanSansCN-Regular.otf");
}
```
##### CSS字体样式
主要是用于指定斜体文字的字体样式属性。
这个属性有三个值:
- 正常 - 正常显示文本
- 斜体 - 以斜体字显示的文字
- 倾斜的文字 - 文字向一边倾斜(和斜体非常类似,但不太支持)
```
p.normal {font-style:normal;}
p.italic {font-style:italic;}
p.oblique {font-style:oblique;}
```
:-: ![](https://img.kancloud.cn/2e/10/2e10897a81ad58ee08239f3c9dea49fe_538x218.png)
##### CSS字体大小
font-size 属性设置文本的大小。
字体大小的值可以是绝对或相对的大小。
1em的默认大小是16px。可以通过下面这个公式将像素转换为em:px/16=em
```
h1 {font-size:40px;}
h2 {font-size:30px;}
p {font-size:14px;}
h1 {font-size:100%;}
h2 {font-size:100%;}
p {font-size:100%;}
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 */
```
##### CSS链接样式
链接的样式,可以用任何CSS属性(如颜色,字体,背景等)。
特别的链接,可以有不同的样式,这取决于他们是什么状态。
- a:link - 正常,未访问过的链接
- a:visited - 用户已访问过的链接
- a:hover - 当用户鼠标放在链接上时
- a:active - 链接被点击的那一刻
```
a:link {color:#000000;} /* 未访问链接*/
a:visited {color:#00FF00;} /* 已访问链接 */
a:hover {color:#FF00FF;} /* 鼠标移动到链接上 */ 比如加入禁止标识
a:active {color:#0000FF;} /* 鼠标点击时 */
```
##### CSS列表样式
- 无序列表 ul - 列表项标记用特殊图形(如小黑点、小方框等)
- 有序列表 ol - 列表项的标记有数字或字母
```
ul.a {list-style-type:circle;}
ul.b {list-style-type:square;}
ol.c {list-style-type:upper-roman;}
ol.d {list-style-type:lower-alpha;}
```
- 自定义图像标记(这种方案是为解决浏览器兼容性问题)
##### 作业
练习CSS字体样式和列表样式。
##### 隐藏元素
```
h1.hidden {visibility:hidden;}
```
hidden依旧会影响布局。
```
h1.hidden {display:none;}
```
none不会影响布局。
#### 2.4 CSS盒子模型
所有HTML元素可以看作盒子,在CSS中,"box model"这一术语是用来设计和布局时使用。
CSS盒模型本质上是一个盒子,封装周围的HTML元素,它包括:边距,边框,填充,和实际内容。
盒模型允许我们在其它元素和周围元素边框之间的空间放置元素。
下面的图片说明了盒子模型(Box Model):
![CSS box-model](https://www.runoob.com/images/box-model.gif)
不同部分的说明:
- **Margin(外边距)** - 清除边框外的区域,外边距是透明的。
- **Border(边框)** - 围绕在内边距和内容外的边框。
- **Padding(内边距)** - 清除内容周围的区域,内边距是透明的。
- **Content(内容)** - 盒子的内容,显示文本和图像。
尺寸属性
| 属性 | 描述 |
| ----------- | -------------------- |
| height | 设置元素的高度。 |
| line-height | 设置行高。 |
| max-height | 设置元素的最大高度。 |
| max-width | 设置元素的最大宽度。 |
| min-height | 设置元素的最小高度。 |
| min-width | 设置元素的最小宽度。 |
| width | 设置元素的宽度。 |
##### 元素的高度和宽度
当您指定一个 CSS 元素的宽度和高度属性时,你只是设置内容区域的宽度和高度。要知道,完整大小的元素,你还必须添加内边距,边框和边距。
下面的例子中的元素的总宽度为300px:
```
div {
width: 300px;
border: 25px solid green; //边框颜色为绿色
padding: 25px;
margin: 25px;
}
```
最终元素的总宽度计算公式是这样的:
总元素的宽度=宽度+左填充+右填充+左边框+右边框+左边距+右边距
元素的总高度最终计算公式是这样的:
总元素的高度=高度+顶部填充+底部填充+上边框+下边框+上边距+下边距
##### CSS 边框属性
border-style属性用来定义边框的样式:
- dotted: 定义一个点线边框
- dashed: 定义一个虚线边框
- solid: 定义实线边框
- double: 定义两个边框。 两个边框的宽度和 border-width 的值相同
- groove: 定义3D沟槽边框。效果取决于边框的颜色值
- ridge: 定义3D脊边框。效果取决于边框的颜色值
- inset:定义一个3D的嵌入边框。效果取决于边框的颜色值
- outset: 定义一个3D突出边框。 效果取决于边框的颜色值
border-width 属性为边框指定宽度:
```
p
{
border-style:solid;
border-width:5px;
}
p
{
border-style:solid;
border-width:medium;
}
```
border-color属性用于设置边框的颜色。可以设置的颜色:
- name - 指定颜色的名称,如 "red"
- RGB - 指定 RGB 值, 如 "rgb(255,0,0)"
- Hex - 指定16进制值, 如 "#ff0000"
```
p.one
{
border-style:solid;
border-color:red;
}
p.two
{
border-style:solid;
border-color:#98bf21;
}
```
边框单独设置各边
```
p
{
border-top-style:dotted;
border-right-style:solid;
border-bottom-style:dotted;
border-left-style:solid;
border-top-width:20px;
}
```
边框简写
```
p
{
border:5px solid red;
}
```
##### CSS 轮廓
outline属性是绘制于元素周围的一条线,位于边框边缘的外围,可起到突出元素的作用。
```
p
{
border:1px solid red;
outline-style:dotted;
outline-color:#00ff00;
}
```
##### margin 外边距
单边设置
```
margin-top:100px;
margin-bottom:100px;
margin-right:50px;
margin-left:50px;
```
简写:上右下左
```
margin:100px 50px 100px 50px;
```
##### 内边距
单边设置
```
padding-top:25px;
padding-bottom:25px;
padding-right:50px;
padding-left:50px;
```
简写
```
padding:25px 50px 25px 50px;
```
##### 元素居中 margin:0 auto
块级元素:给定要居中的块级元素的宽度。
行内元素:①设置display:block;②给定要居中的行内元素的宽度。(行内元素设置成块级元素后可以对其宽高进行设置)
行内块元素:设置display:block。(如input、button、img等元素,自带宽度可以不用设置其宽度)
**注意**:
- 可以通过对块级元素设置 text-align:center的方式来实现内联元素(如文本、图片)居中。
- margin:0 auto;可以使盒子居中,text-align:center;可以使此盒子内的内联元素居中,故有时需要两者结合使用才能使得盒子及其中文本一起居中。
```
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<style>
*{
margin:0;
padding:0;
}
.box{
width:640px;
height:585px;
border:1px solid #BBBBBB;
border-top:3px solid #094683;
margin:10px auto;
}
.title{
width:600px;
margin: 0 auto; /*使盒子居中*/
text-align: center; /*使文本在盒子居中,可以尝试把这两句分别注释看下实现效果就理解了!*/
margin-top:26px;
border:1px solid #CCCCCC;
padding-bottom:10px;
}
.title h2{
font-weight:normal;
margin-bottom:10px;
}
.title h6{
font-size:12px;
font-weight:normal;
color:#999999;
}
.title span{
color:#990000;
}
.photo{
margin:0 auto;
width:567px;
height:427px;
margin-top: 10px;
}
</style>
</head>
<body>
<div class="box">
<div class="title">
<h2>我是标题</h2>
<h6>
2015年08月08日 18:19 <span>新浪体育</span> 微博 我有话说(<span>106712</span>人参与) 收藏本文
</h6>
</div>
<div class="photo">
<img src="tiyu.png">
</div>
</div>
</body>
</html>
```
#### 2.5 定位
##### index 优先级
如果两个元素重叠,使用index进行优先级排序
```
p1
{
index:1;
}
p2
{
index:2;
}
```
##### CSS Position
position 属性指定了元素的定位类型。
position 属性的五个值:
- static 静态定位
HTML 元素的默认值,即没有定位,遵循正常的文档流对象。
静态定位的元素不会受到 top, bottom, left, right影响。
- relative 相对定位
- fixed 浮动定位
- absolute 绝对定位,相对于父级元素
- sticky 粘性定位
##### CSS Overflow
overflow 属性用于控制内容溢出元素框时显示的方式
| 值 | 描述 |
| ------- | -------------------------------------------------------- |
| visible | 默认值。内容不会被修剪,会呈现在元素框之外。 |
| hidden | 内容会被修剪,并且其余内容是不可见的。 |
| scroll | 内容会被修剪,但是浏览器会显示滚动条以便查看其余的内容。 |
| auto | 如果内容被修剪,则浏览器会显示滚动条以便查看其余的内容。 |
| inherit | 规定应该从父元素继承 overflow 属性的值。 |
```
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>实例</title>
<style>
div {
background-color: #eee;
width: 200px;
height: 50px;
border: 1px dotted black;
overflow: visible;
}
</style>
</head>
<body>
<div id="overflowTest">
<p>这里的文本内容会溢出元素框。</p>
<p>这里的文本内容会溢出元素框。</p>
<p>这里的文本内容会溢出元素框。</p>
</div>
</body>
</html>
```
##### CSS浮动
float属性控制元素的水平方向浮动,意味着元素只能左右移动而不能上下移动。
```
img
{
float:right;
}
```
清除浮动使用clear
```
.text_line
{
clear:both;
}
```
#### 2.6 效果
##### CSS箭头
```
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>实例</title>
</head>
<style>
.tooltip {
position: relative;
display: inline-block;
border-bottom: 1px dotted black;
}
.tooltip .tooltiptext {
visibility: hidden;
width: 120px;
background-color: black;
color: #fff;
text-align: center;
border-radius: 6px;
padding: 5px 0;
position: absolute;
z-index: 1;
top: -5px;
right: 110%;
}
.tooltip .tooltiptext::after {
content: "";
position: absolute;
top: 50%;
left: 100%;
margin-top: -5px;
border-width: 5px;
border-style: solid;
border-color: transparent transparent transparent black;
}
.tooltip:hover .tooltiptext {
visibility: visible;
}
</style>
<body style="text-align:center;">
<h2>左侧提示框/右侧箭头</h2>
<div class="tooltip">鼠标移动到我这
<span class="tooltiptext">提示文本</span>
</div>
</body>
</html>
```
:-: ![](https://img.kancloud.cn/f0/f0/f0f0355a901cd32c1aacbb64f348f68b_514x224.png)
:-: ![](https://img.kancloud.cn/25/20/25207855866139463fc302c5ab0f7c27_518x227.png)
##### CSS过渡效果(淡入淡出)
transition属性
transition:变化属性 变化时间 变化效果的速度曲线 停顿时间
```
div
{
width:100px;
transition: width 2s;
-webkit-transition: width 2s; /* Safari */
}
div:hover {width:300px;}
```
##### 动画效果
animation属性绑定动画效果
```
animation: name duration timing-function delay iteration-count direction;
```
| 值 | 描述 |
| --------------------------- | ---------------------------------------- |
| *animation-name* | 规定需要绑定到选择器的 keyframe 名称。。 |
| *animation-duration* | 规定完成动画所花费的时间,以秒或毫秒计。 |
| *animation-timing-function* | 规定动画的速度曲线。 |
| *animation-delay* | 规定在动画开始之前的延迟。 |
| *animation-iteration-count* | 规定动画应该播放的次数。 |
| *animation-direction* | 规定是否应该轮流反向播放动画。 |
```
<!DOCTYPE html>
<html>
<head>
<style>
div
{
width:100px;
height:100px;
background:red;
position:relative;
animation:mymove 5s infinite;
-webkit-animation:mymove 5s infinite; /*Safari and Chrome*/
}
@keyframes mymove
{
from {left:0px;}
to {left:200px;}
}
@-webkit-keyframes mymove /*Safari and Chrome*/
{
from {left:0px;}
to {left:200px;}
}
</style>
</head>
<body>
<p><strong>注释:</strong>Internet Explorer 9 以及更早的版本不支持 animation 属性。</p>
<div></div>
</body>
</html>
```
##### 过渡效果
transition属性
```
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>实例</title>
<style>
div {
width: 100px;
height: 100px;
background: red;
-webkit-transition: width 2s, height 2s, -webkit-transform 2s; /* For Safari 3.1 to 6.0 */
transition: width 2s, height 2s, transform 2s;
}
div:hover {
width: 200px;
height: 200px;
-webkit-transform: rotate(180deg); /* Chrome, Safari, Opera */
transform: rotate(180deg);
}
</style>
</head>
<body>
<p><b>注意:</b>该实例无法在 Internet Explorer 9 及更早 IE 版本上工作。</p>
<div>鼠标移动到 div 元素上,查看过渡效果。</div>
</body>
</html>
```
##### 图片廊 跑马灯
```
@keyframes rowup {
0% {
-webkit-transform: translate3d(0, 0, 0);
transform: translate3d(0, 0, 0);
}
100% {
-webkit-transform: translate3d(0, -307px, 0);
transform: translate3d(0, -307px, 0);
}
}
.list{
width: 300px;
border: 1px solid #999;
margin: 20px auto;
position: relative;
height: 200px;
overflow: hidden;
}
.list .rowup{
-webkit-animation: 10s rowup linear infinite normal;
animation: 10s rowup linear infinite normal;
position: relative;
}
<div class="list">
<div class="cc rowup">
<div class="item">1- 121233fffffr国家认可更健康进口价格困扰</div>
<div class="item">2- 3123233</div>
<div class="item">3- 个人口结构俄跨入国际科技馆客人感觉</div>
<div class="item">4- ggrgerg</div>
<div class="item">5- fvdgdv</div>
<div class="item">6- 德国南部巴士与卡车相撞起火 31人受伤11人死亡朴槿惠庭审时突然昏迷 支持者:她死了法官要负责!</div>
<div class="item">7- 外交部再次回应印军越界:要求立即将越界部队撤回</div>
<div class="item">8- 德国网红致信默克尔</div>
<div class="item">9- 国资委原</div>
<div class="item">1- 121233fffffr国家认可更健康进口价格困扰</div>
<div class="item">2- 3123233</div>
<div class="item">3- 个人口结构俄跨入国际科技馆客人感觉</div>
<div class="item">4- ggrgerg</div>
<div class="item">5- fvdgdv</div>
<div class="item">6- 德国南部巴士与卡车相撞起火 31人受伤11人死亡朴槿惠庭审时突然昏迷 支持者:她死了法官要负责!</div>
<div class="item">7- 外交部再次回应印军越界:要求立即将越界部队撤回</div>
<div class="item">8- 德国网红致信默克尔</div>
<div class="item">9- 国资委原</div>
</div>
</div>
```
##### CSS2D转换
transform属性
在本章您将了解2D变换方法:
- translate() 根据左(X轴)和顶部(Y轴)位置给定的参数,从当前元素位置移动。
- rotate() 在一个给定度数顺时针旋转的元素。负值是允许的,这样是元素逆时针旋转。
- scale() 该元素增加或减少的大小,取决于宽度(X轴)和高度(Y轴)的参数:
- skew() 分别表示X轴和Y轴倾斜的角度,如果第二个参数为空,则默认为0,参数为负表示向相反方向倾斜。
- matrix() 六个参数,包含旋转,缩放,移动(平移)和倾斜功能。
##### CSS3D转换
transform属性
| 函数 | 描述 |
| ------------------------------------------------------------ | ----------------------------------------- |
| matrix3d(*n*,*n*,*n*,*n*,*n*,*n*, *n*,*n*,*n*,*n*,*n*,*n*,*n*,*n*,*n*,*n*) | 定义 3D 转换,使用 16 个值的 4x4 矩阵。 |
| translate3d(*x*,*y*,*z*) | 定义 3D 转化。 |
| translateX(*x*) | 定义 3D 转化,仅使用用于 X 轴的值。 |
| translateY(*y*) | 定义 3D 转化,仅使用用于 Y 轴的值。 |
| translateZ(*z*) | 定义 3D 转化,仅使用用于 Z 轴的值。 |
| scale3d(*x*,*y*,*z*) | 定义 3D 缩放转换。 |
| scaleX(*x*) | 定义 3D 缩放转换,通过给定一个 X 轴的值。 |
| scaleY(*y*) | 定义 3D 缩放转换,通过给定一个 Y 轴的值。 |
| scaleZ(*z*) | 定义 3D 缩放转换,通过给定一个 Z 轴的值。 |
| rotate3d(*x*,*y*,*z*,*angle*) | 定义 3D 旋转。 |
| rotateX(*angle*) | 定义沿 X 轴的 3D 旋转。 |
| rotateY(*angle*) | 定义沿 Y 轴的 3D 旋转。 |
| rotateZ(*angle*) | 定义沿 Z 轴的 3D 旋转。 |
| perspective(*n*) | 定义 3D 转换元素的透视视图。 |
##### CSS3D盒子
```
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
*{
margin: 0;
padding: 0;
}
.box{
width: 400px;
height: 400px;
position: fixed;
left:0;right:0;
top:0;bottom:0;
margin:auto;
transform-style: preserve-3d;
transform:rotateX(20deg) rotateY(20deg);
animation: donghua 5s linear infinite;
}
.box:hover{
animation-play-state: paused;
}
.box div{
width: 400px;
height: 400px;
position: absolute;
left: 0;top: 0;
font-weight: bolder;
font-size: 200px;
text-align: center;
line-height: 400px;
color: black;
backface-visibility: hidden;
}
.box1{
opacity: 0.5;
background: pink;
transform: translateX(200px) rotateY(90deg);
}
.box2{
opacity: 0.5;
background: orange;
transform: translateX(-200px) rotateY(-90deg);
}
.box3{
opacity: 0.5;
background: greenyellow;
transform: translateY(-200px) rotateX(90deg);
}
.box4{
opacity: 0.5;
background: skyblue;
transform: translateY(200px) rotateX(-90deg);
}
.box5{
opacity: 0.5;
background: wheat;
transform: translateZ(200px);
}
.box6{
opacity: 0.5;
background: red;
transform: translateZ(-200px) rotateX(180deg);
}
@keyframes donghua{
0%{
transform:rotateX(0deg) rotateY(0deg);
}
25%{
transform: rotateX(90deg) rotateY(90deg);
}
50%{
transform: rotateX(180deg) rotateY(180deg);
}
75%{
transform: rotateX(270deg) rotateY(270deg);
}
100%{
transform:rotateX(360deg) rotateY(360deg);
}
}
</style>
<body>
<div class="box">
<div class="box1">🐷</div>
<div class="box2">😭</div>
<div class="box3">🐴</div>
<div class="box4">👴</div>
<div class="box5">🤮</div>
<div class="box6">🎅</div>
</div>
</body>
</html>
```
:-: ![](https://img.kancloud.cn/e0/0d/e00dcb4f26c7c12756fc1ac9df1e83c9_701x655.png)
##### CSS弹性盒子
弹性容器通过设置 display 属性的值为 flex 或 inline-flex将其定义为弹性容器。
弹性容器内包含了一个或多个弹性子元素。
justify-content 属性
内容对齐(justify-content)属性应用在弹性容器上,把弹性项沿着弹性容器的主轴线(main axis)对齐。
justify-content 语法如下:
```
justify-content: flex-start | flex-end | center | space-between | space-around
```
各个值解析:
- flex-start:
弹性项目向行头紧挨着填充。这个是默认值。第一个弹性项的main-start外边距边线被放置在该行的main-start边线,而后续弹性项依次平齐摆放。
- flex-end:
弹性项目向行尾紧挨着填充。第一个弹性项的main-end外边距边线被放置在该行的main-end边线,而后续弹性项依次平齐摆放。
- center:
弹性项目居中紧挨着填充。(如果剩余的自由空间是负的,则弹性项目将在两个方向上同时溢出)。
- space-between:
-
弹性项目平均分布在该行上。如果剩余空间为负或者只有一个弹性项,则该值等同于flex-start。否则,第1个弹性项的外边距和行的main-start边线对齐,而最后1个弹性项的外边距和行的main-end边线对齐,然后剩余的弹性项分布在该行上,相邻项目的间隔相等。
- space-around:
弹性项目平均分布在该行上,两边留有一半的间隔空间。如果剩余空间为负或者只有一个弹性项,则该值等同于center。否则,弹性项目沿该行分布,且彼此间隔相等(比如是20px),同时首尾两边和弹性容器之间留有一半的间隔(1/2*20px=10px)。
效果图展示:
![img](https://www.runoob.com/wp-content/uploads/2016/04/2259AD60-BD56-4865-8E35-472CEABF88B2.jpg)
作业:使用CSS制作导航栏、下拉菜单。