CSS简介
为了让网页元素的样式更加丰富,也为了让网页的内容和样式能拆分开,CSS由此慈祥而诞生,CSS是Cascading Style Sheets的首字母缩写,意思是层叠样式表。有了CSS,html中大部分表现样式的标签就废弃不用了,html只负责文档的结构和内容,表现形式完全交给CSS,html文档变得更加简洁(更方便爬虫爬取)。
CSS页面引入方式
- 外链式:通过link标签,链接到外部样式页面中。【建议使用】
<link rel="stylesheet" type="text/css" href="./css/main.css">
href之前的内容都是固定的(ps:添加到head标签中)
ps:样式文件通常单放一个文件夹
- 嵌入式:通过style标签,在网页上创建嵌入的样式表
通常做首页的时候用这种方式,加快加载速度
<head>
<style type="text/css">
div {
width:100px;
/*px:pixel:像素*/
height:100px;
color:red;
}
……
</style>
</head>
ps:对于0px,单位可写可不写
ps:css中,最后一行末尾的分号可写可不写
- 内联式:通过标签的style属性,在标签上直接写样式
<div style="width:100px; height:100px; color:red">……</div>
三种样式的代码示例:
# CSS基本语言及页面引用
## CSS基本语法
CSS的定义方法是:
选择器 {属性:值; 属性:值; 属性:值;}
选择器是将样式和页面元素关联起来的名称,属性是希望设置的样式属性,每个属性有一个多或多个值。
代码示例:
```css
/*
css注释
*/
div {
widht:100px;
height:100px;
color:red;
}
三种样式代码示例:
<!DOCTYPE html>
<html>
<head>
<title>Document</title>
<meta charset="utf-8">
<link rel="stylesheet" type="text/css" href="./css/index.css">
<!-- 第一种方式示例 -->
<style type="text/css">
/*第二种方式示例*/
h1 {
font-size: 20px;
color: orange;
}
</style>
</head>
<body>
<div>这是一个div标签</div>
<h1>页面标题</h1>
<a href="www.baidu.com" title="跳转到百度" style="font-size: 20px; color: pink;">百度一下</a>
<!-- 第三种方式,在标签里面直接写样式 -->
</body>
</html>
常用的应用文本的CSS样式
color 设置文本的颜色,如:color:red;
font-size 设置文字的大小,默认16px,如:font-size:120x;
font-family 设置文字的字体,如:font-family:“微软雅黑";但是建议名字写成英文,如:Microsoft Yahei
font-style 设置字体是否倾斜,如:font-style:"normal";设置不倾斜;font-style:"italic";设置文字倾斜,通常是去掉倾斜
font-weight 设置文字是否加粗,如:font-weight:bold;字体加粗;font-weigth:normal;字体不加粗
line-height 设置文字的行高,设置行高相当于在每行文字的上下同时加间距,如:line-height:23px;
font同时设置文字的几个属性,写的顺序有兼容性问题,建议按照如下顺序些:font:是否加粗 字号/行高 字体,如:font: normal 12px/36px "微软雅黑";
text-decoration 设置文字的下划线,如:text-decoration:none;将文字下划线去掉,通常是去掉下划线,比如a标签的
text-indent 设置文字首行缩进,如:text-indent:25px;设置文字首行缩进25px
-
text-align设置文字水平对齐方式,如:text-align:center;设置文字居中对齐,此外有:left(默认), right
- 对齐时应注意,对于超链接,其默认宽度就是文字的宽度,所以本身就是居中的,如果如果对齐设置text-align,则无效果,如果真要使其居中,需要转换类型
CSS颜色表示法
CSS颜色值主要有三种表示方法:
- 颜色名表示,比如:red, blue, green,yellowgreen
- 用rgb表示,比如:rgb(255,0,0) 表示红色
- 16进制数值表示,比如:#ff0000 表示红色,这种可以简写为#f00
后两种都是三原色表示法,三原色:红、绿、蓝,数值越大表示该种颜色越强,如果三个数值相同,则表示不同程度的灰色,(0,0,0)表示最强程度的黑色,“光越加越亮”
CSS选择器
常用的选择器有如下几种:
1. 标签选择器
标签选择器,此种选择器影响范围大,建议尽量应用在层级选择器中。
举例:
* {margin:0; paddign:0;} /* 星号是选择所有的标签 */
div {color:red;}
div a {...}
/*表示div标签下的a标签(包括div下的子子孙孙中的a)*/
div > a {...}
/*表示div的孩子中的a*/
<div><a href="#">...</a></div> <!-- 对应以上两条样式 -->
<div class="box">......</div> <!-- 对应以上两条样式 -->
2. id选择器
通过id名来选择元素,元素的id,所以一个样式设置项只能对应于页面上一个元素,不能复用,id名一般是给程序使用,所以不推荐使用id作为选择器
举例:
#box {color:red;}
<div id="box">......</div> <!-- 对应以上一条样式,其他元素不允许应用此样式 -->
ps:id是所有标签的属性,所有的标签都有这个属性
4. 类选择器
最常用
通过类名来选择元素,一个类可应用多个元素,一个元素上也可以使用多个类,应用灵活,可复用,是CSS中应用最多的一种选择器。
举例:
.red {color:red;}
.big {font-size:20px;}
.mt10 {margin-top:10px;}
<div class="red">......</div>
<h1 class="red big">......</h1>
<!-- 类名可以用多个,比如此处的"red big",则此处可以用上面的red和big两种样式的叠加 -->
<p class="red mt100">......</p>
ps:id的权重高于类,所以如果对同一个标签采用id选择器和类选择器,id选择器生效,而类选择器无效
星号表示类选择器,井号表示id选择器
4. 层级选择器
主要应用在选择父类元素下的子元素,或者子元素下面的子元素,可与标签元素结合使用,减少命名,同时也可通过层级,防止命名冲突
举例:
.box span {
/*配合标签选择器使用*/
/*表示box类名下的span标签*/
color: green;
font-size: 40px;
}
.box em {
font-style: normal;
font-weight: bold;
text-decoration: underline;
}
.box .red {
/*配合类选择器使用*/
/*box类(class="red")下面的red类*/
color: pink;
}
5. 组选择器
多个选择器,如果有同样的样式设置,可以使用组选择器
举例:
.box01, .box02, .box03 {
/*bxo01和box02和box03*/
/*空格是层级选择器,逗号是组选择器*/
font-size: 40px;
text-indent: 2em;
/*2em的意思是两个字符,即此处缩进两个字符*/
}
.box01 {
color: red;
}
.box02 {
color: green;
}
.box03 {
color: blue;
}
<div class="box01">这是第一个div</div>
<div class="box02">这是第二个div</div>
<div class="box03">这是第三个div</div>
技巧:如何快速创建带class的div:输入div.clas,然后tab,其他标签同理
6. 伪类选择器以及伪元素选择器
常用的伪类选择器有hover,表示鼠标悬浮在元素上时的状态,伪元素选择器有before和after,他们可以通过样式在元素中插入内容。
伪类之hover:
.link {
font-size: 30px;
text-decoration: none;
color: pink;
}
.link:hover {
/*当鼠标悬停在link类上时*/
color: gold;
}
<a class="link" href="www.baidu.com" title="跳转到百度">百度一下</a>
伪元素:
.box01, .box02 {
font-size: 30px;
}
.box01:before {
/*伪元素选择器之beofre,在前面塞东西*/
content: "前面要添加的文字";
/*content的内容在网页无法选中*/
color:green;
/*这里的颜色是对前面添加内容(即content)的修饰*/
}
.box02:after {
content: "哈哈哈哈";
color: pink;
}
<div class="box01">这是第一个div</div>
<div class="box02">这是第二个div</div>
7. E:nth-child(n)
E:nth-child(n):匹配元素类型为E,且是父级元素第n个子元素的元素。eg:.list div:nth-child(2),表示选择list类下面第二个div标签
CSS权重
CSS权重指的是样式的优先级,有两条或多条样式作用于一个元素,权重高的那条样式对元素起作用,权重相同的,后写的样式会覆盖前面写的样式
权重的等级
可以把样式的应用方式分为几个等级,按照等级来计算权重
- !important 加在样式属性值后,权重值为10000
- 内联样式,如:style="",权重值为1000
- ID选择器,如:#content,权重值为100
- 类,伪类和属性选择器,如:.content、:hover权重值为10
- 标签选择器和伪类元素选择器,如:div、p、:before权重值为1
- 通用选择器(*)、子选择器(>)、相邻选择器(+)、同胞选择器(~),权重值为0
累计叠加,如:#content .con {...}
权重值为100+10,共110
盒子模型
盒子模型解释
元素在显示成一个方块,类似一个盒子,CSS盒子模型就是使用显示中的盒子来做比喻,帮助我们设置元素的对应的样式。
在盒子模型中,把元素叫做盒子,设置对应的样式分别为:盒子的宽度(width)、盒子的高度(height)、盒子的边框(border)、盒子内的内容和边框之间的边距(padding)、盒子与盒子之间的间距(margin)
其实就是学习一些新的样式属性而已
代码实现
.box {
/*盒子整体控制*/
width: 200px;
height: 200px;
background-color: gold;
/*盒子边框设置*/
border-top-color: black;
border-top-width: 10px;
border-top-style: solid;
/*设置线的样式,solid | dashed | dotted*/
/*实际上以上三句可以合为一起写,且对顺序无要求*/
border-bottom: 15px dashed green;
/*如何通过缩写将四个边设置成一样:
border: 10px solid blue;*/
/*内边距的设置*/
padding-top: 20px;
/*注意,由于添加了padding,上面设置的盒子的width和height会被改变*/
/*即,其实padding是在原盒子大小的基础之上再添加的*/
/*padding也可以缩写:padding: 20px 40px 80px 160px;依次为从上开始的顺时针方向*/
/*如果padding跟3个值:上 左右 下*/
/*如果paddding跟2个值:上下 左右*/
/*如果跟一个值:四周*/
/*外边距的设置,与padding相同*/
margin-top: 100px;
<div class="box">盒子里面的文字</div>
如何保证盒子的真实尺寸
即不因添加了padding和border而导致盒子的真实大小发生改变
.box {
width: 200px;
height: 200px;
/*个人理解,这里的width和height其实只是内容的*/
background-color: pink;
border: 10px solid #000;
/*边框其实是在盒子的基础之上添加的,所以如果要保证盒子的大小不变,上面的width和height都需要-10*/
padding: 20px;
/*padding其实也是在盒子的基础之上添加的,如果要保证盒子的大小不变,上面的width和height还要-20*/
}
注意:body本身带有8px的border
技巧
如果将文本在格子中垂直居中而不用更改盒子的大小:line-height: 盒子的高度(即height)
如何实现文字的左边有空白而不更改盒子的宽度:text-indent: 空白像素px;
-
margin的技巧:
- 设置元素水平居中:margin:x auto;上下边距为x,左右居中(相对于外一级)。注意:auto只能用在宽度上,不能用在高度上
- margin负值让元素位移及边框合并,注意:只有marigin有负值,border和padding都没有负值。(case:如果将多个方框挨着放并显示边框,由于都有边框,挨着的地方框线就会比较粗,此时可以将border设置为负值,让其仅显示一条框线)
margin中的注意事项
- 外边距合并
外边距合并指的是,当两个垂直方向的盒子外边距(即上面盒子的下边距,下面盒子的上边距)相遇时,他们将形成一个外边距。合并后的外边距的高度等于两个发生合并外边距的高度中的较大者。解决方案如下:
- 使用这种特性
- 设置一边的外边距,一般设置margin-top
- 将元素浮动或者定位
- margin-top的塌陷
在两个盒子嵌套的时候,内部的盒子设置的margin-top会加到外边的盒子上,导致内部的黑字margin-top设置失败,解决方式如下:
- 外部盒子设置一个边框
- 外部盒子设置overflow:hidden(把溢出的元素隐藏起来,本来是设置元素溢出的属性),因为有时候就是要做溢出的效果,所以此种方法不是很好用
- 使用伪元素类:类似于加边框,代码如下:
.clearfix:before {
content:"";
display:table;
/*让空字符显示为table*/
}
塌陷示例:
<!DOCTYPE html>
<html>
<head>
<title>margin-top的塌陷</title>
<meta charset="utf-8">
<style type="text/css">
.con {
width: 300px;
height: 300px;
background-color: gold;
}
.box {
width: 200px;
height: 100px;
background-color: green;
margin-top: 100px;
/*本来相让里面的盒子和外面的盒子边距为100px,
结果里面盒子的margin-top和外面盒子的margin-top合并了,
导致里面盒子与外面盒子的上面并没有分开,
反而是两个盒子整体与浏览器上边框有了100px的边距*/
}
</style>
</head>
<body>
<div class="con">
<div class="box"></div>
</div>
</body>
</html>
CSS元素溢出
当子元素的尺寸超过父元素的尺寸时,需要设置父元素显示溢出的子元素的方式,设置的方法是通过overflow属性来设置。
overflow的设置项
- visible 默认值。内容不会被修剪,会呈现在元素边框之外。
- hidden 内容会被修剪,并且其余内容是不可见的,此属性还怎样清除浮动、清除margin-top塌陷的功能。
- scroll 内容会被修剪,但是浏览器会显示滚动条以方便用户查看其余内容。(如果内容没有超出,右边和下面还是有滚动条的痕迹)
- auto 如果内容被修剪,则浏览器会显示滚动条以便查看其余内容。(内容多过盒子才有滚动条,没有超过就没有滚动条)
- inherit 规定应该从父元素继承overflow属性。(很少用)
元素溢出的效果代码(会发现文字出现在盒子之外):
<!DOCTYPE html>
<html>
<head>
<title>元素溢出</title>
<meta charset="utf-8">
<style type="text/css">
.box {
width: 300px;
height: 200px;
/*设置了盒子的属性*/
border: 1px solid pink;
margin: 50px auto 0;
line-height: 30px;
}
</style>
</head>
<body>
<div class="box">
1. visible 默认值。内容不会被修剪,会呈现在元素边框之外。
2. hidden 内容会被修剪,并且其余内容是不可见的,此属性还怎样清除浮动、清除margin-top塌陷的功能。
3. scroll 内容会被修剪,但是浏览器会显示滚动条以方便用户查看其余内容。
4. auto 如果内容被修剪,则浏览器会显示滚动条以便查看其余内容。
5. inherit 规定应该从父元素继承overflow属性。
</div>
</body>
</html>
盒子类型
元素就是标签,布局中常用的有三种标签,块元素、内联元素、内联块元素(即盒子的3种类型)。
块元素
也可以称为行元素,布局中常用的标签如:div、p、ul、li、h1-6、dl、dt、dd等元素都是块元素,它在布局中的行为:
- 支持全部的样式
- 如果没有设置宽度,默认的宽度为富级宽度100%
- 盒子占了一行,及时设置了宽度
记忆:h1-6是标题,自然单放一行;p是段落,也单放一整行;ul、li是无序列表,dl、dt、dd是定义列表,对于列表,其一项也该占用一行
内联元素
也可以称为行内元素,布局中常用的标签如:a、span、em、b、strong、i等元素都是内联元素,他们在布局中的行为:
- 支持部分样式(不支持宽、高、margin上下、padding上下)(记忆:他们只是行内的一部分,没必要单独设置上下的相关属性)
- 宽高由内容决定
- 盒子并在一行
- 代码换行,盒子之间会产生间断
- 子元素是内联元素,父元素可以用text-align属性设置子元素水平对齐方式(记忆:因为其只是一行内的一部分,所以可以设置在水平的对齐)
记忆:a是超链接,span是一行中的部分内容,em表示强调,b是粗体,strong也是加粗效果,i是专业词汇,他们都没有必要单独放一行,所以是内联元素
解决内联元素间隙的方法
- 代码写成一行即可(不建议)
- 将内联元素的父级设置font-size为0,内联元素自身再设置font-size
内联块元素
内联块元素,也叫行内块元素,是新增的元素类型,现有元素没有归于此类的,img和input的行为类似这种元素,但是也归类于内联元素,我们可以用display属性将块元素或者内联元素转化成这种元素。他们在布局中表现的行为:
- 支持全部样式
- 如果没有设置宽高,宽高由内容决定
- 盒子并在一行
- 代码换行,盒子会产生间距
- 子元素是内联块元素,父元素可以用text-align属性设置子元素水平对齐方式
内联块相当于集合了块元素和内联元素的优点,而且不会有margin的合并问题
这三种元素,可以通过display属性来互相转化,不过实际开发中,块元素用得比较多,所以我们经常把内联元素转化为块元素,少量转化为内联块,而要使用内联元素时,直接使用内联元素,而不用块元素转化了。
display属性
display属性是用来设置元素的类型及隐藏的,常用的属性有:
- none 元素隐藏且不占用位置
- block 元素以块元素显示
- inline 元素以内联元素显示
- inline-block 元素以内联块元素显示
display none结合hover使用示例:使鼠标悬停时才显示某部分内容
<!DOCTYPE html>
<html>
<head>
<title>display元素</title>
<meta charset="utf-8">
<style type="text/css">
.con {
width: 200px;
}
.con h3 {
font-size: 30px;
}
.box2 {
width: 200px;
height: 200px;
background-color: gold;
display: none;
/*隐藏box2*/
}
.con:hover .box2 {
/*con hover 时,下面的box2*/
display: block;
}
</style>
</head>
<body>
<div class="con">
<h3>文字标题</h3>
<div class="box2">文字标题的说明</div>
</div>
</body>
</html>
CSS浮动
浮动特性
- 浮动元素有左浮动(float:left)和右浮动(float:right)两种
- 浮动的元素会向左或向右浮动,碰到父元素边界、其他元素才停下来
- 相邻浮动的块元素可以并在一行,超出父元素宽度就换行
- 浮动让内联元素或块元素自动转化为行内块元素(此时不会有行内块元素间隙问题)
- 浮动元素后面没有浮动的元素会占据浮动元素的位置(个人理解,设置了浮动的元素相当于向上面浮动了一层);没有浮动的元素内的文字会避开浮动的元素
- 父元素如果没有设置尺寸(一般是高度不设置),父元素内整体浮动的元素无法撑开父元素(浮动的元素向上面浮动了一层),父元素需要清除浮动
- 浮动元素之间没有垂直margin的合并
代码示例:
<!DOCTYPE html>
<html>
<head>
<title>css浮动</title>
<meta charset="utf-8">
<style type="text/css">
.con {
width: 480px;
height: 80px;
border: 1px solid gold;
margin: 50px auto 0;
}
.con .box1, .con .box2 {
width: 60px;
height: 60px;
/*display: inline-block;*/
/*float: left;*/
margin: 10px;
}
.box1 {
background-color: green;
float: left;
}
.box2 {
background-color: pink;
float: right;
}
</style>
</head>
<body>
<div class="con">
<div class="box1"></div>
<div class="box2"></div>
</div>
</body>
</html>
用列表制作菜单
ul注意事项:
ul自带样式——小圆点,由于其对于不同的浏览器显示的不一样,所以常常去掉,如果一定要使用小圆点,通常去掉后自己再添加。
ul自带margin和padding,所以通常需要去掉。
<!DOCTYPE html>
<html>
<head>
<title>菜单</title>
<meta charset="utf-8">
<style type="text/css">
.menu {
width: 694px;
height: 50px;
list-style: none;
/*设置小圆点样式:无*/
margin: 50px auto 0;
/*ul本身有margin和padding,常常需要自己设置以对其进行覆盖*/
padding: 0;
}
.menu li {
width: 98px;
height: 48px;
border: 1px solid gold;
background-color: white;
float: left;
margin-left: -1px;
text-align: center; /*left | right | center | justify,左、右、中间、两端*/
line-height: 48px;
}
.menu li a {
display: block;
/*使a标签转换为块元素,从而使文字可以“撑开”*/
text-decoration: none;
font-size: 16px;
font-family: 雅黑;
color: pink;
}
.menu li a:hover {
background-color: gold;
color: white;
}
</style>
</head>
<body>
<ul class="menu">
<li><a href="#">首页</a></li>
<li><a href="#">学校概况</a></li>
<li><a href="#">学院部门</a></li>
<li><a href="#">师资队伍</a></li>
<li><a href="#">科学研究</a></li>
<li><a href="#">招生就业</a></li>
<li><a href="#">公共服务</a></li>
</ul>
</body>
</html>
注意:对于内联元素,类似font-color属性无用,直接用color等代替
一般来说,首页的像素误差在3px以内、其他页面在5px以内以内都是允许的
清除浮动
当子元素float而父元素不给高度时,由于子元素撑不起父元素,所以需要清除浮动
- 父级上增加属性:overflow:hidden
- 在最后一个子元素的后面加一个空的div,给它的样式属性clear:both(不推荐),即
<div style="clear:both"></div>
- 使用成熟的清楚浮动样式类,clearfix
.clearfix:after, .clearfix:before {content:""; display: table;}
.clearfix:after {clear:both;}
.clearfix {zoom:1;}
/*以上三行可以同时解决清除浮动的问题和margin-top的塌陷问题*/
ps:after和before有时候ie不认,为了防止这个问题,所以以上代码添加了zoom:1,意为网页不放大也不缩小
清除浮动的使用方法:
.con {...overflow:hidden}
或者
<div class="con clearfix">
代码示例:
<!DOCTYPE html>
<html>
<head>
<title>清除浮动</title>
<meta charset="utf-8">
<style type="text/css">
.list {
width: 210px;
/*height: 400px;*/
border: 1px solid #000;
margin: 50px auto 0;
list-style: none;
padding: 0;/*
overflow: hidden;*/ /*清除浮动的方式一*/
/*不设置height,并使用此属性,使浮动的元素可以撑开父级元素*/
text-align: center;
/*使下级文字水平居中*/
}
.list li {
width: 50px;
height: 50px;
background-color: gold;
margin: 10px;
float: left;
/*浮动的元素撑不开父级元素*/
line-height: 50px;
/*使文字垂直居中*/
}
.clearfix:before {
/*解决margin-top的塌陷问题*/
content: "";
display: table;
}
.clearfix:after {
/*清除浮动的方式三,类似于方式二*/
content: "";
display: table;
clear: both;
}
</style>
</head>
<body>
<ul class="list clearfix">
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
<li>6</li>
<li>7</li>
<li>8</li>
<li>5</li>
<li>6</li>
<li>7</li>
<li>8</li>
<!-- <div style="clear: both;" class="清除浮动的方式二"></div> -->
</ul>
</body>
</html>
定位
文档流:指盒子按照html标签编写的顺序依次从上到下,从左到右排列,块元素占一行,行内元素在一行之内从左到右,先写的先排列,后写的排在后面,每个盒子都占有自己的位置。
关于定位
我们可以使用css的position属性来设置元素的定位类型,position的设置项如下:
- relative 生成相对定位元素,元素所占据的文档流的位置保留,元素本身相对自身原位置进行偏移。(比较少用,常作为绝对定位的参照物)
- absolute 生成绝对定位元素,元素脱离文档流,不占据文档流的位置,可以理解为漂浮在文档流的上方,相对于上一个定位的父级元素来进行定位,如果找不到,则相对于body元素进行定位
- fixed 生成固定定位元素,元素脱离文档流,不占据文档流的位置,可以理解为漂浮在文档流的上方,相对于浏览器窗口进行定位
- static 默认值,没有定位,元素出现在正常的文档流中,相当于取消定位属性或者不设置定位属性
- inherit 从父元素继承position属性的值
定位要配合偏移写
定位的元素相当于自己飘起来了
定位元素的偏移
定位的元素还需要用left,right,top或者bottom来参照元素的偏移值,即偏移的基准,可以用百分比(例:50%) 。ps:百分比可以配合margin的负值实现居中显示的效果
代码示例:
公用html:
<!DOCTYPE html>
<html>
<head>
<title>定位</title>
<meta charset="utf-8">
<style type="text/css">
</head>
<body>
<div class="con">
<div class="box1"></div>
<div class="box2"></div>
</div>
</body>
</html>
相对定位css:
.con {
width: 400px;
height: 400px;
border: 1px solid #000;
margin: 50px auto 0px;
}
.con .box1, .con .box2 {
width: 300px;
height: 100px;
margin: 10px;
}
.con .box1 {
background-color: green;
position: relative;
left: 50px;
top: 50px;
/*对box1设置偏移*/
}
.con .box2 {
background-color: gold;
}
绝对定位css:
.con {
width: 400px;
height: 400px;
border: 1px solid #000;
margin: 50px auto 0px;
position: relative;
/*设置父级的定位,使box1有上一级设定了定位的父级,从而使之相对于con来进行定位*/
/*父级本身没有变化,因为没有设置偏移*/
}
.con .box1, .con .box2 {
width: 300px;
height: 100px;
margin: 10px;
}
.con .box1 {
background-color: green;
position: absolute;
/*相对于body,脱离文档流*/
left: 50px;
top: 50px;
/*对box1设置偏移*/
}
.con .box2 {
background-color: gold;
}
固定定位css:
.con {
width: 400px;
height: 400px;
border: 1px solid #000;
margin: 50px auto 0px;
}
.con .box1, .con .box2 {
width: 300px;
height: 100px;
margin: 10px;
}
.con .box1 {
background-color: green;
position: fixed;
/*设置固定定位:相对于浏览器窗口*/
left: 50px;
top: 50px;
/*对box1设置偏移*/
}
.con .box2 {
background-color: gold;
}
定位元素层级
定位元素是浮动在正常的文档流之上的,可以用z-index属性来设置元素的层级,值为数值,如:z-index:10
代表将元素层级设置为10。注意,层级改变位置不变
定位元素特性
绝对定位和固定定位的块元素和行内元素会自动转化我行内块元素
定位代码示例:图标显示
<!DOCTYPE html>
<html>
<head>
<title>图标案例</title>
<meta charset="utf-8">
<style type="text/css">
.box {
width: 100px;
height:100px;
background-color: gold;
margin: 50px auto 0px;
position: relative;
border-radius: 14px;
/*设置圆角*/
}
.box .cornor {
width: 28px;
height: 28px;
position: absolute;
/*相对于父级元素定位*/
border-radius: 14px;
right: -14px;
top: -14px;
background-color: red;
text-align: center;
line-height: 28px;
}
</style>
</head>
<body>
<div class="box">
<div class="cornor">5</div>
</div>
</body>
</html>
ps:opacity:数值,可以设定透明度
backgroung属性
属性解释
background属性是css中应用比较多,且比较重要的一个属性,它是负责给盒子设置背景图片和背景颜色的,background是一个复合属性,它可以分解成如下几个设置项:
- background-color 设置背景颜色
- background-image 设置背景图片地址
- backgroung-repeat 设置背景图片如何重复平铺,有no-repeat,repeat(缺省值),repeat-x,repeat-y
- background-position 设置背景图片的位置(水平值 垂直值,有center | left | right,center | top | bottom,也可以设置数值)
- background-attachment 设置背景图片是固定还是随着页面滚动条滚动,一般不用,值有fixed(不动)
实际应用中,我们可以用background属性将上面的所有设置项放一起,而且也建议这么做,这样做性能更高,而且兼容性更好,比如:"background: #00FF00 url(bgimage.gif) no-repeat left center fixed",这里面的"#00FF00"是设置background-color,"url(bgimage.gif"是设置background-image,"no-repeat"是设置background-repeat,"left center"是设置background-position,"fixed"是设置backgroun-attachmemt,各设置项用空格隔开,有的设置项不写也是可以的,它会使用默认值,没有顺序要求(建议有自己的顺序风格)
重要应用:应用position中调节数值可以实现在网页的不同部分显示一张图中的不同位置,从而提高性能。ps:此时url只写一次即可,
动画
transform变换
需要触发
- transform-function
- translate(x,y) 设置盒子位移,水平和垂直方向同时移动,参数为"数值px",可以用transform-origin定义旋转的基点
- scale(x,y) 设置盒子缩放,参数为"数值",大数值大于1放大,小于1缩小,中心点为元素的中心位置
- rotate(deg) 设置盒子旋转,参数为"数值deg",可以用transform-origin定义旋转的基点
- skew(x-angle, y-angle) 斜切变换,使元素在水平和垂直方向同时扭曲(X轴和Y轴同时按一定的角度值进行扭曲变形),参数分别为水平和垂直的扭曲角度,"数值deg, 数值deg"
- perspective 设置透视距离
- transform-style flat | preserve-3d | 设置盒子是否按3d空间显示
- translateX、translateY、translateZ 设置三维移动,可以用transform-origin定义旋转的基点
- rotateX、rotateY、rotateZ 设置三维转动
- scaleX、scaleY、scaleZ 设置三维缩放
- transform-origin 设置变形的中心点
- backface-visibility 设置盒子背面是否可见(默认可见)
- transfor-origin(x, y) 改变元素的基点,x和y的值可以是百分值,em,px,还可以是字符参数left, center ,right, top, bottom
用法示例:
transform: none | transform-funstion; /*我们可以同时使用多个函数,即同时进行多种属性的操作*/
animation动画
可以让元素自己动,不需要触发
- @keyframes 定义关键帧动画
- animation-name 动画名称
- animation-duration 动画持续时间
- animation-timing-function 动画曲线 linear(匀速) | ease(缓冲) | steps(步数)
- animation-delay 动画延迟,ms,s
- animation-iteration-count 动画播放次数 n | infinte
- animation-direction 动画结束后是否反向还原 normal | Alternate,注意,如果设置了alternate,图像的一变一回算两次,
- animation-play-state 动画状态 paused | running
- animation-fill-mode 动画前后的状态 none(缺省) | forwards(结束时停留在最后一帧) | backwards(停留在定义的开始帧) | both(前后都应用)
- animation:name duration timing-function delay iteration-count direction 同时设置多个属性(有顺序要求)
代码示例:
<!DOCTYPE html>
<html>
<head>
<title>animation动画</title>
<meta charset="utf-8">
<style type="text/css">
.box {
width: 100px;
height: 100px;
background-color: gold;
animation: moving 1s 0.5s 5;
/*将下面的动画给box*/
animation-direction: alternate;l
}
.box:hover {
/*当鼠标放上去的时候,暂停播放*/
animation-play-state: paused;
}
@keyframes moving{
/*定义动画,并为其取名moving*/
/*利用from和to定义两个状态*/
from {
width: 100px;
}
to {
width: 500px;
}
}
</style>
</head>
<body>
<div class="box"></div>
</body>
</html>
风车旋转案例:
<!DOCTYPE html>
<html>
<head>
<title>风车旋转</title>
<meta charset="utf-8">
<style type="text/css">
img {
display: block;
widows: 400px;
height: 400px;
margin: 50px auto 0px;
animation: rot 1s linear infinite;
}
@keyframes rot {
from {
transform: rotate(0deg);
}
to {
transform: rotate(360deg);
}
}
img:hover {
animation-play-state: paused;
}
</style>
</head>
<body>
<img src="./风车.jpg">
</body>
</html>