HTML
第一个HTML页面
<!--
1.这是HTML的注释
2.加上以下代码的第一行就表示HTML5语法,去掉就表示HTML4.0
3.HTML不区分大小写,语法松散不严格
-->
<!doctype html>
<!--根-->
<html>
<!--头-->
<head>
<!--网页标题,显示在网页左上角-->
<title>网页的标题</title>
</head>
<!--体-->
<body>
网页的主体内容,欢迎学习HTML!
</body>
</html>
常用标签
1.标题标签 h1~h6
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>标题标签</title>
</head>
<body>
<!-- 标题标签 -->
<h1>h1标签:标题</h1>
<h2>h2标签:标题</h2>
<h3>h3标签:标题</h3>
<h4>h4标签:标题</h4>
<h5>h5标签:标题</h5>
<h6>h6标签:标题</h6>
</body>
</html>
2.段落标签 p
注意:在网页上直接写空格或者分行是不起效果的,必须通过标签或者CSS样式进行决定
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>段落标签</title>
</head>
<body>
<!-- 标题标签 -->
<h3>清平调·其一</h2>
<h6>[唐]李白</h6>
<!-- 段落标签 -->
<p>云想衣裳花想容,</p>
<p>春风拂槛露华浓。</p>
<p>若非群玉山头见,</p>
<p>会向瑶台月下逢。</p>
</body>
</html>
3.图片标签 img
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<!-- scr属性:告知图片的网络地址-->
<img src="http://bbsimg.res.flyme.cn/forum/201502/06/204658egmkwhimyycmae11.png" alt="静态图-英雄联盟" width="700px">
<!-- scr属性:告知图片的文件地址-->
<img src="img/电玩系列.gif" alt="动态图-英雄联盟电玩系列">
</body>
</html>
4.链接标签 a
可用于页面之间和页面内部的跳转
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>链接标签</title>
</head>
<body>
<!-- 网站网址跳转 -->
<a href="https://www.acfun.cn/">A站</a>
<a href="https://www.bilibili.com/">B站</a>
<!-- 页面跳转 -->
<a href="03图片标签.html">图片标签演示</a>
</body>
</html>
5.列表标签
- 无序列表(黑色小圆点)ul > li , ul是列表的父元素标签,li是子元素标签
- 有序列表ol(前面数字序号)
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>列表标签</title>
</head>
<body>
<!-- 无序列表 -->
<!-- 快捷写法:ul>li*5 再按Tab键 -->
<ul>
<li>新闻标题1</li>
<li>新闻标题2</li>
<li>新闻标题3</li>
<li>新闻标题4</li>
<li>新闻标题5</li>
</ul>
<!-- 有序列表 -->
<!-- 快捷写法:ol>li*5 再按Tab键 -->
<ol>
<li>新闻标题</li>
<li>新闻标题</li>
<li>新闻标题</li>
<li>新闻标题</li>
<li>新闻标题</li>
</ol>
</body>
</html>
6.DIV标签:容器标签
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>DIV标签</title>
<style type="text/css">
.a1 {
/* 设置第一个a标签的左外边距为550像素 */
margin-left: 550px;
}
a {
/* 设置a标签的左内边距为50像素 */
padding-left: 50px;
}
div {
/* 盒子内容居中 */
text-align: center;
}
img {
/* 设置图片大小 */
width: 500px;
}
</style>
</head>
<body>
<!-- 点击会跳转到目标图片位置 -->
<a href="#content1" class="a1">魔女阿狸</a>
<a href="#content2">光明哨兵薇恩</a>
<a href="#content3">天使</a>
<div id="content1">
<h3>魔女阿狸</h3>
<img src="img/魔女阿狸.jpg" >
</div>
<div id="content2">
<h3>光明哨兵薇恩</h3>
<img src="img/光明哨兵薇恩.jpg" >
</div>
<div id="content3">
<h3>天使</h3>
<img src="img/天使.png" >
</div>
</body>
</html>
7.部分其他标签
<!-- 换行 -->
<br>
<!-- 字体设置 -->
<b>粗体字</b>
<br>
<i>斜体字</i>
8.表单标签
form:表单标签
属性:
-
action:将表单的数据提交至什么地址
-
method:提交的方法 ------> get、post
get方法:将表单的数据直接放置到链接地址上,可以直接看到。不安全,但效率高
post方法:表单数据放置到请求的body里面,不直接显示,安全但效率稍微低,可以提交比较大的表单的数据
input标签
属性:
- type:定义输入标签的类型,text/password/submit…
- name:提交数据的名称
- value:提交数据的输入框的值
- placeholder:预置文字
- maxlength:规定输入字段中的字符的最大长度(了解即可)
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>表单标签</title>
</head>
<body>
<form action="" method="get">
<input type="text" name="username" placeholder="请输入用户名" id="" value="" />
<input type="password" name="password" id="" placeholder="请输入密码" value="" />
<input type="submit" value="登录" />
</form>
</body>
</html>
下拉表单
- select中至少包含一对option
- 在option中定义selected = “selected” 时,当前项即为默认选中项
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
城市:
<select name="">
<option>北京</option>
<option>上海</option>
<!-- 默认设置为广州 -->
<option selected="selected">广州</option>
<option>深圳</option>
</select>
</body>
</html>
文本域
用于定义多行文本输入的控件,该控件常用于留言板、评论
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<form>
今日反馈:
<!-- 一行50个字,显示5行,了解即可 -->
<textarea cols="50" rows="5">这个反馈是textarea来做的</textarea>
</form>
</body>
</html>
9.表格标签
基本语法
<table>
<tr>
<td>单元格内的文字</td>
...
</tr>
...
</table>
<!--
table用于定义表格标签
tr用于定义表格中的行,必须嵌套在table标签中
td用于定义表格中的单元格,必须嵌套在tr标签中
字母td指表格数据(table data),即数据单元格的内容
-->
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<table>
<tr><td>姓名</td> <td>性别</td> <td>年龄</td></tr>
<tr><td>张三</td> <td>男</td> <td>21</td></tr>
<tr><td>李四</td> <td>男</td> <td>22</td></tr>
<tr><td>王五</td> <td>男</td> <td>23</td></tr>
</table>
</body>
</html>
表头单元格标签
<table>
<tr><th>姓名</th> <th>性别</th> <th>年龄</th></tr>
<tr><td>张三</td> <td>男</td> <td>21</td></tr>
<tr><td>李四</td> <td>男</td> <td>22</td></tr>
<tr><td>王五</td> <td>男</td> <td>23</td></tr>
</table>
<!--
效果:th标签内的内容加粗并且居中
-->
表格相关属性
<!--
以下标签要写到表格标签table里面去
align : 对齐方式, 属性值:left、center、right
border : 边框,属性值:1或"",""表示默认、无边框
width : 宽度,属性值:像素值或百分比
-->
表格结构标签
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>热门游戏排行榜</title>
</head>
<body>
<table border="1" align="center" width="500" height="250" cellspacing="0" cellpadding="0">
<!-- 表头 -->
<thead>
<tr>
<th>排名</th>
<th>名字</th>
<th>类型</th>
<th>众评</th>
</tr>
</thead>
<!-- 内容 -->
<tbody>
<tr align="center">
<td>1</td>
<td>双人成行</td>
<td>AVG</td>
<td>9.7</td>
</tr>
<tr align="center">
<td>2</td>
<td>鬼谷八荒</td>
<td>RPG</td>
<td>8.7</td>
</tr>
...
</tbody>
</table>
</body>
</html>
合并单元格
方式
- 跨行合并:rowspan =“合并单元格的个数”
- 跨列合并:colspan =“合并单元格的个数”
目标单元格
- 跨行:最上侧单元格为目标单元格,写合并代码
- 跨列:最左侧单元格为目标单元格,写合并代码
表单表格综合案例
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<h4>xx注册页面</h4>
<table width="600">
<!-- 第一行 -->
<tr>
<td>性别:</td>
<td>
<!-- 下面的label把图片、字体包含起来,点击字体或图片也可,不用再只点击选项中的圆圈了 -->
<input type="radio" name="sex" id="nan"> <label for="nan"> <img src="img/男.png" width="30" > 男 </label>
<input type="radio" name="sex" id="nv"> <label for="nv"> <img src="img/女.png" width="30" >女 </label>
</td>
</tr>
<!-- 第二行 -->
<tr>
<td>生日</td>
<td>
<select>
<option>--请选择年份--</option>
<option>1997</option>
<option>1998</option>
<option>1999</option>
<option>2000</option>
<option>2001</option>
</select>
<select>
<option>--请选择月份--</option>
<option>1</option>
<option>2</option>
<option>3</option>
<option>4</option>
<option>5</option>
</select>
<select>
<option>--请选择日--</option>
<option>1</option>
<option>2</option>
<option>3</option>
<option>4</option>
<option>5</option>
</select>
</td>
</tr>
<!-- 第三行 -->
<tr>
<td>所在地区</td>
<td><input type="text" value="广州" /></td>
</tr>
<!-- 第四行 -->
<tr>
<td>婚姻状况:</td>
<td>
<!-- 下面的label把字体包含起来,点击字体也可,不用再只点击选项中的圆圈了 -->
<!-- checked="checked"表示默认选择 -->
<input type="radio" name="marry" id="wh" checked="checked"><label for="wh">未婚</label>
<input type="radio" name="marry" id="yh"><label for="yh">已婚</label>
<input type="radio" name="marry" id="lh"><label for="lh">离婚</label>
</td>
</tr>
<!-- 第五行 -->
<tr>
<td>学历:</td>
<td><input type="text" value="幼儿园" /></td>
</tr>
<!-- 第六行 -->
<tr>
<td>喜欢的游戏类型</td>
<td>
<input type="checkbox" name="love">动作冒险
<input type="checkbox" name="love">FPS
<input type="checkbox" name="love">体育竞技
<input type="checkbox" name="love">RPG
<input type="checkbox" name="love" checked="checked">都喜欢
</td>
</tr>
<!-- 第七行 -->
<tr>
<td>个人介绍</td>
<td>
<textarea>个人简介</textarea>
</td>
</tr>
<!-- 第八行 -->
<tr>
<td></td>
<td>
<input type="submit" value="免费注册" >
</td>
</tr>
<!-- 第九行 -->
<tr>
<td></td>
<td>
<input type="checkbox" checked="checked">我同意注册条款和会员加入标准
</td>
</tr>
<tr>
<td></td>
<td>
<a href="#">我是会员,立即登录</a>
</td>
</tr>
<tr>
<td></td>
<td>
<h5>我承诺</h5>
<ul>
<li>年满18岁</li>
<li>抱着严肃的态度</li>
<li>真诚</li>
</ul>
</td>
</tr>
</table>
</body>
</html>
10.span
span 用于对文档中的行内元素进行组合。
span 标签没有固定的格式表现。当对它应用样式时,它才会产生视觉上的变化。如果不对 span 应用样式,那么 span 元素中的文本与其他文本不会任何视觉上的差异。
span 标签提供了一种将文本的一部分或者文档的一部分独立出来的方式。
<p>
我的母亲有
<span style="color:blue;font-weight:bold">蓝色</span>
的眼睛,我的父亲有
<span style="color:darkolivegreen;font-weight:bold">碧绿色</span>
的眼睛。
</p>
11.label
label 标签为 input 元素定义标注(标记)。
label 元素不会向用户呈现任何特殊效果。不过,它为鼠标用户改进了可用性。如果您在 label 元素内点击文本,就会触发此控件。就是说,当用户选择该标签时,浏览器就会自动将焦点转到和标签相关的表单控件上。
<p>点击其中一个文本标签选中选项:</p>
<form action="demo_form.php">
<label for="male">Male</label>
<input type="radio" name="sex" id="male" value="male"><br>
<label for="female">Female</label>
<input type="radio" name="sex" id="female" value="female"><br><br>
<input type="submit" value="提交">
</form>
<!-- 若不加label male文字点击不会选中,反之,则点击文字也会选中 -->
HTML5的新特性
新增的语义化标签
- header :头部标签
- nav :导航标签
- article :内容标签
- section :定义文档某个区域
- aside :侧边栏标签
- footer :尾部标签
注意:
- 这种语义化标准主要是针对搜索引擎的
- 这些新标签页面中可以使用多次
- 在IE9中,需要把这些元素转换为块级元素
- 其实,我们移动端更喜欢使用这些标签
新增的多媒体标签
视频video
<video src="文件地址" controls="controls"></video>
常见属性
属性 | 值 | 描述 |
---|---|---|
autoplay | autoplay | 视频就绪自动播放(谷歌浏览器需要添加muted来解决自动播放问题) |
controls | controls | 向用户显示播放控件 |
width | pixels(像素) | 设置播放宽度 |
height | pixels(像素) | 设置播放高度 |
loop | loop | 播放完是否继续播放该视频,循环播放 |
preload | auto(预先加载视频),none(不应加载视频) | 规定是否加载视频(如果有了autoplay就忽略该属性) |
src | url | 视频url地址 |
poster | imgurl | 加载等待的画面图片 |
muted | muted | 静音播放 |
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>h5新增视频标签</title>
<style type="text/css">
video {
margin: 200px 500px;
width: 800px;
}
</style>
</head>
<body>
<video src="../vide/redmiG.mp4" autoplay="autoplay" muted="muted" | loop="loop"></video>
</body>
</html>
音频audio
<audio src="文件地址" controls="controls"></audio>
<audio controls="controls">
<source src="happy.mp3" type="audio/mpeg">
<source src="happy.ogg" type="audio/ogg">
您的浏览器暂不支持<audio>标签。
</audio>
常见属性
属性 | 值 | 描述 |
---|---|---|
autoplay | autoplay | 如果出现该属性,则音频在就绪后马上播放 |
controls | controls | 如果出现该属性,则向用户显示控件,比如播放按钮 |
loop | loop | 如果出现该属性,则每当音频结束时重新开始播放 |
src | url | 要播放的音频的URL |
多媒体标签总结
- 音频标签和视频标签使用方式基本一致
- 浏览器支持情况不同
- 谷歌浏览器把音频和视频自动播放禁止了
- 我们可以给视频标签添加muted属性来静音播放视频,音频不可以(可以通过JavaScript解决)
- 视频标签是重点,我们经常设置自动播放,不使用controls控件,循环和设置大小属性
新增input类型
属性值 | 说明 |
---|---|
type=“email” | 限制用户输入必须为Email类型 |
type=“url” | 限制用户输入必须为URL类型 |
type=“date” | 限制用户输入必须为日期类型 |
type=“time” | 限制用户输入必须为时间类型 |
type=“month” | 限制用户输入必须为月类型 |
type=“week” | 限制用户输入必须为周类型 |
type="number" | 限制用户输入必须为数字类型 |
type="tel" | 手机号码 |
type="search" | 搜索框 |
type=“color” | 生成一个颜色选择表单 |
重点记住:number 、tel、search这三个
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>新增input表单</title>
<style type="text/css">
</style>
</head>
<body>
<!-- 验证的时候必须添加form表单域 -->
<form action="">
<ul>
<li>邮箱:<input type="email" /></li>
<li>网址:<input type="url" /></li>
<li>日期:<input type="date" /></li>
<li>时间:<input type="time" /></li>
<li>数量:<input type="number" /></li>
<li>手机号码:<input type="tel" /></li>
<li>搜索:<input type="search" /></li>
<li>颜色:<input type="color" /></li>
<!-- 当我们点击提交按钮就可以验证表单了 -->
<li><input type="submit" value="提交"></li>
</ul>
</form>
</body>
</html>
新增的表单属性
属性 | 值 | 说明 |
---|---|---|
required | required | 表单拥有该属性表示其内容不能为空,必填 |
placeholder | 提示文本 | 表单的提示信息,存在默认值将不显示 |
autofocus | autofocus | 自动聚焦属性,页面加载完成自动聚焦到指定的表单 |
autocomplete | off / on | 当用户在字段开始键入时,浏览器基于之前键入过的值,应该显示出在字段中填写的选项,默认已经打开,如autocomplete=“on”,关闭autocomplete="off"需要放在表单内,同时加上name属性,同时成功提交 |
multiple | multiple | 可以多选文件提交 |
可以通过以下设置方式修改placeholder里面的字体颜色:
input::placehokder {
color:pink;
}
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>新增表单属性</title>
<style type="text/css">
input::placeholder {
color: pink;
}
</style>
</head>
<body>
<form action="">
<input type="search" name="sear" id="" required="required" placeholder="阿波"
autofocus="autofocus" autocomplete="off">
<input type="submit" value="提交">
</form>
</body>
</html>
CSS
HTML引入CSS的三种方式
1.内联定义方式
在标签内部使用style属性来设置元素的CSS样式,这种方式称为内联定义方式
语法格式:
<标签 style = "样式名:样式值; 样式名:样式值; 样式名:样式值; ..."></标签>
2.样式块方式
在head标签中使用style块,这种方式被称为样式块方式
语法格式:
<head>
<style type = "text/css">
选择器 {
样式名:样式值;
样式名:样式值;
......
}
选择器 {
样式名:样式值;
样式名:样式值;
......
}
</style>
</head>
3.链入外部样式表文件
链入外部样式表文件,这种方式最常用。(将样式写到一个独立的xxx.css文件当中,在需要的网页上直接引入css文件,样式就引入了)
语法格式:
<link type = "text/css" rel = "stylesheet" href = "css文件的路径" />
CSS引入样式方法总结
样式表 | 优点 | 缺点 | 使用情况 | 控制范围 |
---|---|---|---|---|
行内样式表 | 书写方便,权重高 | 结构样式混写 | 较少 | 控制一个标签 |
内部样式表 | 部分结构和样式相分离 | 没有彻底分离 | 较多 | 控制一个页面 |
外部样式表 | 完全实现结构和样式相分离 | 需要引入 | 最多,吐血推荐 | 控制多个页面 |
选择器
标签选择器
指用HTML标签名称作为选择器,按标签名称分类,为页面中某一类标签指定统一的CSS样式
标签名 {
属性1: 属性值1;
属性2: 属性值2;
属性3: 属性值3;
...
}
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>基础选择器之标签选择器</title>
<style type="text/css">
/* 标签选择器:写上标签名 */
p {
color: green;
}
div {
color: pink;
}
</style>
</head>
<body>
<p>男生</p>
<div>女生</div>
</body>
</html>
类选择器
如想要差异化选择不同的标签,单独选一个或者选几个标签,可以使用类选择器
.类名 {
属性1: 属性值1;
...
}
注意:
- 类选择器使用"."(英文点号)进行标识,后面紧跟类名(自定义,我们自己命名的)
- 可以理解为给这个标签起了一个名字,来表示
- 长名称或词组可以使用横线来为选择器命名
- 不要使用纯数字、中文等命名,尽量使用英文字母来表示
- 命名要有意义,尽量使别人一眼就知道这个类名的目的
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>利用类选择器画三个盒子</title>
<style type="text/css">
/* 类选择器口诀:样式点定义 结构类(class)调用 一个或多个 开发最常用 */
.red {
width: 100px;
height: 100px;
/* 背景颜色 */
background-color: red;
}
.green {
width: 100px;
height: 100px;
background-color: green;
}
</style>
</head>
<body>
<div class="red"></div>
<div class="green"></div>
<div class="red"></div>
</body>
</html>
多类名
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>多类名的使用方式</title>
<style type="text/css">
.red {
color: red;
}
.font35 {
font-size: 35px;
}
</style>
</head>
<body>
<div class="red font35">刘德华</div>
</body>
</html>
id选择器
可以为标有特定id的HTML元素指定特定的样式
HTML元素以id属性来设置id选择器,CSS中id选择器以"#"来定义
#id名 {
属性1: 属性值1;
...
}
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>基础选择器之id选择器</title>
<style type="text/css">
/* id选择器的口诀:样式#定义,结构id调用,只能调用一次,别人切勿使用 */
#pink {
color: pink;
}
</style>
</head>
<body>
<div id="pink">迈克尔.杰克逊</div>
<!-- <div id="pink">阿波</div> 错误-->
</body>
</html>
id选择器与类选择器的区别
- 类选择器好比人的名字,一个人可以有多个名字,同时一个名字也可以被多个人使用
- id选择器好比人的身份证号码,全中国是唯一的,不得重复
- id选择器和类选择器最大的不同在于使用次数上
- 类选择器在修改样式中使用的最多,id选择器一般用于页面唯一性的元素上,经常和JavaScript搭配使用
通配符选择器
使用"*"定义,表示选取页面中所有元素(标签)
注意:通配符选择器不需要调用,自动就给所有的元素使用样式
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>基础选择器之通配符选择器</title>
<style type="text/css">
* {
color: red;
}
/* *号这里把html、body、div、span li等等的标签都改为了红色 */
</style>
</head>
<body>
<div>我的</div>
<span>我的</span>
<ul>
<li>还是我的</li>
</ul>
</body>
</html>
基础选择器总结
基础选择器 | 作用 | 特点 | 使用情况 | 用法 |
---|---|---|---|---|
标签选择器 | 可以选出所有相同的标签,比如p | 不能差异化选择 | 较多 | p {color: red;} |
类选择器 | 可以选出1个或者多个标签 | 可以根据需求选择 | 非常多 | .nav {color: red;} |
id选择器 | 一次只能选择1个标签 | id属性只能在每个HTML文档中出现一次 | 一帮和js搭配 | #nav {color: red;} |
通配符选择器 | 选择所有的标签 | 选择的太多,有部分不需要 | 特殊情况使用 | * {color: red;} |
后代选择器(重要)
后代选择器又称包含选择器,可以选择父元素里面的子元素
语法:
元素1 元素2 { 样式声明 }
上述语法表示选择元素1里面的所有元素2(后代元素)
注意:
1. 元素1和元素2中间使用空格隔开
2. 元素1是父级,元素2是子级,最终选择的是元素2
3. 元素2可以是儿子,也可以是孙子等,只要是元素1的后代即可
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>复合选择器之后代选择器</title>
<style type="text/css">
/* 想要把ol里面的小li选出来改为绿色 */
ol li {
color: green;
}
ol li a {
color: red;
}
.nav li a {
color: yellow;
}
</style>
</head>
<body>
<ol>
哈哈哈~
<li>我是ol的孩子</li>
<li><a href="#">我是孙子</a></li>
</ol>
<ul>
<li>我是ul的孩子</li>
<li><a href="#">不会变化的</a></li>
</ul>
<ul class="nav">
<li>我是ul的孩子</li>
<!-- 想把下面变色 -->
<li><a href="#">不会变化的</a></li>
</ul>
</body>
</html>
子选择器(重要)
子元素选择器(子选择器)只能选择作为某元素的最近一级子元素,简单理解就是选亲儿子元素
语法:
元素1 > 元素2{ 样式声明 }
上述语法表示选择元素1里面的所有直接后代(子元素)元素2
注意:
1. 元素1和元素2中间用大于号隔开
2. 元素1是父级,元素2是子级,最终选择的是元素2
3. 元素2必须是亲儿子,其孙子、重孙子之类都不归它管,你也可以叫它亲儿子选择器
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>复合选择器之子选择器</title>
<style type="text/css">
.nav>a {
color: red;
}
</style>
</head>
<body>
<div class="nav">
<!-- a 与 p 都是儿子,p 里面的 a 不是 -->
<a href="#">我是儿子</a>
<p>
<a href="#">我是孙子</a>
</p>
</div>
</body>
</html>
并集选择器
并集选择器可以选择多组标签,同时为他们定义相同的样式,通常用于集体声明
并集选择器是各选择器通过英文逗号连接而成,任何形式的选择器都可以作为并集选择器的一部分
语法:
元素1,元素2 { 样式声明 }
上述语法表示选择元素1和元素2
注意:
1. 元素1和元素2中间用逗号隔开
2. 逗号可以理解为和的意思
3. 并集选择器通常用于集体声明
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>复合选择器之并集选择器</title>
<style type="text/css">
/* 要求1:把熊大熊二改为粉色 */
/* div,p {
color: pink;
} */
/* 要求2:把熊大熊二改为粉色 还有小猪一家改为粉色 */
div,
p,
.pig li {
color: pink;
}
/* 约定的语法规范,并集选择器喜欢竖着写 */
/* 一定要注意最后一个选择器不需要加逗号 */
</style>
</head>
<body>
<div>熊大</div>
<p>熊二</p>
<span>光头强</span>
<ul class="pig">
<li>小猪佩奇</li>
<li>猪爸爸</li>
<li>猪妈妈</li>
</ul>
</body>
</html>
伪类选择器
伪类选择器用于向某些选择器添加特殊的效果,比如给链接添加特殊效果,或者选择第1个,第n个元素
伪类选择器书写最大的特点就是用冒号(:)表示,比如:hover、:first-child
链接伪类选择器
a:link /* 选择所有未被访问的链接 */
a:visited /* 选择所有已被访问的链接 */
a:hover /* 选择鼠标指针位于其上的链接 */
a:active /* 选择活动链接(鼠标按下未弹起的链接) */
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>复合选择器之链接伪类选择器</title>
<style type="text/css">
/* 未访问的链接a:link 把没有点击过的链接选出来 */
a:link {
color: #333;
text-decoration: none;
}
/* a:visited 选择点击过的链接 */
a:visited {
color: orange;
}
/* a:hover 选择鼠标经过的那个链接 */
a:hover {
color: skyblue;
}
/* a:active 选择的是鼠标正在按下还没有弹起鼠标的那个链接 */
a:active {
color: green;
}
</style>
</head>
<body>
<a href="#">小猪佩奇</a>
<a href="http:www.XXX.com">未知的链接</a>
</body>
</html>
链接伪类选择器注意事项:
- 为了确保生效,请按照LVHA的顺序声明:link - :visited - :hover - :active
- 因为a链接在浏览器中具有默认样式,所有我们实际工作中都需要给链接单独指定样式
链接伪类选择器实际开发工作中的写法
/* a是标签选择器,所有的链接 */
a {
color: gray;
}
/* :hover是链接伪类选择器,鼠标经过 */
a:hover {
color: red;/* 鼠标经过的时候,由原来的灰色变成了红色 */
}
:focus伪类选择器
用于选取获得焦点的表单元素,焦点就是光标,一般情况input类表单元素才能获取,因此这个选择器也主要针对于表单元素来说
input:focus {
background-color:yellow;
}
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>focus选择器</title>
<style type="text/css">
/* 把获得光标的input表单元素选取出来 */
input:focus {
/* 光标在哪,哪里就变粉红色 */
background-color: deeppink;
}
</style>
</head>
<body>
<input type="text">
<input type="text">
<input type="text">
</body>
</html>
复合选择器总结
选择器 | 作用 | 特征 | 使用情况 | 隔开符号及用法 |
---|---|---|---|---|
后代选择器 | 用来选择后代元素 | 可以是子孙后代 | 较多 | 符号是空格.nav a |
子代选择器 | 选择最近一级元素 | 只选亲儿子 | 较少 | 符号是大于.nav>p |
并集选择器 | 选择某些相同样式的元素 | 可以用于集体声明 | 较多 | 符号是逗号.nav,.header |
链接伪类选择器 | 选择不同状态的链接 | 跟链接相关 | 较多 | 重点记住a{}和a:hover 实际开发的写法 |
:focus选择器 | 选择获得光标的表单 | 跟表单相关 | 较少 | input:focus 记住这个写法 |
字体属性
Fonts(字体)属性用于定义字体系列、大小、粗细和文字样式
字体系列
CSS使用font-family属性定义文本的字体系列
p { font-family:"微软雅黑";}
div {font-family: Arial,"Microsoft Yahei","微软雅黑";}
字体大小
font-size属性定义字体的大小
p { font-size: 20px; }
常用单位
1.px 像素
像素px和当前操作系统视窗分辨率有关(一个像素代表一个点:1920*1080表示横向有1920个点,纵向有1080个点),是最常用的单位
2.em
相对单位,可理解为倍数,如p的字体大小设定为2em,body的字体大小设定为10px,这样的话2em就等于20px(10px * 2em = 20px)
3.rem
与em差不多,唯一不同的是它基于root元素,即html元素的字体大小设定去计算,它可以简单的通过更改html元素大小,从而调整所有字体大小。
4.vw与vh
vw(Viewport Width)、vh(Viewport Height)是基于视图窗口的单位,是css3的一部分,基于视图窗口的单位,设定值只有1~100。50vw即是画面宽度的一半,50vh即是画面高度的一半。
5.vmin与vmax
vmin:vw和vh中较小的那个。
vmax:vw和vh中较大的那个。
字体粗细
font-weight属性用于设置文本字体的粗细
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>CSS字体属性之字体粗细</title>
<style type="text/css">
.bold {
/* font-weight: bold; 定义粗体(加粗的) */
/* 这个700的后面不要跟单位,等价于bold,都是加粗的效果 */
font-weight: 700;
}
h2 {
font-weight: normal;/* 默认值(不加粗的) */
/* font-weight: 400 */
}
</style>
</head>
<body>
<h2>《标题》</h2>
<p>内容1</p>
<p class="bold">内容2</p>
<p>内容3</p>
</body>
</html>
文字样式
font-style属性设置文本的风格
p { font-style: normal; }
属性值 | 作用 |
---|---|
normal | 默认值,浏览器会显示标准的字体样式 |
italic | 浏览器会显示斜体的字体样式 |
注意:要给斜体标签(em,i)改为不倾斜字体可以用font-style设置
文本属性
Text(文本)属性可定义文本的外观,如颜色、对齐、装饰文本、文本缩进、行间距等
文本颜色
color属性用于定义文本的颜色
表示方式 | 属性值 |
---|---|
预定义的颜色值 | red、green、blue,还有其他的颜色等等 |
十六进制 | #FF0000、#FF6600、#29D794 |
RGB代码 | rgb(255,0,0)或rgb(100%,0%,0%) |
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>CSS文本外观属性之颜色</title>
<style type="text/css">
div {
/* color: deeppink; */
/* color: #ff00ff; */
color: rgb(255, 88, 188);
}
</style>
</head>
<body>
<div>哈哈哈哈哈哈哈哈哈哈哈哈哈哈</div>
</body>
</html>
文本对齐
text-align属性用于设置元素内文本内容的水平对齐方式
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>文本外观之文本对齐</title>
<style type="text/css">
h1 {
/* 本质是让h1盒子里的文字水平居中对齐 */
text-align: center;
/* text-align: left; 左对齐 */
/* text-align: right; 右对齐 */
}
</style>
</head>
<body>
<h1>居中的标题</h1>
</body>
</html>
文本缩进
text-indent属性用来指定文本的第一行的缩进,通常是将段落的首行缩进
p {
font-size: 24px;
/* text-indent: 20px; */
/* 此时写了2em,则是缩进当前元素2个文字大小的距离 */
text-indent: 2em;
}
行间距
line-height属性用于设置行间的距离(行高),可以控制文字行与行之间的距离
行间距分三部分组成:上间距、文本高度、下间距
装饰文本
text-decoration属性规定添加到文本的修饰。可以给文本添加下划线、删除线、上划线等
属性值 | 描述 |
---|---|
none | 默认。没有装饰线(最常用) |
underline | 下划线。链接a自带下划线(常用) |
overline | 上划线。(几乎不用) |
line-through | 删除线。(不常用) |
注意:重点记住—>如何添加下划线?如何删除下划线?其余了解。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>文本外观之装饰文本</title>
<style type="text/css">
div {
/* 下划线 */
/* text-decoration: underline; */
/* 删除线 */
/* text-decoration: line-through; */
/* 上划线 */
text-decoration: overline;
}
a {
text-decoration: none;/* 去掉链接的下划线 */
color: #FFFF00;
}
</style>
</head>
<body>
<div>粉红色的回忆</div>
<br>
<a href="#">黄色的回忆</a>
</body>
</html>
元素显示模式
HTML元素一般分为块元素和行内元素两种类型
块元素
常见的块元素有h1~h6、p、div、ul、ol、li等,其中div是最典型的块元素
特点:
1. 比较霸道,自己独占一行
2. 高度、宽度、外边距以及内边距都可以控制
3. 宽度默认是容器(父级宽度)的100%
4. 是一个容器及盒子,里面可以放行内或者块元素
注意:
1. 文字类的元素内不能使用块级元素
2. p标签主要用于存放文字,因此p里面不能放块级元素,特别是不能放div
3. 同理h1~h6等都是文字类块级标签,里面也不能放其他块级元素
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>显示模式之块元素</title>
<style type="text/css">
div {
/* width: 200px; */
height: 200px;
background-color: pink;
}
</style>
</head>
<body>
<div>比较霸道,自己独占一行</div>瑟瑟发抖
<p>
<div>这里有问题</div>
</p>
</body>
</html>
行内元素
常见的行内元素有a、strong、b、em、i、del、s、ins、u、span等,其中span标签是最典型的行内元素,有的地方也将行内元素称为内联元素。
特点:
1. 相邻行内元素在一行上,一行可以显示多个
2. 高、宽直接设置是无效的
3. 默认宽度就是它本身内容的宽度
4. 行内元素只能容纳文本或其他行内元素
注意:
1. 链接里面不能再放链接
2. 特殊情况链接<a>里面可以放块级元素,但是给<a>转换一下块级模式最安全
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>显示模式之行内元素</title>
<style type="text/css">
span {
width: 100px;
height: 100px;
background-color: deeppink;
}
</style>
</head>
<body>
<span>阿波你怎么穿着品如的衣服</span><strong>品如的衣柜</strong>
<span>阿波</span><strong>品如的衣柜</strong>
<!-- <a href="http://www.baidu.com">
<a href="#"></a>
</a> 不允许的!!! -->
</body>
</html>
行内块元素
在行内元素中有几个特殊的标签:img、input、td,它们同时具有块元素和行内元素的特点
特点:
1. 和相邻行内元素(行块内)在一行上,但是他们之间会有空白缝隙。一行可以显示多个(行内元素特点)
2. 默认宽度就是它本身内容的宽度(行内元素特点)
3. 高度、宽度、外边距以及内边距都可以控制(块级元素特点)
元素显示模式总结
元素模式 | 元素排列 | 设置样式 | 默认宽度 | 包含 |
---|---|---|---|---|
块级元素 | 一行只能放一个块级元素 | 可以设置宽度高度 | 容器的100% | 容器级可以包含任何标签 |
行内元素 | 一行可以放多个行内元素 | 不可以直接设置宽度高度 | 它本身内容的宽度 | 容纳文本或者其他行内元素 |
行内块元素 | 一行可以放多个行内块元素 | 可以设置宽度和高度 | 它本身内容的宽度 |
元素显示模式的转换
转换为块元素:display:block;
转换为行内元素:display:inline
转换为行内块元素:display:inline-block;
小米侧边栏案例
核心思路:
- 把链接a转换成块级元素,这样链接就可以单独占一行,并且有宽度和高度
- 鼠标经过a给链接设置背景颜色
小技巧
单行文字垂直居中
CSS没有提供文字的垂直居中代码,我们可以使用一个小技巧来实现
解决方案:让文字的行高等于盒子的高度就可以让文字在当前盒子内垂直居中
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>简洁小米侧边栏</title>
<style type="text/css">
/* 1.把链接转换为块级元素 */
a {
display: block;
width: 230px;
height: 40px;
background-color: #55585a;
font-size: 14px;
color: #fff;
text-decoration: none;
text-indent: 2em;
/* 小技巧 */
line-height: 40px;
}
/* 2.鼠标经过a变换背景颜色 */
a:hover {
background-color: #ff6700;
}
</style>
</head>
<body>
<a href="#">手机 电话卡</a>
<a href="#">电视 盒子</a>
<a href="#">笔记本 平板</a>
<a href="#">出现 穿戴</a>
<a href="#">智能 路由器</a>
<a href="#">健康 儿童</a>
<a href="#">耳机 音响</a>
</body>
</html>
背景属性
背景颜色
background-color属性定义了元素的背景颜色
background-color:颜色值;
一般情况下元素背景颜色默认值是transparent(透明),我们也可以手动指定背景颜色为透明
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>背景颜色</title>
<style type="text/css">
div {
width: 200px;
height: 200px;
/* background-color: transparent; 透明的 清澈的 */
background-color: pink;
}
</style>
</head>
<body>
<div></div>
</body>
</html>
背景图片
background-image属性描述了元素的背景图像。实际开发常见于logo或者一些装饰性的小图片或者超大的背景图片,优点是非常便于控制位置(精灵图也是一种运用场景)
background-image:none | url (url)
参数值 | 作用 |
---|---|
none | 无背景图(默认的) |
url | 使用绝对或相对指定背景图像 |
背景平铺
background-repeat:repeat | no-repeat | repeat-x | repeat-y
参数值 | 作用 |
---|---|
repeat | 背景图像在纵向和横向上平铺(默认的) |
no-repeat | 背景图像不平铺 |
repeat-x | 背景图像在横向上平铺 |
repeat-y | 背景图像在纵向平铺 |
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>背景平铺</title>
<style type="text/css">
div {
width: 800px;
height: 800px;
background-color: pink;
background-image: url(../img/莱莎.jpg);
/* 1.背景图片不平铺 */
/* background-repeat: no-repeat; */
/* 2.默认的情况下,背景图片是平埔的 */
/* background-repeat: repeat; */
/* 3.沿着x轴平铺 */
/* background-repeat: repeat-x; */
/* 4.沿着y轴平铺 */
background-repeat: repeat-y;
/* 页面元素既可以添加背景颜色也可以添加背景图片 只不过背景图片会压住背景颜色 */
}
</style>
</head>
<body>
<div></div>
</body>
</html>
背景图片位置
background-position:x y;
参数代表的意思是:x坐标和y坐标,可以使用方位名词或者精神单位
参数值 | 说明 |
---|---|
length | 百分数|有浮点数字和单位标识符组成的长度值 |
position | top | center | bottom | left | center | right 方位名词 |
参数是方位名词
- 如果指定的两个值都是方位名词,则两个值前后顺序无关,比如left top 和 top left 效果一致
- 如果只指定了一个方位名词,另一个值省略,则第二个值默认居中对齐
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>背景位置-方位名词</title>
<style type="text/css">
div {
width: 600px;
height: 600px;
background-color: pink;
background-image: url(../img/莱莎.jpg);
background-repeat: no-repeat;
/* background-position: 方位名词; */
/* background-position: center top; */
/* background-position: right center; */
/* 如果是方位名词 right center 和 center right 效果是等价的 跟顺序没有关系 */
/* background-position: center right; */
/* 此时 水平一定是靠右侧对齐 第二个参数省略y轴是垂直居中显示的 */
/* background-position: right; */
/* 此时 第一个参数一定是top y轴 顶部对齐 第二个参数省略x轴是水平居中显示的 */
background-position: top;
}
</style>
</head>
<body>
<div></div>
</body>
</html>
若想图片水平方向与垂直方向同时居中
/* 水平与垂直同时居中 */
background-position: center;
参数是精确单位
- 如果参数是精确坐标,那么第一个肯定是x坐标,第二个一定是y坐标
- 如果只指定一个数值,那该数值一定是x坐标,另一个默认垂直居中
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>背景位置-精确单位</title>
<style type="text/css">
div {
width: 600px;
height: 600px;
background-color: pink;
background-image: url(../img/莱莎.jpg);
background-repeat: no-repeat;
/* 20px 50px; x轴一定是20 y轴一定是50 */
/* background-position: 20px 50px; */
/* background-position: 50px 20px; 与20 50 的不同 */
background-position: 20px;
}
</style>
</head>
<body>
<div></div>
</body>
</html>
参数是混合单位
如果指定的两个值是精确单位和方位名词混合使用,则第一个值是x坐标,第二个值是y坐标
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>背景位置-混合单位</title>
<style type="text/css">
div {
width: 600px;
height: 600px;
background-color: pink;
background-image: url(../img/莱莎.jpg);
background-repeat: no-repeat;
/* 20px center 一定是x为20 y是center 等价于 background-position:20px; */
/* background-position: 20px center; */
/* 水平是居中对齐,垂直是20px */
background-position: center 20px;
}
</style>
</head>
<body>
<div></div>
</body>
</html>
背景图片案例
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>超大背景图片案例</title>
<style type="text/css">
body {
background-image: url(../img/王者背景图.png);
background-repeat: no-repeat;
background-position: center top;
}
</style>
</head>
<body>
</body>
</html>
背景图像固定(背景附着)
background-attachment属性设置背景图像是否固定或者随着页面的其余部分滚动,后期可以制作视差滚动的效果。
background-attachement:scroll | fixed
参数 | 作用 |
---|---|
scroll | 背景图像是随对象内容滚动 |
fixed | 背景图像固定 |
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>背景固定</title>
<style type="text/css">
body {
background-image: url(../img/琴瑟仙女%20娑娜1920x1080.jpg);
background-repeat: no-repeat;
background-position: center top;
color: deeppink;
font-size: 20px;
}
</style>
</head>
<body>
<p>最爱琴女E</p>
<p>最爱琴女E</p>
<p>最爱琴女E</p>
<p>最爱琴女E</p>
<p>最爱琴女E</p>
<p>最爱琴女E</p>
<p>最爱琴女E</p>
<p>最爱琴女E</p>
<p>最爱琴女E</p>
<p>最爱琴女E</p>
<p>最爱琴女E</p>
<p>最爱琴女E</p>
<p>最爱琴女E</p>
<p>最爱琴女E</p>
<p>最爱琴女E</p>
<p>最爱琴女E</p>
<p>最爱琴女E</p>
<p>最爱琴女E</p>
<p>最爱琴女E</p>
<p>最爱琴女E</p>
<p>最爱琴女E</p>
<p>最爱琴女E</p>
<p>最爱琴女E</p>
<p>最爱琴女E</p>
<p>最爱琴女E</p>
<p>最爱琴女E</p>
<p>最爱琴女E</p>
<p>最爱琴女E</p>
<p>最爱琴女E</p>
<p>最爱琴女E</p>
<p>最爱琴女E</p>
<p>最爱琴女E</p>
</body>
</html>
设置固定后效果如下
body {
background-image: url(../img/琴瑟仙女%20娑娜1920x1080.jpg);
background-repeat: no-repeat;
background-position: center top;
/* 把背景图片固定住 */
background-attachment: fixed;
color: deeppink;
font-size: 20px;
}
背景属性复合写法
为了简化背景属性的代码,我们可以将这些属性合并简写在同一个属性background中,从而节约代码量
使用简写属性是,没有特定的书写顺序,一般习惯约定顺序如下:
background:背景颜色 背景图片地址 背景平铺 背景图像滚动 背景图片位置;
background: transparent url(image.jpg) repeat-y fixed top;
body {
/* background-image: url(../img/琴瑟仙女%20娑娜1920x1080.jpg);
background-repeat: no-repeat;
background-position: center top;
把背景图片固定住
background-attachment: fixed; */
color: deeppink;
font-size: 20px;
background: black url(../img/琴瑟仙女%20娑娜1920x1080.jpg) no-repeat fixed center top;
}
背景颜色半透明
CSS3为我们提供了背景颜色半透明的效果
background: rgba(0,0,0,0.3);
- 最后一个参数是aipha透明度,取值范围在0~1之间
- 0.3的0可以省略,写为background:rgba(0,0,0,.3);
- 注意:背景半透明是指盒子背景半透明,盒子里面的内容不受影响
背景总结
属性 | 作用 | 值 |
---|---|---|
background-color | 背景颜色 | 预定义的颜色值/十六进制/RGB代码 |
background-image | 背景图片 | url(图片路径) |
background-repeat | 是否平铺 | repeat/no-repeat/repeat-x/repeat-y |
background-position | 背景位置 | length/position 分别是x和y坐标 |
background-attachment | 背景附着 | scroll(背景滚动)/ fixed(背景固定) |
背景简写 | 书写更简单 | 背景颜色 背景图片地址 背景平铺 背景滚动 背景位置 |
背景色半透明 | 背景颜色半透明 | background:rgba(0,0,0,0.3); 后面必须是4个值 |
CSS的三大特性
CSS有三个非常重要的特性:层叠性、继承性、优先级。
层叠性
相同选择器给设置相同的样式,此时一个样式就会覆盖(层叠)另一种冲突的样式。层叠性主要是解决样式冲突的问题
层叠性原则:
- 样式冲突,遵循的原则就是就近原则,哪个样式离结构近,就执行哪个样式
- 样式不冲突,不会层叠
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>CSS层叠性</title>
<style type="text/css">
div {
color: red;
font-size: 12px;
}
div {
/* 覆盖了上面的red */
color: pink;
}
</style>
</head>
<body>
<div>XXXXX,XXXXX</div>
</body>
</html>
运行结果:XXX为粉色字体,大小12px
继承性
子标签会继承父标签的某些样式,如文本颜色和字母。简单的理解就是:子承父业
- 恰当地使用继承可以简化代码,降低CSS样式的复杂性
- 子元素可以继承父元素的样式(text-,font-,line-这些元素开头的可以继承,以及color属性)
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>CSS继承性</title>
<style type="text/css">
div {
color: deeppink;
font-size: 14px;
}
</style>
</head>
<body>
<div>
<p>龙生龙,凤生凤,老鼠的儿子会打洞</p>
</div>
</body>
</html>
运行结果:字体为粉色字体,大小14px
优先级
当同一个元素指定多个选择器,就会有优先级的产生
- 选择器相同,则执行层叠性
- 选择器不同,则根据选择器权重执行
选择器 | 选择器权重 |
---|---|
继承或者* | 0,0,0,0 |
元素选择器 | 0,0,0,1 |
类选择器,伪类选择器 | 0,0,1,0 |
ID选择器 | 0,1,0,0 |
行内样式表style | 1,0,0,0 |
!important 重要的 | 无穷大 |
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>CSS优先级</title>
<style type="text/css">
div { color: deeppink !important; }
.test { color: red; }
#demo { color: green; }
</style>
</head>
<body>
<div class="test" id="demo" style="color: purple;">你笑起来真好看</div>
</body>
</html>
运行结果:字体为粉色字体
盒子模型
网页布局的核心本质:就是利用CSS摆盒子
盒子模型组成
边框border
语法:
border:border-width || border-style || border-color
属性 | 作用 |
---|---|
border-width | 定义边框粗细,单位是px |
border-style | 边框的样式 |
border-color | 边框颜色 |
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>盒子模型之边框border</title>
<style type="text/css">
div {
width: 300px;
height: 200px;
/* border-width 边框的粗细,一般情况下都用px */
border-width: 5px;
/* border-style 边框的样式 solid 实线边框 */
border-style: solid;
/* border-color 边框的颜色 */
border-color: deeppink;
}
</style>
</head>
<body>
<div></div>
</body>
</html>
/* border-style 边框的样式 dashed 虚线边框 */
border-style: dashed;
/* border-style 边框的样式 dotted 点线边框 */
border-style: dotted;
边框的复合写法
border:1px solid red; 没有顺序
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>边框的复合写法</title>
<style type="text/css">
div {
width: 300px;
height: 200px;
/* border-width: 5px;
border-style: solid;
border-color:deeppink; */
/* 边框的复合写法 简写 */
border: 5px solid deeppink;
}
</style>
</head>
<body>
<div></div>
</body>
</html>
边框分开写法
border-top:1px solid red; /* 只设定上边框,其余同理 */
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>边框的符合写法</title>
<style type="text/css">
div {
width: 300px;
height: 200px;
border-top: 5px solid deeppink;
border-bottom: 10px dashed purple;
}
</style>
</head>
<body>
<div></div>
</body>
</html>
练习
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>边框的练习</title>
<style type="text/css">
/* 请给一个 200*200 的盒子,设置上边框为红色,其余边框为蓝色 */
div {
width: 200px;
height: 200px;
/* border-top: 1px solid red;
border-bottom: 1px solid blue;
border-left: 1px solid blue;
border-right: 1px solid blue; */
/* border包含四条边 */
border: 1px solid blue;
/* 层叠性 只是层叠了上边框 */
/* 若下面的语句在上面,上边框效果还是蓝色 */
border-top: 1px solid red;
}
</style>
</head>
<body>
<div></div>
</body>
</html>
表格细线边框
border-collapse属性控制浏览器绘制表格边框的方式。它控制相邻单元格的边框。
border-collapse:collapse;
- collapse单词是合并的意思
- border-collapse:collapse;表示相邻边框合并在一起
内边距
padding属性用于设置内边距,即边框与内容之间的距离
属性 | 作用 |
---|---|
padding-left | 左内边距 |
padding-right | 右内边距 |
padding-top | 上内边距 |
padding-bottom | 下内边距 |
padding复合属性
值的个数 | 表达意思 |
---|---|
padding:5px; | 1个值,代表上下左右都有5像素内边距 |
padding:5px 10px; | 2个值,代表上下内边距是5像素,左右内边距是10像素 |
padding:5px 10px 20px; | 3个值,代表上内边距是5像素,左右内边距是10像素,下内边距是20像素 |
padding:5px 10px 20px 30px; | 4个值,代表上是5像素,右是10像素,下是20像素,左是30像素,顺时针 |
外边距
margin属性用于设置外边距,即控制盒子和盒子之间的距离
属性 | 作用 |
---|---|
margin-left | 左外边距 |
margin-right | 右外边距 |
margin-top | 上外边距 |
margin-bottom | 下外边距 |
margin简写方式代表的意义跟padding完全一致
外边距可以让块级盒子水平居中,但是必须满足两个条件:
- 盒子必须指定了宽度(width)
- 盒子左右的外边距都设置为auto
.header { width:96px;margin:0 auto; }
常见的写法,以下三种都可以:
- margin-left:auto; margin-right:auto;
- margin:auto;
- margin:0 auto;
注意:以上方法是让块级元素水平居中,行内元素或者行内块元素水平居中给其父元素添加text-align:center即可
外边距合并
使用margin定义块元素的垂直外边距时,可能会出现外边距的合并
相邻块元素垂直外边距的合并
嵌套块元素垂直外边距的塌陷
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>外边距合并-嵌套块元素垂直外边距塌陷</title>
<style type="text/css">
.father {
width: 400px;
height: 400px;
background-color: purple;
}
.son {
width: 200px;
height: 200px;
background-color: pink;
}
</style>
</head>
<body>
<div class="father">
<div class="son"></div>
</div>
</body>
</html>
<style type="text/css">
.father {
width: 400px;
height: 400px;
background-color: purple;
margin-top: 50px;
/* 方案1
border: 1px solid red;
border: 1px solid transparent; */
/* 方案2
padding: 1px; */
/* 方案3 */
overflow: hidden;
}
.son {
width: 200px;
height: 200px;
background-color: pink;
margin-top: 100px;
}
</style>
清除内外边距
网页元素很多都带有默认的内外边距,而且不同浏览器默认的也不一致。因此我们在布局前,首先要清除一下网页元素的内外边距。
* {
padding:0; /*清除内边距*/
margin:0; /*清除外边距*/
}
注意:行内元素为了照顾兼容性,尽量只设置左右内外边距,不要设置上下内外边距。但是转换为块级和行内块元素就可以了
案例
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>产品模块</title>
<style type="text/css">
* {
margin: 0;
padding: 0;
}
body {
background-color: #f5f5f5;
}
a {
color: #333;
text-decoration: none;
}
.box {
width: 298px;
height: 400px;
background-color: #fff;
/* 让块级的盒子水平居中对齐 */
margin: 100px auto;
}
.box img {
/* 图片的宽度和父亲一样宽 */
width: 100%;
}
.review {
height: 100px;
font-size: 14px;
/* 因为这个段落没有width属性,所有padding不会撑开盒子的宽度 */
padding: 0 50px;
margin-top: 30px;
}
.appraise {
font-size: 12px;
color: #b0b0b0;
margin-top: 20px;
padding: 0 30px;
}
.info {
font-size: 14px;
margin-top: 15px;
padding: 0 30px;
}
.info h4 {
display: inline-block;
font-weight: 400;
font-size: 14px;
}
.info em {
font-style: normal;
}
.info span {
color: #FF6700;
}
</style>
</head>
<body>
<div class="box">
<a href="#"><img src="../img/产品模块案例图.jpg" /></a>
<p class="review">一个充满个性的机械世界,2B裙子的摆动,让人沉迷其中无法自拔~</p>
<div class="appraise">来自于阿波的评价</div>
<div class="info">
<h4><a href="#">游戏:《尼尔:机械纪元》</a></h4>
<em>|</em>
<span>199.9元</span>
</div>
</div>
</body>
</html>
新知识点:去掉li前面的项目符号(小圆点)
list-style:none;
圆角边框(重点)
在CSS3中,新增了圆角边框样式,这样我们的盒子就可以变圆角了
语法:
border-radius:length;
radius半径(圆的半径)原理:圆与边框的交集形成圆角效果
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>圆角边框</title>
<style type="text/css">
.yuanxing {
width: 200px;
height: 200px;
background-color: pink;
/* border-radius: 100px; */
/* 50%就是宽度和高度的一半 等价于100px */
border-radius: 50%;
}
.juxing {
width: 300px;
height: 100px;
background-color: pink;
border-radius: 50px;
}
.radius {
width: 200px;
height: 200px;
/* border-radius: 10px 20px 30px 40px; */
border-radius: 10px 40px;
background-color: pink;
}
</style>
</head>
<body>
1.圆的做法:
<div class="yuanxing"></div>
2圆角矩形的做法:
<div class="juxing"></div>
3可以设置不同的圆角:
<div class="radius"></div>
</body>
</html>
- 参数值可以为数值或百分比的形式
- 如果是正方形,想要设置为一个圆,把数值修改为高度或者宽度的一半即可,或者直接写50%
- 如果是个矩形,设置为高度的一半就可以做
- 该属性是一个简写属性,可以跟四个值,分别代表左上角,右上角,右下角,左下角
盒子阴影(重点)
CSS3中新增了盒子阴影,我们可以使用box-shadow属性为盒子添加阴影
语法:
box-shadow:h-shadow v-shadow blur spread color inset;
值 | 描述 |
---|---|
h-shadow | 必需,水平阴影的位置,允许负值 |
v-shadow | 必需,垂直阴影的位置,允许负值 |
blur | 可选,模糊距离 |
spread | 可选,阴影的尺寸 |
color | 可选,阴影的颜色 |
inset | 可选,将外部阴影(outset)改为内部阴影 |
注意:
- 默认的是外阴影(outset),但是不可以写这个给单词,否则会导致阴影无效
- 盒子阴影不占空间,不会影响其他盒子排列
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>盒子阴影</title>
<style type="text/css">
div {
width: 200px;
height: 200px;
background-color: pink;
margin: 100px auto;
/* box-shadow: 10px 10px; */
}
div:hover {
box-shadow: 10px 10px 10px -4px rgba(0,0,0,0.3);
}
/* 原先盒子没有影子,当我们鼠标经过盒子就添加阴影效果 */
</style>
</head>
<body>
<div></div>
</body>
</html>
文字阴影
在CSS3中,我们可以使用text-shadow属性将阴影应用于文本
语法:
text-shadow:h-shadow v-shadow blur color;
值 | 描述 |
---|---|
h-shadow | 必需,水平阴影的位置允许负值 |
v-shadow | 必需,垂直阴影的位置允许负值 |
blur | 可选,模糊的距离 |
color | 可选,阴影的颜色 |
浮动
CSS提供了三种传统布局方式:
- 普通流(标准流)
- 浮动
- 定位
1.标准流(普通流/文档流)
所谓的标准流:就是标签按照规定好默认方式排列
- 块级元素会独占一行,从上向下顺序排列
- 行内元素会按照顺序,从左到右顺序排列,碰到父元素边缘则自动换行
2.浮动
float属性用于创建浮动框,将其移动到一边,直到左边缘触及包含块或另一个浮动框的边缘
选择器 { float:属性值; }
属性值 | 描述 |
---|---|
none | 元素不浮动(默认值) |
left | 元素向左浮动 |
right | 元素向右浮动 |
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>什么是浮动</title>
<style type="text/css">
.left,
.right {
float: left;
width: 200px;
height:200px;
background-color: pink;
}
</style>
</head>
<body>
<div class="left">左青龙</div>
<div class="right">右白虎</div>
</body>
</html>
浮动特性(重点)
加了浮动之后的元素,会具有很多特性,需要我们掌握
- 浮动元素会脱离标准流(脱标)
- 浮动的元素会一行内显示并且元素顶部对齐
- 浮动的元素会具有行内块元素的特性
设置了浮动的元素最重要特性:
- 脱离标准普通流的控制(浮)移动到指定位置(动),(俗称脱标)
- 浮动的盒子不再保留原先的位置
粉色盒子加浮动前
粉色盒子加浮动后
浮动元素一行显示(多个盒子设置浮动)
添加浮动前
添加浮动后
浮动具有行内块元素特性
任何元素都可以浮动,不管原先是什么模式的元素,添加浮动之后具有行内块元素相似的特性
- 如果块级盒子没有设置宽度,默认宽度和父级一样宽,但是添加浮动后,它的大小根据内容来决定
- 浮动的盒子中间是没有缝隙的,是紧挨着一起的
- 行内元素同理
布局案例
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>浮动元素搭配标准流父盒子</title>
<style type="text/css">
.box {
width: 1200px;
height: 460px;
background-color: pink;
margin: 0 auto;
}
.left {
float: left;
width: 230px;
height: 460px;
background-color: purple;
}
.right {
float: left;
width: 970px;
height: 460px;
background-color: skyblue;
}
</style>
</head>
<body>
<div class="box">
<div class="left">左侧</div>
<div class="right">右侧</div>
</div>
</body>
</html>
布局案例2
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>浮动元素搭配标准流父盒子2</title>
<style type="text/css">
* {
margin: 0;
padding: 0;
}
li {
list-style: none;
}
.box {
width: 1226px;
height: 285px;
background-color: pink;
margin: 0 auto;
}
.box li {
width: 296px;
height: 285px;
background-color: purple;
float: left;
margin-right: 14px;
}
/* 这里必须写.box .last 要注意权重的问题 */
.box .last {
margin-right: 0;
}
</style>
</head>
<body>
<ul class="box">
<li>1</li>
<li>2</li>
<li>3</li>
<li class="last">4</li>
</ul>
</body>
</html>
案例3
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>浮动布局练习3</title>
<style type="text/css">
.box {
width: 1226px;
height: 615px;
background-color: pink;
margin: 0 auto;
}
.left {
float: left;
width: 234px;
height: 615px;
background-color: purple;
}
.right {
float: left;
width: 992px;
height: 615px;
background-color: skyblue;
}
.right>div {
float: left;
width: 234px;
height: 300px;
background-color: pink;
margin-left: 14px;
margin-bottom: 14px;
}
</style>
</head>
<body>
<div class="box">
<div class="left">左青龙</div>
<div class="right">
<div>1</div>
<div>2</div>
<div>3</div>
<div>4</div>
<div>5</div>
<div>6</div>
<div>7</div>
<div>8</div>
</div>
</div>
</body>
</html>
常见网页布局
浮动布局注意点
- 浮动和标准流的父盒子搭配
先用标准流的父元素排列上下位置,之后内部元素采取浮动排列左右位置
- 一个元素浮动了,理论上其余的兄弟元素也要浮动
一个盒子里面有多个盒子,如果其中一个盒子浮动了,那么其他兄弟也应该浮动,以防止引起问题
浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流
清除浮动
本质
- 清除浮动的本质是清除浮动元素造成的影响
- 如果父盒子本身有高度,则不需要清除浮动
- 清除浮动之后,父级就会根据浮动的子盒子自动检测高度。父级有了高度,就不会影响下面的标准流了
语法:
选择器{ clear:属性值; }
属性值 | 描述 |
---|---|
left | 不允许左侧有浮动元素(清除左侧浮动的影响) |
right | 不允许右侧有浮动元素(清除右侧浮动的影响) |
both | 同时清除左右两侧浮动的影响 |
实际工作中,几乎只用clear:both;
清除浮动的策略是:闭合浮动
清除浮动的方法
- 额外标签法也称为隔墙法,是w3c推荐的做法
- 父级添加overflow属性
- 父级添加after伪元素
- 父级添加双伪元素
额外标签法
额外标签法会在浮动元素末尾添加一个空的标签。例如< div style=“clear:both” >< /div>,或者其他标签(如:br标签等)
注意:要求这个新的空标签必须是块级元素
父级添加overflow
给父级添加overflow属性,将其属性设置为hidden、auto或scroll
.box {
/* 清除浮动 */
overflow: hidden;
width: 800px;
border: 1px solid blue;
margin: 0 auto;
}
:after伪元素法
:after方式是额外标签法的升级版,也是给父元素添加
.clearfix:after {
content:"";
display: block;
height: 0;
clear: both;
visibility: hidden;
}
.clearfix { /* IE6、7专有 */
*zoom: 1;
}
.box {
width: 800px;
border: 1px solid blue;
margin: 0 auto;
}
<div class="box clearfix"></div>
双伪元素清除浮动
也是给父元素添加
.clearfix:before,.clearfix:after {
content:"";
display:table;
}
.clearfix:after {
clear:both;
}
.clearfix {
*zoom:1;
}
<div class="box clearfix"></div>
总结
为何需要清除浮动?
- 父级没高度
- 子盒子浮动了
- 影响下面布局了
清除浮动的方式 | 优点 | 缺点 |
---|---|---|
额外标签法 | 通俗易懂,书写方便 | 添加许多无意义的标签,结构化较差 |
父级overflow:hidden; | 书写简单 | 溢出隐藏 |
父级after伪元素 | 结构语义化正确 | 由于IE6、7不支持:after,兼容问题 |
父级双伪元素 | 结构语义化正确 | 由于IE6、7不支持:after,兼容问题 |
3.定位
将盒子定在某一个位置,所以定位也是在摆放盒子,按照定位的方式移动盒子
定位 = 定位模式 + 边偏移
定位模式用于指定一个元素在文档中的定位方式,边偏移则决定了该元素的最终位置
定位模式
定位模式决定元素的定位方式,它通过CSS的position属性来设置,其值可以分为四个:
值 | 语义 |
---|---|
static | 静态定位 |
relative | 相对定位 |
absolute | 绝对定位 |
fixed | 固定定位 |
边偏移
边偏移就是定位的盒子移动到最终位置,有4个属性
边偏移属性 | 示例 | 描述 |
---|---|---|
top | top: 80px | 顶端偏移量,定义元素相对于其父元素上边线的距离 |
bottom | bottom: 80px | 底部偏移量,定义元素相对于其父元素下边线的距离 |
left | left: 80px | 左侧偏移量,定义元素相对于其父元素左边线的距离 |
right | right: 80px | 右侧偏移量,定义元素相对于其父元素右边线的距离 |
静态定位static(了解)
静态定位是元素的默认定位方式,无定位的意思
- 静态定位按照标准流特性摆放位置,它没有边偏移
- 静态定位在布局时很少用到
相对定位relative(重要)
相对定位是元素在移动位置的时候,是相对于它原来的位置来说的(自恋型)
相对定位的特点:(务必记住)
- 它是相对于自己原来的位置来移动的(移动位置的时候参照点是自己原来的位置)
- 原来在标准流的位置继续占有,后面的盒子仍然以标准流的方式对待它。(不脱标,继续保留原来的位置)
没加相对定位
.box1 {
width: 200px;
height: 200px;
background-color: pink;
}
.box2 {
width: 200px;
height: 200px;
background-color: skyblue;
}
加入相对定位
.box1 {
position: relative;
top: 100px;
left: 100px;
width: 200px;
height: 200px;
background-color: pink;
}
绝对定位absolute(重要)
绝对定位是元素在移动位置的时候,是相对于它祖先元素来说的(拼爹型)
绝对定位的特点:(务必记住)
- 如果没有祖先元素或者祖先元素没有定位,则以浏览器为准定位(Document文档)
- 如果祖先元素有定位(相对、绝对、固定定位),则以最近一级的有定位祖先元素为参考点移动位置
- 绝对定位不再占有原先的位置(脱标)
子绝父相
意思是:子级是绝对定位的话,父级要用相对定位
- 子级绝对定位,不会占有位置,可以放到父盒子里面的任何一个地方,不会影响其他的兄弟盒子
- 父盒子不需要加定位限制子盒子在父盒子内显示
- 父盒子布局时,需要占有位置,因此父亲只能是相对定位
这就是子绝父相的由来,所以相对定位经常用来作为绝对定位的父级
总结:因为父级需要占有位置,因此都是相对定位,子盒子不需要占有位置,则是绝对定位
当然,子绝父相不是永远不变的,如果父元素不需要占有位置,子绝父绝也会遇到
固定定位fixed(重要)
固定定位是元素固定于浏览器可视区的位置
特点:(务必记住)
- 以浏览器的可视窗口为参照点移动元素
跟父元素没有任何关系
不随滚动条滚动
- 固定定位不再占有原先的位置
固定定位也是脱标的,其实固定定位也可以看做是一种特殊的绝对定位
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>固定定位</title>
<style type="text/css">
.dj {
position: fixed;
top: 100px;
left: 40px;
}
</style>
</head>
<body>
<div class="dj">
<img src="../img/r_dj.png" >
</div>
<p>啦啦啦啦啦啦啦啦啦</p>
<p>啦啦啦啦啦啦啦啦啦</p>
<p>啦啦啦啦啦啦啦啦啦</p>
<p>啦啦啦啦啦啦啦啦啦</p>
<p>啦啦啦啦啦啦啦啦啦</p>
<p>啦啦啦啦啦啦啦啦啦</p>
<p>啦啦啦啦啦啦啦啦啦</p>
<p>啦啦啦啦啦啦啦啦啦</p>
<p>啦啦啦啦啦啦啦啦啦</p>
<p>啦啦啦啦啦啦啦啦啦</p>
<p>啦啦啦啦啦啦啦啦啦</p>
<p>啦啦啦啦啦啦啦啦啦</p>
<p>啦啦啦啦啦啦啦啦啦</p>
<p>啦啦啦啦啦啦啦啦啦</p>
<p>啦啦啦啦啦啦啦啦啦</p>
<p>啦啦啦啦啦啦啦啦啦</p>
<p>啦啦啦啦啦啦啦啦啦</p>
<p>啦啦啦啦啦啦啦啦啦</p>
<p>啦啦啦啦啦啦啦啦啦</p>
<p>啦啦啦啦啦啦啦啦啦</p>
<p>啦啦啦啦啦啦啦啦啦</p>
<p>啦啦啦啦啦啦啦啦啦</p>
<p>啦啦啦啦啦啦啦啦啦</p>
<p>啦啦啦啦啦啦啦啦啦</p>
</body>
</html>
固定定位小技巧:固定在版心右侧位置
小算法:
- 让固定定位的盒子 left:50% 走到浏览器可视区(也可以看做是版心)的一半位置
- 让固定定位的盒子 margin-left 版心宽度的一半距离,多走版心宽度的一半位置就可以让固定定位的盒子贴着版心右侧对齐了
.w {
width: 800px;
height: 1400px;
background-color: pink;
margin: 0 auto;
}
.fixed {
width: 50px;
height: 150px;
background-color: skyblue;
}
.w {
width: 800px;
height: 1400px;
background-color: pink;
margin: 0 auto;
}
.fixed {
position: fixed;
/* 1.走浏览器宽度的一半 */
left: 50%;
/* 2.利用 margin 走版心盒子宽度的一半距离 */
margin-left: 405px;
width: 50px;
height: 150px;
background-color: skyblue;
}
粘性定位(了解)
语法:
选择器 { position: sticky; top: 10px; }
特点:
- 以浏览器的可视窗口为参照点移动元素(固定定位特点)
- 粘性定位占有原先的位置(相对定位特点)
- 必须添加top、left、right、bottom其中一个才有效
跟页面滚动搭配使用,兼容性较差,IE不支持
定位总结
定位模式 | 是否脱标 | 移动位置 | 是否常用 |
---|---|---|---|
static静态定位 | 否 | 不能使用边偏移 | 很少 |
relative相对定位 | 否(占有位置) | 相对于自身位置移动 | 常用 |
absolute绝对定位 | 是(不占有位置) | 带有定位的父级 | 常用 |
fixed固定定位 | 是(不占有位置) | 浏览器可视区 | 常用 |
sticky粘性定位 | 否(占有位置) | 浏览器可视区 | 当前阶段少 |
定位叠放次序z-index
在使用定位布局时,可能会出现盒子重叠的情况。此时,可以使用z-index来控制盒子的前后次序(z轴)
选择器 { z-index:1; }
- 数值可以是正整数、负整数或0,默认是auto,数值越大,盒子越靠上
- 如果属性值相同,则按照书写顺序,后来居上
- 数字后面不能加单位
- 只有定位的盒子才有z-index属性
定位扩展
绝对定位的盒子居中
加了绝对定位的盒子不能通过 margin:0 auto 水平居中,但是可以通过以下方法实现水平和垂直居中
- left:50% ,让盒子的左侧移动到父级元素的水平中心位置
- margin-left:-100px ,让盒子向左移动自身宽度的一半
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>绝对定位水平垂直居中</title>
<style type="text/css">
.box {
position: absolute;
/* 1.left 走 50% 父容器宽度的一半 */
left: 50%;
/* 2.margin 负值 往左边走 自己盒子宽度的一半 */
margin-left: -100px;
top: 50%;
margin-top: -100px;
width: 200px;
height: 200px;
background-color: pink;
}
</style>
</head>
<body>
<div class="box"></div>
</body>
</html>
定位特殊特性
绝对定位、固定定位也和浮动类似
- 行内元素添加绝对或者固定定位,可以直接设置高度和宽度
- 块级元素添加绝对或者固定定位,如果不给宽度或者高度,默认大小是内容的大小
脱标的盒子不会触发外边距塌陷
浮动元素、绝对定位(固定定位)元素都不会触发外边距合并的问题
绝对定位(固定定位)会完全压住盒子
浮动元素不同,只会压住它下面标准流的盒子,但是不会压住下面标准流盒子里面的文字(图片)
但是绝对定位(固定定位)会压住下面标准流所有的内容
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>定位会完全压住标准流盒子内容</title>
<style type="text/css">
.box {
/* 1.浮动的元素不会压住下面标准流的文字 */
/* float:left; */
/* 2.绝对定位(固定定位)会压住下面标准流所有的内容 */
position: absolute;
width: 150px;
height: 150px;
background-color: pink;
}
</style>
</head>
<body>
<div class="box"></div>
<p>阁下何不随风起,扶摇直上九万里</p>
</body>
</html>
网页布局总结
通过盒子模型,清楚知道大部分html标签是一个盒子
通过css浮动、定位可以让每个盒子排列成网页
一个完整的网页,是标准流、浮动、定位一起完成布局的,每个都有自己的专门用法
-
标准流
可以让盒子上下排列或者左右排列,垂直的块级盒子显示就用标准流布局
-
浮动
可以让多个元素一行显示或者左右对齐盒子,多个块级盒子水平显示就用浮动布局
-
定位
定位最大的特点是有层叠的概念,就是可以让多个盒子前后叠压来显示,如果元素自由在某个盒子内移动就用定位布局
元素的显示与隐藏
本质:让一个元素在页面种隐藏或者显示出来
display 属性
用于设置一个元素应如何显示
- display:none; 隐藏对象
- display:block; 除了转换为块级元素之外,同时还有显示元素的意思
display隐藏元素后,不再占有原来的位置
后面应用及其广泛,搭配js可以做很多网页特效
visibility 可见性
用于指定一个元素应可见还是隐藏
- visibility:visible; 元素可视
- visibility:hidden; 元素隐藏
visibility隐藏元素后,继续占有原来的位置
如果隐藏元素想要原来的位置,就用visibility:hidden
如果隐藏元素不想要原来的位置,就用display:none(用处更多 重点)
overflow 溢出
overflow属性指定了如果内容溢出一个元素的框时,会发生什么
属性值 | 描述 |
---|---|
visible | 不剪切内容也不添加滚动条 |
hidden | 不显示超过对象尺寸内容,超出的部分隐藏掉 |
scroll | 不管超出内容否,总是显示滚动条 |
auto | 超出自动显示滚动条,不超出不显示滚动条 |
一般情况下,我们都不想溢出的内容显示出来,因为溢出的部分会影响布局
但是如果有定位的盒子,请慎用overflow:hidden 因为它会隐藏多余的部分
总结
- display 显示隐藏元素,但是不保留位置
- visibility 显示隐藏元素,但是保留原来的位置
- overflow 溢出显示隐藏,但是只是对于溢出的部分处理
显示隐藏遮罩案例
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style type="text/css">
.tudou {
position: relative;
width: 222px;
height: 240px;
background-color: pink;
margin: 30px auto;
}
.tudou img {
width: 100%;
height: 100%;
}
.mask {
display: none;
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: rgba(0,0,0,.4) url(../img/850354.jpg) no-repeat center;
}
/* 当我们鼠标经过了这个盒子,就让遮罩层显示出来 */
.tudou:hover .mask {
/* 显示元素 */
display: block;
}
</style>
</head>
<body>
<div class="tudou">
<div class="mask"></div>
<img src="../img/土豆案例图.jpg"
</div>
</body>
</html>
精灵图
精灵技术目的:为了有效地减少服务器接收和发送请求的次数,提高页面的加载速度
使用:
- 精灵图主要针对于小的背景图片使用
- 主要借助于背景位置来实现—background-position
- 一般情况下精灵图都是负值(千万注意网页中的坐标:x轴右边走是正值,左边走是负值,y轴同理)
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>精灵图使用</title>
<style type="text/css">
.box1 {
width: 60px;
height: 60px;
background-color: pink;
margin: 100px auto;
background: url(../img/sprites.png);
background-position: -182px 0;
}
.box2 {
width: 27px;
height: 25px;
background-color: yellow;
margin: 200px;
background: url(../img/sprites.png) no-repeat -155px -106px;
}
</style>
</head>
<body>
<div class="box1"></div>
<div class="box2"></div>
</body>
</html>
精灵图
字体图标
使用场景:主要用于显示网页中通常、常用的一些小图标
精灵图有诸多优点,但是缺点也很明显
- 图片文件比较大
- 图片本身放大和缩小会失真
- 一旦图片制作完毕想要更换非常复杂
此时,字体图标(iconfont)的出现解决了以上问题,字体图标展示的是图标,本质属于字体
优点
- 轻量级:一个图标字体要比一系列图像小。一旦字体加载了,图标就会马上渲染出来,减少了服务器请求
- 灵活性:本质其实是文字,可以很随意的改变颜色、产生阴影、透明效果、旋转等
- 兼容性:几乎支持所有的浏览器
注意:字体图标不能替代精灵技术,只是对工作中图标部分技术的提升和优化
总结
- 如果遇到一些结构和样式比较简单的小图标,就用字体图标
- 如果遇到一些结构和样式复杂一点的小图片,就用精灵图
字体图标推荐下载网站
- Icomoon字库:http://icomoon.jo
- 阿里iconfont字库:http://www.iconfont.cn/
使用
- 把下载包里面的fonts文件夹放入页面根目录下
- 在CSS样式中全局声明字体:简单理解把这些字体文件通过CSS引入到我们页面中,一定注意字体文件路径的问题
文件夹里面的style.css
@font-face {
font-family:'icomoon';
src: url('fonts/icomoon.eot?7kkyc2');
src: url('fonts/icomoon.eot?7kkyc2#iefix') format('embedded-opentype'),
url('fonts/icomoon.ttf?7kkyc2') format('truetype'),
url('fonts/icomoon.woff?7kkyc2') format('woff'),
url('fonts/icomoon.svg?7kkyc2#icomoon') format('svg');
font-weight:normal;
font-style:normal;
}
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>字体图标使用</title>
<style type="text/css">
/* 字体声明 */
@font-face {
font-family: 'icomoon';
src: url('fonts/icomoon.eot?iv11jt');
src: url('fonts/icomoon.eot?iv11jt#iefix') format('embedded-opentype'),
url('fonts/icomoon.ttf?iv11jt') format('truetype'),
url('fonts/icomoon.woff?iv11jt') format('woff'),
url('fonts/icomoon.svg?iv11jt#icomoon') format('svg');
font-weight: normal;
font-style: normal;
font-display: block;
}
span {
font-family: 'icomoon';
}
</style>
</head>
<body>
<span></span>
<span></span>
</body>
</html>
CSS三角
网页中常见一些三角形,使用CSS直接画出来就可以,不必做成图片或者字体图标
div {
width:0;
height:0;
line-height:0;
font-size:0;
border:50px solid transparent;
border-left-color:pink;
}
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>css三角制作</title>
<style type="text/css">
.box1 {
width: 0;
height: 0;
/* border: 10px solid pink; */
border-top: 10px solid pink;
border-right: 10px solid red;
border-bottom: 10px solid blue;
border-left: 10px solid green;
}
.box2 {
width: 0;
height: 0;
border: 50px solid transparent;
border-left-color: pink;
margin: 100px auto;
}
.jd {
position: relative;
width: 120px;
height: 249px;
background-color: pink;
}
.jd span {
position: absolute;
right: 15px;
top: -10px;
width: 0;
height: 0;
/* 为了照顾兼容性 */
line-height: 0;
font-size: 0;
border: 5px solid transparent;
border-bottom-color: pink;
}
</style>
</head>
<body>
<div class="box1"></div>
<div class="box2"></div>
<div class="jd">
<span></span>
</div>
</body>
</html>
用户界面样式
鼠标样式cursor
li { cursor:pointer; }
设置或检索在对象上移动的鼠标指针采用何种系统预定义的光标形状
属性值 | 描述 |
---|---|
default | 小白 默认 |
pointer | 小手 |
move | 移动 |
text | 文本 |
not-allowed | 禁止 |
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>用户界面样式-鼠标样式</title>
</head>
<body>
<ul>
<li style="cursor: default;">我是默认的小白鼠标样式</li>
<li style="cursor: pointer;">我是鼠标小手样式</li>
<li style="cursor: move;">我是鼠标移动样式</li>
<li style="cursor: text;">我是鼠标文本样式</li>
<li style="cursor: not-allowed;">我是鼠标禁止样式</li>
</ul>
</body>
</html>
轮廓线outline
给表单添加outline:0; 或者 outline:none; 样式之后,就可以去掉默认的蓝色边框
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style type="text/css">
input {
/* 取消表单轮廓 */
outline: none;
}
</style>
</head>
<body>
<!-- 取消表单轮廓 -->
<input type="text">
</body>
</html>
防止文本域拖拽
给文本域添加resize: none;样式之后,就可以防止拖拽文本域了
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style type="text/css">
textarea {
resize: none;
}
</style>
</head>
<body>
<!-- 防止拖拽文本域 -->
<textarea rows="10" cols="30"></textarea>
</body>
</html>
vertical-align属性应用
经常用于设置图片或者表单(行内块元素)和文字垂直对齐
官方解释:用于设置一个元素的垂直对齐方式,但是它只是针对于行内元素或者块元素有效
vertical-align:baseline | top | middle | bottom
值 | 描述 |
---|---|
baseline | 默认,元素放置在父元素的基线上 |
top | 把元素的顶端与行中最高元素的顶端对齐 |
middle | 把此元素放置在父元素的中部 |
bottom | 把元素的顶端与行中最低的元素的顶端对齐 |
图片、表单和文字对齐
图片、表单都属于行内块元素,默认的vertical-align是基线对齐
此时可以给图片、表单这些行内块元素的vertical-align属性设置为middle就可以让文字和图片垂直居中对齐了
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>利用vertical-align实现图片文字垂直居中对齐</title>
<style type="text/css">
img {
width: 400px;
height: 480px;
/* vertical-align:bottom; */
/* vertical-align:top; */
/* 让图片和文字垂直居中 */
vertical-align: middle;
}
textarea {
vertical-align: middle;
}
</style>
</head>
<body>
<img src="../img/琴女与阿狸.jpg" >琴女与阿狸
<br>
<textarea rows="10" cols="30"></textarea>请您留言
</body>
</html>
解决图片底部默认空白缝隙问题
bug:图片底侧会有一个空白缝隙,原因是行内块元素会和文字的基线对齐
主要解决方法有两种:
- 给图片添加vertical-align:middle | top | bottom等(提倡使用)
- 把图片转换为块级元素display:block;
溢出显示省略号
单行文本溢出显示省略号
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>单行文本溢出显示省略号</title>
<style type="text/css">
div {
width: 150px;
height: 80px;
background-color: pink;
margin: 100px auto;
/* 这个单词的意思是如果文字显示不开自动换行 */
/* white-space: normal; */
/* 1.这个单词的意思是如果文字显示不开也必须强制一行内显示 */
white-space: nowrap;
/* 2.溢出的部分隐藏起来 */
overflow: hidden;
/* 3.文字溢出的时候用省略号来显示 */
text-overflow: ellipsis;
}
</style>
</head>
<body>
<div>啥也不说了,此处省略一万字</div>
</body>
</html>
多行文本溢出显示省略号,有较大兼容性问题,适合于webkit浏览器或移动端(移动端大部分是webkit内核)
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style type="text/css">
div {
width: 150px;
height: 80px;
background-color: pink;
margin: 100px auto;
overflow: hidden;
text-overflow: ellipsis;
/* 弹性伸缩盒子模型显示 */
display: -webkit-box;
/* 限制在一个块元素显示的文本的行数 */
-webkit-line-clamp: 3;
/* 设置或检索伸缩盒对象的子元素的排列方式 */
-webkit-box-orient: vertical;
}
</style>
</head>
<body>
<div>啥也不说了,此处省略一万字,啥也不说了,此处省略一万aaa</div>
</body>
</html>
CSS初始化
不同浏览器对有些标签的默认值是不同的,为了消除不同浏览器对HTML文本呈现的差异,照顾浏览器的兼容,我们需要对CSS初始化
简单理解:CSS初始化是指重设浏览器的样式
每个网页都必须首先进行CSS初始化
Unicode编码字体:
- 黑体\9ED1\4F53
- 宋体\5B8B\4F53
- 微软雅黑\5FAE\8F6F\96C5\9ED1
* {
margin:0;padding:0
}
em,i {
font-style:normal
}
li {
list-style:none
}
img {
/* border 0 照顾低版本浏览器 如果 图片外面包含了链接会有边框的问题 */
border:0;
/* 取消图片底侧有空白缝隙的问题 */
vertical-align:middle
}
button {
/* 当我们鼠标经过button的时候,鼠标变成小手 */
cursor:pointer
}
a {
color:#666;
text-decoration:none
}
a:hover {
color:#c81623
}
button,input {
font-family:Microsoft YaHei,Heiti SC,tahoma,arial,Hiragino Sans GB,"\5B8B\4F53",sans-serif
}
body {
-webkit-font-smoothing:antialiased;
background-color:#fff;
font:12px/1.5 Microsoft YaHei,Heiti SC,tahoma,arial,Hiragino Sans GB,"\5B8B\4F53",sans-serif;
color:#666
}
.hide,.none {
display:none
}
/* 清除浮动 */
.clearfix:after {
visibility:hidden;
clear:both;
display:block;
content:".";
height:0
}
.clearfix {
*zoom:1
}
CSS3的新特性
CSS3新增选择器
- 属性选择器
- 结构伪类选择器
- 伪元素选择器
属性选择器
选择符 | 简介 |
---|---|
E[att] | 选择具有att属性的E元素 |
E[att=“val”] | 选择具有att属性且属性值等于val的E元素 |
E[att^=“val”] | 匹配具有att属性且值以val开头的E元素 |
E[att$=“val”] | 匹配具有att属性且值以val结尾的E元素 |
E[att*=“val”] | 匹配具有att属性且值中含有val的E元素 |
注意:类选择器、属性选择器、伪类选择器,权重为10
结构伪类选择器
选择符 | 简介 |
---|---|
E:first-child | 匹配父元素中第一个子元素E |
E:last-child | 匹配父元素中最后一个子元素E |
E:nth-child | 匹配父元素中的第n个子元素E |
E:first-of-type | 指定类型E的第一个 |
E:last-of-type | 指定类型E的最后一个 |
E:nth-of-type(n) | 指定类型E的第n个 |
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style type="text/css">
/* 1.选择ul里面的第一个孩子 小li */
ul li:first-child {
background-color: pink;
}
/* 2.选择ul里面的最后一个孩子 小li */
ul li:last-child {
background-color: pink;
}
/* 3.选择ul里面的第4个孩子 小li */
ul li:nth-child(4) {
background-color: deepskyblue;
}
</style>
</head>
<body>
<ul>
<li>我是第1个孩子</li>
<li>我是第2个孩子</li>
<li>我是第3个孩子</li>
<li>我是第4个孩子</li>
<li>我是第5个孩子</li>
<li>我是第6个孩子</li>
<li>我是第7个孩子</li>
<li>我是第8个孩子</li>
</ul>
</body>
</html>
nth-child选择器
- n可以是数字,关键字和公式
- n如果是数字,就是选择第n个子元素,里面数字从1开始
- n可以是关键字:even偶数,odd奇数
- n可以是公式:常见的公式如下(如果是公式,则从0开始计算,但是第0个元素或者超出了元素的个数会被忽略)
公式 | 取值 |
---|---|
2n | 偶数,相当于even |
2n+1 | 奇数,相当于odd |
5n | 5 10 15… |
n+5 | 从第5个开始(包含第五个)到最后 |
-n+5 | 前5个(包含第五个) |
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>nth-child选择器</title>
<style type="text/css">
/* 1.把所有的偶数even的孩子选出来 */
ul li:nth-child(even) {
background-color: skyblue;
}
/* 2.把所有的奇数odd的孩子选出来 */
ul li:nth-child(odd) {
background-color: pink;
}
</style>
</head>
<body>
<ul>
<li>我是第1个孩子</li>
<li>我是第2个孩子</li>
<li>我是第3个孩子</li>
<li>我是第4个孩子</li>
<li>我是第5个孩子</li>
<li>我是第6个孩子</li>
<li>我是第7个孩子</li>
<li>我是第8个孩子</li>
</ul>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style type="text/css">
/* nth-child(n) 从0开始 每次加1 往后面计算 这里面必须是n 不能是其他字母 选择了所有的孩子 */
ol li:nth-child(n) {
background-color: pink;
}
</style>
</head>
<body>
<ol>
<li>我是第1个孩子</li>
<li>我是第2个孩子</li>
<li>我是第3个孩子</li>
<li>我是第4个孩子</li>
<li>我是第5个孩子</li>
<li>我是第6个孩子</li>
<li>我是第7个孩子</li>
<li>我是第8个孩子</li>
</ol>
</body>
</html>
区别
- nth-child对父元素里面所有孩子排序选择(序号是固定的)先找到第n个孩子,然后看看是否和E匹配
- nth-of-type对父元素里面指定子元素进行排序选择。先匹配E,然后再根据E找第n个孩子
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>nth-type-of选择器</title>
<style type="text/css">
ul li:first-of-type {
background-color: pink;
}
ul li:last-of-type {
background-color: pink;
}
/* nth-child 会把所有的盒子都排列序列号 */
/* 执行的时候首先看:nth-child(1) 之后回去看 前面的div */
section div:nth-child(1) {
background-color: red;
}
/* nth-of-type 会把指定元素的盒子排列序号 */
/* 执行的时候首先看 div指定的元素 之后回去看:nth-of-type(1) 第几个孩子 */
section div:nth-of-type(1){
background-color: blue;
}
</style>
</head>
<body>
<ul>
<li>我是第1个孩子</li>
<li>我是第2个孩子</li>
<li>我是第3个孩子</li>
<li>我是第4个孩子</li>
<li>我是第5个孩子</li>
<li>我是第6个孩子</li>
<li>我是第7个孩子</li>
<li>我是第8个孩子</li>
</ul>
<!-- 区别 -->
<section>
<p>光头强</p>
<div>熊大</div>
<div>熊二</div>
</section>
</body>
</html>
小结
- 结构伪类选择器一般用于选择父级元素里面的第几个孩子
- nth-child对父元素里面所有孩子排序选择(序号是固定的)先找到第n个孩子,然后看看是否和E匹配
- nth-of-type对父元素里面指定子元素进行排序选择,先去匹配E,然后再根据E找第n个孩子
- 关于nth-child(n)我们要知道n是从0开始计算的,要记住常用的公式
- 如果是无序列表,我们肯定用nth-child更多
- 类选择器、属性选择器、伪类选择器,权重为10
伪元素选择器(重点)
选择符 | 简介 |
---|---|
::before | 在元素内部的前面插入内容 |
::after | 在元素内部的后面插入内容 |
注意:
- before和after创建一个元素,但是不属于行内元素
- 新创建的这个元素在文档树种是找不到的,我们称之为伪元素
- 语法:element::before{}
- before和after必须有content属性
- before在父元素内容的前面创建元素,after在父元素内容的后面插入元素
- 伪元素选择器和标签选择器一样,权重为1
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>伪元素选择器</title>
<style type="text/css">
div {
width: 200px;
height: 200px;
background-color: pink;
}
div::before {
/* 这个content是必须要写的 */
content: '我';
}
div::after {
content: '阿波';
}
</style>
</head>
<body>
<div>
是
</div>
</body>
</html>
配合字体图标使用
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style type="text/css">
@font-face {
font-family: 'icomoon';
src: url('fonts/icomoon.eot?zc2vt0');
src: url('fonts/icomoon.eot?zc2vt0#iefix') format('embedded-opentype'),
url('fonts/icomoon.ttf?zc2vt0') format('truetype'),
url('fonts/icomoon.woff?zc2vt0') format('woff'),
url('fonts/icomoon.svg?zc2vt0#icomoon') format('svg');
font-weight: normal;
font-style: normal;
font-display: block;
}
div {
position: relative;
width: 200px;
height: 35px;
border: 1px solid red;
}
div::after {
position: absolute;
top: 10px;
right: 10px;
font-family: 'icomoon';
/* content: ''; */
content: '\e900';
color: red;
font-size: 18px;
}
</style>
</head>
<body>
<div></div>
</body>
</html>
遮罩案例修改
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>遮罩案例修改</title>
<style type="text/css">
.tudou {
position: relative;
width: 260px;
height: 200px;
background-color: pink;
margin: 30px auto;
}
.tudou img {
width: 100%;
height: 100%;
}
.tudou::before {
content: '';
/* 隐藏遮罩层 */
display: none;
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: rgba(0,0,0,.4) url(../img/娑娜小图标.png) no-repeat center;
}
/* 当我们鼠标经过了这个盒子,就让遮罩层显示出来 */
.tudou:hover::before {
/* 显示元素 */
display: block;
}
</style>
</head>
<body>
<div class="tudou">
<img src="../img/娑娜.jpg" >
</div>
</body>
</html>
盒子模型
CSS3中可以通过box-sizing来指定盒模型,有2个值:即可定为content-box、border-box,这样我们计算盒子大小的方式就发生了改变
可以分成两种情况:
- box-sizing:content-box盒子大小为width + padding + border(以前默认的)
- box-sizing:border-box盒子大小为width
如果盒子模型我们改为了box-sizing:border-box,那padding和border就不会撑大盒子了(前提是padding和border不会超过width宽度)
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>盒子模型</title>
<style type="text/css">
* {
margin: 0;
padding: 0;
}
div {
width: 200px;
height: 200px;
background-color: pink;
border: 20px solid red;
padding: 15px;
box-sizing: content-box;
}
p {
width: 200px;
height: 200px;
background-color: pink;
border: 20px solid red;
padding: 15px;
/* CSS3 盒子模型 盒子最终的大小就是width 200 的大小 */
box-sizing: border-box;
}
</style>
</head>
<body>
<div>小猪乔治</div><br>
<p>小猪佩奇</p>
</body>
</html>
其他新特性(了解)
图片变模糊
CSS3滤镜filter:
filter CSS属性将模糊或颜色偏移等图形效果应用于元素
filter: 函数(); 例如:filter:blur(5px); blur模糊处理 数值越大越模糊
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>图片模糊</title>
<style type="text/css">
img {
/* blur是一个函数 小括号里面数值越大,图片越模糊 注意数值要加px单位 */
filter: blur(5px);
}
img:hover {
filter: blur(0);
}
</style>
</head>
<body>
<img src="../img/娑娜.jpg" >
</body>
</html>
鼠标移出变模糊
calc函数
此函数让你在声明CSS属性值时执行一些计算
width:calc(100% - 80px);
括号里面可以使用+、-、*、/来进行计算
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>calc函数</title>
<style type="text/css">
.father {
width: 300px;
height: 200px;
background-color: pink;
}
.son {
/* width:150px */
/* width:calc(150px + 30px); */
width: calc(100% - 30px);
height: 30px;
background-color: skyblue;
}
</style>
</head>
<body>
<!-- 需求我们的盒子宽度永远比父盒子小30px -->
<div class="father">
<div class="son"></div>
</div>
</body>
</html>
过渡(重点)
transition:要过渡的属性 花费时间 运动曲线 何时开始;
- 属性:想要变化的css属性,宽度高度、背景颜色、内外边距都可以,如果想要所有的属性都变化过渡,写一个all就可以了
- 花费时间:单位时秒(必须写单位)比如0.5s
- 运动曲线:默认是ease(可以省略)
- 何时开始:单位是秒,可以设置延迟触发时间 默认是0s
记住过渡的使用口诀:谁做过渡给谁加
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>过渡效果</title>
<style type="text/css">
div {
width: 200px;
height: 100px;
background-color: pink;
/* transition:变化的属性 花费时间 运动曲线 何时开始; */
/* transition: width .5s ease 0s; */
/* 如果想要写多个属性,利用逗号进行分割,若想要多个属性都变化,属性写all就可以了 */
/* transition: width .5s,height .5s; */
transition: all 0.5s;
}
div:hover {
width: 400px;
height: 200px;
background-color: skyblue;
}
</style>
</head>
<body>
<div></div>
</body>
</html>
鼠标经过效果
2D转换
转换(transform)是CSS中具有颠覆性的特征之一,可以实现元素的位移、旋转、缩放等效果
- 移动:translate
- 旋转:rotate
- 缩放:scale
移动translate
2D移动是2D转换里面的一种功能,可以改变元素再在页面中的位置,类似定位
transform:translate(x,y);或者分开写
transform:translateX(n);
transform:translateY(n);
重点:
- 定义2D转换中的移动,沿着x和y轴移动元素
- translate最大的优点:不会影响到其他元素的位置
- translate中的百分比单位是相对于自身元素的translate(50%,50%);
- 对行内标签没有效果
让盒子水平居中
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style type="text/css">
div {
width: 500px;
height: 500px;
background-color: pink;
/* 1.我们translate里面的参数可以是用% */
/* 2.如果里面的参数是%,移动的距离是盒子自身的宽度或者高度来对比的 */
/* 这里50%就是100px,因为盒子的宽度是200px */
transform: translate(50%);
}
p {
position: absolute;
top: 50%;
left: 50%;
width: 200px;
height: 200px;
background-color: purple;
/* translate(-50%, -50%) 盒子往上走自己高度的一半 */
transform: translate(-50%, -50%);
}
span {
/* translate 对于行内元素是无效的 */
transform: translate(300px, 300px);
}
</style>
</head>
<body>
<div>
<p></p>
</div>
<span>123</span>
</body>
</html>
旋转rotate
2D旋转指的是让元素在2维平面内顺时针旋转或者逆时针旋转
transform:rotate(度数)
重点:
- rotate里面跟度数,单位是deg 比如 rotate(45deg)
- 角度为正时,顺时针,负时,为逆时针
- 默认旋转的中心点时元素的中心点
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style type="text/css">
img {
width: 150px;
/* 顺时针旋转18度 */
transform: rotate(18deg);
border-radius: 50%;
border: 5px solid pink;
/* 过渡写到本身上,谁做动画给谁加 */
transition: all; 0.3s;
}
img:hover {
transform: rotate(90deg);
}
</style>
</head>
<body>
<img src="../img/2D娑娜.gif" >
</body>
</html>
转换中心点transform-origin
我们可以设置元素转换的中心点
transform-origin:x y;
重点
- 注意后面的参数x和y用空格隔开
- xy默认转换的中心点时元素的中心点(50% 50%)
- 还可以给xy设置像素或者方位名词(top bottom left right center)
缩放scale
缩放,顾名思义,可以放大和缩小,只要给元素添加上了这个属性就能控制它放大还是缩小
transform:scale(x,y);
注意:
- 注意其中x和y用逗号分隔
- transform:scale(1,1):宽和高都放大一倍,相对于没有放大
- transform:scale(2,2):宽和高都放大了2倍
- transform:scale(2):只写一个参数,第二个参数和第一个参数一样,相当于scale(2,2)
- transform(0.5,0.5):缩小
- scale缩放最大的优势:可以设置旋转中心点缩放,默认以中心点缩放的,而且不影响其他盒子
div:hover {
/* 1.里面写的数字不跟单位,就是倍数的意思,1就是1的倍数,2就是2的倍数 */
/* transform: scale(x,y); */
transform: scale(2,2);
/* 2.修改了宽度为原来的2倍,高度不变 */
/* transform: scale(2,1); */
/* 3.等比例缩放,同时修改宽度和高度,我们有简单的写法,以下是宽度修改了2倍,高度默认和第一个参数一样 */
/* transform: scale(2); */
/* 4.我们可以进行缩小,小于1就是缩放 */
/* transform: scale(0.5,0.5); */
/* transform: scale(0.5); */
/* 5.scale的优势之处:不会影响其他的盒子,而且可以设置缩放的中心点 */
}
图片放大案例
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>图片放大案例</title>
<style type="text/css">
div {
overflow: hidden;
float: left;
margin: 10px;
}
div img {
width: 300px;
transition: all 0.9s;
vertical-align: middle;
}
div img:hover {
transform: scale(2,2);
}
</style>
</head>
<body>
<div>
<a href="#"><img src="img/蔚.jpg" ></a>
</div>
<div>
<a href="#"><img src="img/锐雯.png" ></a>
</div>
<div>
<a href="#"><img src="img/阿狸.jpg" ></a>
</div>
</body>
</html>
鼠标移入效果
2D转换综合写法
注意:
- 同时使用多个转换,其格式为:transform:translate() rotate() scale()…等
- 其顺序会影响转换的效果(先旋转会改变坐标轴方向)
- 当我们同时有位移和其他属性的时候,记得要将位移放到最前
div:hover {
transform: translate(150px,150px) rotate(180deg);
/* 这俩是效果不一样 */
/* transform: rotate(180deg) translate(150px,150px); */
}
CSS3动画
制作动画分为两步:
- 先定义动画
- 再使用(调用)动画
用keyframes定义动画(类似定义类选择器)
@keyframes 动画名称 {
0% {
width:100px;
}
100% {
width:200px;
}
}
元素使用(调用)动画
div {
width:200px;
height:200px;
background-color:aqua;
margin:100px auto;
/* 调用动画 */
animation-name:动画名称;
/* 持续时间 */
animation-duration:持续时间;
}
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style type="text/css">
/* 想页面一打开,一个盒子就从左边走到右边 */
/* 1.定义动画 */
@keyframes move {
/* 开始状态 */
0% {
transform: translateX(0px);
}
/* 结束状态 */
100% {
transform: translateX(1000px);
}
}
div {
width: 200px;
height: 200px;
background-color: pink;
/* 2.调用动画 */
/* 动画名称 */
animation-name: move;
/* 持续时间 */
animation-duration: 2s;
}
</style>
</head>
<body>
<div></div>
</body>
</html>
动画序列
- 0%是动画的开始,100%是动画的完成,这样的规则就是动画序列
- 在@keyframes中规定某项css样式,就能创建由当前样式逐渐改为新样式的动画效果
- 动画是使元素从一种样式逐渐变化位另一种样式的效果,您可以改变任意多的样式任意多的次数
- 请用百分比来规定变化发生时间,或用关键词“form”和“to”,等同于0%和100%
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>动画序列</title>
<style type="text/css">
/* @keyframes move{
from {
transform: translate(0,0);
}
to {
transform: translate(1000px,0);
}
} */
/* 盒子环绕一圈 */
/* 动画序列 */
/* 1.可以做多个状态的变化 keyframes:关键帧 */
/* 2.里面的百分比要是整数 */
/* 3.里面的百分比就是总的时间(这个案例10s)的划分 */
@keyframes move{
0% {
transform: translate(0,0);
}
25% {
transform: translate(1000px,0);
}
50% {
transform: translate(1000px,500px);
}
75% {
transform: translate(0,500px);
}
100% {
transform: translate(0,0);
}
}
div {
width: 100px;
height: 100px;
background-color: pink;
animation-name: move;
animation-duration: 10s;
}
</style>
</head>
<body>
<div></div>
</body>
</html>
动画常用属性
属性 | 描述 |
---|---|
@keyframes | 规定动画 |
animation | 所有动画属性的简写属性,除了animation-play-state属性 |
animation-name | 规定@keyframes动画的名称(必须) |
animation-duration | 规定动画完成一个周期所花费的秒或毫秒,默认是0(必须的) |
animation-timing-function | 规定动画的速度曲线,默认是“ease” |
animation-delay | 规定动画何时开始,默认是0 |
animation-iteration-count | 规定动画被播放的次数,默认是1,还有infinite |
animation-direction | 规定动画是否在下一周期逆向播放,默认是“normal”,alternate逆播放 |
animation-play-state | 规定动画是否正在运行或暂停,默认是“running”,还有“pause” |
animation-fill-mode | 规定动画结束后状态,保持forwards回到起始backwards |
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>动画属性</title>
<style type="text/css">
@keyframes move {
0% {
transform: translate(0,0);
}
100% {
transform: translate(1000px,0);
}
}
div {
width: 100px;
height: 100px;
background-color: pink;
animation-name: move;
animation-duration: 2s;
/* 运动曲线 */
/* animation-timing-function: ease; */
/* 何时开始 */
animation-delay: 1s;
/* 重复次数 iteration 重复的,count 次数,infinite 无限 */
/* animation-iteration-count: infinite; */
/* 是否反方向播放,默认是normal 如果想要反方向就写alternate */
/* animation-direction: alternate; */
/* 动画结束后的状态,默认是backwards回到起始状态,可以改成让它停留在结束状态forwards */
animation-fill-mode: forwards;
}
div:hover {
/* 鼠标经过div让这个div停止动画 */
animation-play-state: paused;
}
</style>
</head>
<body>
<div></div>
</body>
</html>
动画简写属性
animation:动画名称 持续时间 运动曲线 何时开始 播放次数 是否反方向 动画起始或者结束的状态
animation:myfirst 5s linear 2s infinite alternate;
<!-- 上述代码简写 -->
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>动画属性</title>
<style type="text/css">
@keyframes move {
0% {
transform: translate(0,0);
}
100% {
transform: translate(1000px,0);
}
}
div {
width: 100px;
height: 100px;
background-color: pink;
animation-name: move;
animation-duration: 2s;
/* 简写 */
/* 前面两个属性name、duration一定要写 */
animation: move 2s linear 0s 1 alternate forwards;
}
div:hover {
/* 鼠标经过div让这个div停止动画 */
animation-play-state: paused;
}
</style>
</head>
<body>
<div></div>
</body>
</html>
注意:
- 简写属性里面不包含animation-play-state
- 暂停动画animation-play-state:pause;经常和鼠标经过等其他配合使用
- 想要动画走回来,而不是直接跳回来:animation-direction:alternate
- 盒子动画结束后,停在结束位置:animation-fill-mode:forwards
速度曲线之steps
animation-timing-function:规定动画的速度曲线,默认是“ease”
值 | 描述 |
---|---|
linear | 动画从头到尾的速度是相同的,匀速 |
ease | 默认,动画从低速开始,然后加快,在结束前变慢 |
ease-in | 动画以低速开始 |
ease-out | 动画以低速结束 |
ease-in-out | 动画以低速开始和结束 |
steps() | 指定了时间函数中的间隔数量(步长) |
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>steps步长</title>
<style type="text/css">
div {
font-size: 20px;
width: 0;
height: 30px;
background-color: pink;
/* 强制文字一行内显示 */
white-space: nowrap;
/* steps就是分几步来完成我们的动画,有了steps就不要再写ease或者linear了 */
animation: w 4s steps(10) forwards;
}
@keyframes w {
0% {
width: 0;
}
100% {
width: 200px;
}
}
</style>
</head>
<body>
<div>最爱琴女E,琴女36D</div>
</body>
</html>
3D转换
三维坐标系其实就是指立体空间,立体空间是由3个轴共同组成的
- x轴:水平向右 注意:x右边是正值,左边是负值
- y轴:垂直向下 注意:y下面是正值,上面是负值
- z轴:垂直屏幕 注意:往外面是正值,往里面是负值
主要知识点
- 3D位移:translate3d(x,y,z)
- 3D旋转:rotate3d(x,y,z)
- 透视:perspective
- 3D呈现transform-style
3D移动 translate3d
3D移动在2D移动的基础上多加了一个可以移动的方向,就是z轴方向
- transform:translateX(100px):仅仅是在x轴上移动
- transform:translateY(100px):仅仅是在y轴上移动
- transform:translateZ(100px):仅仅是在z轴上移动(注意:translateZ一般用px单位)
- transform:translate3d(x,y,z):其中x、y、z分别指要移动的轴的方向的距离
div {
width: 200px;
height: 200px;
background-color: pink;
/* transform: translateX(100px); */
/* transform: translateY(100px); */
/* transform: translateX(100px) translateY(100px) translateZ(100px); */
/* 1.translateZ沿着z轴移动 */
/* 2.translateZ后面的单位我们一般跟着px */
/* 3.translateZ(100px)向外移动100px (向我们的眼睛来移动的) */
/* 4.3D移动有简写的方法 */
/* transform: translate3d(x,y,z); */
/* transform: translate3d(100px,100px,100px); */
/* 5.xyz是不能省略的,如果没有就写0 */
transform: translate3d(0,100px,100px);
}
透视perspective
在2D平面产生近大远小视觉立体,但是只是效果二维的
- 如果想要在网页产生3D效果需要透视(理解成3D物体投影在2D平面内)
- 模拟人类的视觉位置,可认为安排一只眼睛去看
- 透视我们也称为视距:视距就是人们的眼睛到屏幕的距离
- 距离视觉点越近的在电脑平面成像越大,越远成像越小
- 透视的单位是像素
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style type="text/css">
body {
/* 透视写到被观察元素的父盒子上面!!! */
perspective: 500px;
}
div {
width: 200px;
height: 200px;
background-color: pink;
transform: translate3d(400px,100px,100px);
}
</style>
</head>
<body>
<div></div>
</body>
</html>
translateZ
translateZ(100px):仅仅是在Z轴上移动,有了透视,就能看到translateZ引起的变化了
body {
perspective: 500px;
}
div {
width: 200px;
height: 200px;
background-color: pink;
margin: 100px auto;
transform: translateZ(0);
}
3D转换 rotate3d
3D旋转指可以让元素在三维平面内沿着x轴,y轴,z轴或者自定义轴进行旋转
transform:rotateX(45deg):沿着x轴正方向旋转45度
transform:rotateY(45deg):沿着y轴正方向旋转45度
transform:rotateZ(45deg):沿着z轴正方向旋转45度
transform:rotate3d(x,y,z,deg):沿着自定义轴旋转,deg为角度(了解即可)
rotateX
左手准则
- 左手的拇指指向x轴的正方向
- 其余手指的弯曲方向就是该元素沿着x轴旋转的方向
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style type="text/css">
body {
perspective: 300px;
}
img {
display: block;
width: 300px;
margin: 100px auto;
transition: all 1s;
}
img:hover {
transform: rotateX(60deg);
}
</style>
</head>
<body>
<img src="img/剑姬.jpg" >
</body>
</html>
rotateY
左手准则
- 左手的拇指指向y轴的正方向
- 其余手指的弯曲方向就是该元素沿着y轴旋转的方向(正值)
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style type="text/css">
body {
perspective: 500px;
}
img {
display: block;
width: 300px;
margin: 100px auto;
transition: all 1s;
}
img:hover {
transform: rotateY(60deg);
}
</style>
</head>
<body>
<img src="img/剑姬.jpg" >
</body>
</html>
rotateZ
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style type="text/css">
body {
perspective: 500px;
}
img {
display: block;
width: 300px;
margin: 100px auto;
transition: all 1s;
}
img:hover {
transform: rotateZ(180deg);
}
</style>
</head>
<body>
<img src="img/剑姬.jpg" >
</body>
</html>
rotate3d
transform:rotate3d(x,y,z,deg):沿着自定义轴旋转deg为角度(了解即可)
xyz是表示旋转轴的矢量,是标示你是否希望沿着该轴旋转,最后一个标示旋转的角度
- transform:rotate3d(1,0,0,45deg)就是沿着x轴旋转45deg
- transform:rotate3d(1,1,0,45deg)就是沿着对角线旋转45deg
3D呈现transform-style
- 控制子元素是否开启三维立体环境
- transform-style:flat子元素不开启3d立体空间 默认的
- transform-style:preserve-3d;子元素开启立体空间
- 代码写给父级,但是影响的是子盒子
- 这个属性很重要,后面必用
两面盒子翻转例子
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style type="text/css">
body {
perspective: 350px;
}
.box {
position: relative;
width: 150px;
height: 150px;
margin: 100px auto;
animation-timing-function: linear;
transition: all .3s;
/* 让背面的盒子保留立体空间 给父级添加的 */
transform-style: preserve-3d;
}
.box:hover {
transform: rotateY(180deg);
}
.front,
.back {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
border-radius: 50%;
text-align: center;
line-height: 300px;
}
.front {
z-index: 1;
}
.front img {
width: 150px;
border-radius: calc(50%);
}
.back {
/* 像手机一样 背靠背 旋转 */
transform: rotateY(180deg);
}
.back img {
width: 150px;
border-radius: calc(50%);
}
</style>
</head>
<body>
<div class="box">
<div class="front"><img src="img/阿卡丽鬼舞姬.jpg" ></div>
<div class="back"><img src="img/峰刺阿卡丽.jpg" ></div>
</div>
</body>
</html>
旋转木马案例
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style type="text/css">
body {
perspective: 1000px;
}
section {
position: relative;
width: 300px;
height: 200px;
margin: 178px auto;
transform-style: preserve-3d;
/* 添加动画效果 */
animation: rotate 10s linear infinite;
background: url(img/阿卡丽4.jpg)
}
section:hover {
/* 鼠标放入section停止动画 */
animation-play-state: paused;
}
@keyframes rotate {
0% {
transform: rotateY(0);
}
100% {
transform: rotateY(360deg);
}
}
section div {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
}
section div:nth-child(1) {
/* 先旋转好了再移动距离 */
transform: translateZ(300px);
background: url(img/阿卡丽1.jpg);
}
section div:nth-child(2) {
transform: rotateY(60deg) translateZ(300px);
background: url(img/阿卡丽2.jpg);
}
section div:nth-child(3) {
transform: rotateY(120deg) translateZ(300px);
background: url(img/阿卡丽3.jpg);
}
section div:nth-child(4) {
transform: rotateY(180deg) translateZ(300px);
background: url(img/阿卡丽7.jpg);
}
section div:nth-child(5) {
transform: rotateY(240deg) translateZ(300px);
background: url(img/阿卡丽5.jpg);
}
section div:nth-child(6) {
transform: rotateY(300deg) translateZ(300px);
background: url(img/阿卡丽6.png);
}
</style>
</head>
<body>
<section>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
</section>
</body>
</html>
Emmet语法
- 生成标签直接输入标签名按tab键即可,比如输入div然后按tab键,就可以生成div标签了
- 若想生成多个相同的标签,加上*就可以了,比如 div * 3(别有空格)再按tab键就可以快速生成3个div了
- 若有父子级关系的标签,可以用> 比如 ul>li
- 若有兄弟关系的标签,用+ 比如 div+p
- 若生成带有类名或者id名字的,直接写 .demo 或者 #two tab键就可以了
p.one
按tab键后如下
<p class="one"></p>
p#two
按tab键后如下
<p id="two"></p>
若生成的div类名是有顺序的,可以用自增符号$
.demo$*5
按tab键后如下
<div class="demo1"></div>
<div class="demo2"></div>
<div class="demo3"></div>
<div class="demo4"></div>
<div class="demo5"></div>
若想要在生成的标签内部写内容可以用{}表示
div{最爱琴女E}
按tab键后如下
<div>最爱琴女E</div>
div{大大大}*3
按tab键后如下
<div>大大大</div>
<div>大大大</div>
<div>大大大</div>
div{$}*5
按tab键后如下
<div>1</div>
<div>2</div>
<div>3</div>
<div>4</div>
<div>5</div>
快速生成CSS样式语法
CSS基本采取简写形式即可
- 比如 w200 按tab 可以生成 width:200px;
- 比如 lh26 按tab 可以生成 line-height:26px;
.one {
tac
w100
h200
}
按tab键后如下
.one {
text-align: center;
width: 100px;
height: 200px;
}
扩展
网站favicon图标
favicon.ico一般用于作为缩略的网站标志,它显示在浏览器的地址栏或者标签上,目前主要的浏览器都支持favicon.ico图标。
制作favicon图标
- 把图标切成png图片
- 把png图片转换为ico图标,这需要借助于第三方转换网站,例如比特虫:http//www.bitbug.net/
<!-- 制作完成后引入即可 -->
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>游戏购</title>
<!-- favicon图标 -->
<link rel="shortcut icon" href="images/favicon.png"/>
<!-- 引入初始化样式文件 -->
<link rel="stylesheet" href="css/base.css"/>
<!-- 引入公共的样式文件 -->
<link rel="stylesheet" href="css/common.css"/>
</head>
<body>
</body>
</html>
网站TDK三大标签SEO优化
SEO(Search Engine Optimization)汉译为搜索引擎优化,是一种利用搜索引擎的规则提高网站在有关搜索引擎内自然排名的方式
目的是对网站进行深度的优化,从而帮助网站获取免费的流量,进行在搜索引擎上提升网站的排名,提高网站的知名度
页面必须有三个标签用来符合SEO优化
title网站标题
title具有不可代替性,是我们页内的第一个重要标签,是搜索引擎了解网页的入口和对网页主题归属的最佳判断点
建议:网站名(产品名)-网站的介绍(尽量不要超过30个汉字)
例如:
- 京东(JD.COM)-综合网购首选-正品低价、品质保障、配送及时、轻松购物!
- 小米商城-小米5s、红米Note4、小米MIX、小米笔记本官方网站
description网站说明
简要说明我们网站主要是做什么的
我们提倡,description作为网站的总体业务和主题概括,多采用“我们是……”、“我们提供……”、“XXX网作为……”、“电话:010……”之类的语句。
例如:
<meta name="description" content="京东JD.COM-专业的综合网上购物商城,销售家电、数码通讯、电脑、家居百货、服装服饰、母婴、图书、食品等数万个品牌优质商品。便捷、诚信的服务,为您提供愉悦的网上购物体验!" />
keywords关键字
keywords是页面关键字,是搜索引擎的关注点之一
最好限制为6~8个关键词,关键词之间用英文逗号隔开,采用关键词1,关键词2的形式。
例如:
<meta name="keywords" content="网上购物,网上商城,手机,笔记本,电脑,MP3,CD,VCD,DV,相机,数码,配件,手表,存储卡,京东" />
例
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>游戏购-游戏网购首选-正品低价、品质保障、发货及时、轻松购物!</title>
<!-- 网站说明 -->
<meta name="description" content="游戏购商城-专业的游戏购买商城,销售各种类型的游戏,不管是单机大作,独立游戏还是小游戏,应有尽有,
更有国内外多家厂商等数万个品质优秀的游戏,便捷、诚信的服务,为您提供愉悦的网上购物体验!" />
<!-- 关键字 -->
<meta name="Keywords" content="网上购物,网上商城,游戏,单机游戏,网络游戏,独立游戏,小游戏,游戏购"/>
<!-- 引入favicon图标 -->
<link rel="shortcut icon" href="images/favicon.png"/>
<!-- 引入初始化样式文件 -->
<link rel="stylesheet" href="css/base.css"/>
<!-- 引入公共的样式文件 -->
<link rel="stylesheet" href="css/common.css"/>
</head>
<body>
</body>
</html>
浏览器私有前缀
浏览器私有是为了兼容老版本的写法,比较新版本的浏览器无须添加
1.私有前缀
- -moz-:代表Firefox浏览器私有属性
- -ms-:代表IE浏览器私有属性
- -webkit-:代表safari、chrome私有属性
- -o-:代表Opera私有属性
2.提倡的写法
-moz-border-radius:10px;
-webkit-border-radius:10px
-o-border-radius:10px;
border-radius:10px;