一. HTML基础
1. HTML中的注释
为了便于阅读和理解,就需要使用注释标签。
HTML中的注释以”<!—“开头,以”-->”结束
<!--注释语句-->
注意:注释标签里面的内容是给程序员看的,这个代码是不执行不显示到页面中的
2. HTML中的特殊字符
重点记住:空格,大于号,小于号就行
空格符 |   | |
< | 小于号 | &It |
> | 大于号 | > |
& | 和号 | & |
¥ | 人民币 | ¥ |
版权 | © | |
注册商标 | ® | |
℃ | 摄氏度 | ° |
± | 正负号 | ± |
X | 乘号 | × |
➗ | 除号 | ÷ |
2 | 平方2(上标2) | ² |
3 | 立方3(上标3) | ³ |
3. HTML常用标签
1. 段落标签
<p>我是一个段落标签</p>
标签语义:可以把HTML文档分割成若干段
特点:
1. 文本在一个段落中会根据浏览器窗口大小自动换行
2. 段落和段落之间保有空隙
2. 换行标签
<br/>
标签语义:强制换行
特点:
1. <br/>是个单个标签
2. <br/>标签只是简单地开始新的一行,跟段落不一样(段落之间会插入一些垂直的间距)。
3. 文本格式化标签
在网页中,有时需要为文字设置粗体,斜体或下划线等效果
标签语义:突出重要性,比普通文字更重要
加粗:我是<strong>加粗</strong>标签,我是<b>加粗</b>标签,推荐使用<strong>
倾斜:我是<em>倾斜</em>标签,我是<i>倾斜</i>标签,推荐使用<em>
删除线:我是<del>删除线</del>标签,我是<s>删除线</s>标签,推荐使用<del>
下划线:我是<ins>下划线</ins>标签,我是<u>下划线</u>标签,推荐使用<ins>
4. <div />和<span />标签
<div>和<span>是没有语义的,它们就是一个盒子,用来装内容的。
特点:
1. <div>标签用来布局,但是现在一行只能放一个<div>,大盒子
2. <span>标签用来布局,一行上可以多个<span>,小盒子
5. 图像标签
图像标签 <img src=”图像URL”/>,
src是<img>标签的必须属性,它用于指定图像文件的路径和文件名。
图像标签的其他属性
属性 | 属性值 | 说明 |
Src | 图片路径 | 必须属性 |
alt | 文本 | 替换文本,图像不能显示时候的文字 |
title | 文本 | 提示文本,鼠标放到图片上,显示的文本 |
width | 像素 | 设置图像的宽度 |
height | 像素 | 设置图像的高度 |
border | 像素 | 设置图像的边框粗细 |
图像标签属性注意点:
1. 图像标签可以拥有多个属性,但必须写在标签名后面
2. 属性之间不分先后顺序,标签名与属性,属性与属性之间均以空格分开
3. 属性采取键值对形式,即key=”value”的格式,属性=“属性值”
6. 路径
目录文件夹和根目录:实际工作中,我们需要认真的管理文件夹
目录文件夹,就是普通文件夹,里面只不过存放了我们做页面所需要的相关素材,比如html文件,图片等
根目录,打开目录文件夹的第一层就是根目录
页面中的图片会非常多,通常我们会新建一个文件夹来存放这些图像文件,这时再查找图像,就需要采用“路径”的方式来指定图像文件的位置。
路径可以分为:1. 相对路径;2. 绝对路径
相对路径:以引用文件所在位置为参考基础,而建立出的目录路径(简单来说,图片相对于HTNL页面的位置)
同一级相对路径,例如<img src=”baudu,jif”/>
下一级的相对路径,/,例如<img src=”images/baidu.jif”/>
上一级的相对路径,../,例如<img src=”../baidu.jif”/>
绝对路径:指目录下的绝对位置,直接达到目标位置,通常从盘符开始的路径
例如:,”D:\web\img\logo.gif”或者完整的网络地址http://www.itcast.cn/images/logo.gif
7. 超链接标签
<a>标签用于定义超链接
标签含义:从一个页面链接到另一个页面
<a href=”跳转目标” target=”目标窗口的弹出方式”>文本或图像</a>
属性:
1. href用于指定链接目标的url地址,(必须属性),当为标签应用href属性时,它就具有了超链接功能。
2. target用于指定链接页面的打开方式,其中_self为默认值,_blank为在新窗口中打开
链接分类:
外部链接 | 例如<a href=腾讯网 target=”_self”>腾讯</a> |
内部链接 | 网站内部页面之间的相互链接,直接链接内部页面名称即可,例如<a href=”index.html”>首页</a> |
空链接 | 如果当时没有确定链接目标时,可先设置一个空的,<a href=”#”>首页</a> |
下载链接 | 如果href里面地址是一个文件或者压缩包,会下载这个文件 |
网页元素链接 | 在网页中的各种网页元素,如文本,图像,表格,音频,视频等都可以添加超链接 |
锚点链接 | 当我们点击链接,可以快速定位到页面中的某个位置 1. 在链接文本的href属性中,设置属性值为 #名字 的形式,如<a href=”#two”>第二集</a> 2. 找到目标位置标签,里面添加一个id属性=刚才的名字,如:<h3 id=”two”>第二集介绍</h3> |
8. 表格标签
表格不是用来布局页面的,而是用来展示数据的。
基本语法:
<table>
<tr>
<td>单元格内的文字</td>
</tr>
</table>
其中:
<table>用于定义表格
<tr>用于定义表格中的行,必须嵌套在<table>标签中
<td>用于定义表格中的单元格,必须嵌套在<tr>标签中
表头单元格标签:
<th>标签表示HTML表格的表头部分。
(和<td>单元格不同的是,表头单元格里面的内容会加粗居中显示)
<table>
<tr>
<th>姓名</th>
</tr>
</table>
表格属性(实际开发中并不常用,会后面通过css来设置)
属性名 | 属性值 | 描述 |
align | left,center,right | 规定表格相对周围元素的对齐方式 |
border | 1或”” | 规定表格单元是否拥有边框,默认为””,表示没有边框 |
cellpadding | 像素值 | 规定单元边沿与其内容之间的空白,默认1像素 |
cellspacing | 像素值 | 规定单元格之间的空白,默认2像素 |
width | 像素值或百分比 | 规定表格的宽度 |
表格结构标签
表格分为:表格头部区域和表格主体区域
<thead>标签,表示表格的头部区域(注意其与表头的区别)
<tbody>标签,表示表格的主体区域
这样可以更好的分清表格结构
以上标签都是放在<table></table>标签中的。
合并单元格的方式:
1. 跨行合并:rowspan=”合并单元格的个数”
2. 跨列合并:colspan=”合并单元格的个数”
目标单元格:(写合并代码)
跨行:最上侧单元格为目标单元格,写合并代码
跨列:最左侧单元格为目标单元格,写合并代码
合并单元格三部曲:
1. 先确定是跨行还是跨列
2. 找到目标单元格,写上合并方式=合并的单元格数量。比如:<td rowspan="2"></td>
3. 删除多余单元格
9. 列表标签
表格用来显示数据的,那么列表就是用来布局的
列表最大的特点就是整齐,整洁,有序,它作为布局会更加自由和方便。
根据使用情景不同,列表可以分为三大类:无序列表,有序列表和自定义列表
<ul>标签表示HTML页面中项目的无序列表,使用<li>标签定义列表项
语法格式:
<ul>
<li>列表项1</li>
<li>列表项2</li>
<li>列表项3</li>
</ul>
1. 无序列表的各个列表项之间没有顺序级别之分,是并列的
2. <ul></ul>中只能嵌套<li></li>,直接在<ul></ul>标签中输入其他标签或者文字的做法是不被允许的。
3. <li>与</li>之间相当于一个容器,可以容纳所有元素。
4. 无序列表会带有自己的样式属性,但在实际使用中,我们会有CSS来设置。
<ol>标签用于定义有序列表,列表排列以数字来显示,并且使用<li>标签来定义列表项
语法格式:
<ol>
<li>列表项1</li>
<li>列表项2</li>
<li>列表项3</li>
</ol>
1. <ol></ol>中只能嵌套<li></li>,直接在<ol></ol>标签中输入其他标签或者文字的做法是不被允许的。
2. <li>与</li>之间相当于一个容器,可以容纳所有元素。
3. 有序列表会带有自己的样式属性,但在实际使用中,我们会有CSS来设置。
自定义列表
自定义列表常用于对术语或名词进行描述和解释,自定义的列表项前没有任何项目符号
<dl>标签用于定义描述列表(或定义列表),该标签会与<dt>(定义项目/名字和<dd>(描述每一个项目/名字)一起使用。
语法格式
<dl>
<dt>名词1</dt>
<dd>名词1解释1</dd>
<dd>名词1解释2</dd>
</dl>
1. <dl></dl>里面只能包含<dt></dt>和<dd></dd>
2. <dt>和<dd>个数没有限制,经常是一个<dt>对应多个<dd>
10. 表单标签
使用表单的目的是为了收集用户信息。
一个完整的表单通常由表单域,表单控件(也称表单元素)和提示信息3个部分构成。
表单域是一个包含表单元素的区域。
HTML标签中,<form>标签用于定义表单域,以实现用户信息的收集和传递。
<form>会把它范围内的表单信息提交给服务器。
<form action=”url地址” method=”提交方式” name=”表单域名称”>
各种表单元素控件
</form>
常用属性
属性 | 属性值 | 作用 |
action | url地址 | 用于指定接收并处理表单数据的服务器程序的url地址 |
method | Get/post | 用于设置表单数据的提交方式,其取值为get或post |
name | 名称 | 用于指定表单的名称,以区分同一个页面中的多个表单域 |
表单控件(表单元素)
1. input输入表单元素
2. select下拉表单元素
3. textarea文本域表单元素
在表单元素中<input>标签用于收集用户信息。
<input type=”属性值”/>,<input/>标签为单标签
type属性设置不同的属性值用来指定不同的控件类型。(文本字段,复选款,掩码后的文本控件,单选按钮,按钮等)
属性值 | 描述 |
button | 定义可点击按钮(多数情况下,用于通过JavaScript启动脚本) |
checkbox | 定义复选框 |
file | 定义输入字段和”浏览“按钮,供文件上传 |
hidden | 定义隐藏的输入字段 |
image | 定义图像形式的提交按钮 |
password | 定义密码字段,该字段中的字符被掩码 |
radio | 定义单选按钮 |
reset | 定义重置按钮。重置按钮会清除表单中的所有数据 |
submit | 定义提交按钮。提交按钮会把表单数据发送到服务器 |
text | 定义单行的输入字段,用户可以在其中输入文本,默认宽度为20个字符 |
除了type属性外,<input>标签还有很多其他的属性
属性 | 属性值 | 描述 |
name | 由用户自定义 | 定义input元素的名称 |
value | 由用户自定义 | 规定Input元素的值 |
checked | checked | 规定此input元素首次加载时应当被选中 |
maxlength | 正整数 | 规定输入字段中的字符的最大长度 |
1. name和value是每个表单元素都有的属性值,主要给后台人员使用
2. name表单元素的名字,要求单选按钮和复选框要有相同的value值
3. checked属性主要针对于单选按钮和复选框,主要作用是一打开页面,就要可以默认选中某个表单的元素
4. maxlength是用户可以在表单元素输入的最大字符数,一般较少使用。
<label>标签为input元素定义标注。
<label>标签用于绑定一个表单元素,当点击<label>标签内的文本时,浏览器就会将焦点(光标)转到或者选择对应的表单元素上,用来增加用户体验。
语法:
<label for=”sex”>男</label>
<input type=”radio” name=”sex” id=”sex”/>
核心:<label>标签的for属性应当与相关元素的id属性相同。
select下拉表单元素
使用场景:在页面中,如果有多个选项让用户选择,并且想要节省页面空间时,我们可以使用<select>标签控件定义下拉列表。
语法:
<select>
<option>选项1</option>
<option>选项2</option>
<option>选项3</option>
</select>
注意:
1. <select>中至少包含一对<option>
2. 在<option>中定义selected=”selected”是,当前项即为默认选中项
textarea文本域表单元素
使用场景:当用户输入内容较多的情况下,我们就不能使用文本框表单了,此时我们可以使用<textarea>标签
在表单元素中,<textarea>标签是用于定义多行文本输入的控件。使用多行文本输入控件,可以输入更多的文字,该控件常见于留言板,评论。
语法:
<textarea rows=”3” cols=”20”>
文本内容
</textarea>
1. 通过<textarea>标签可以轻松地创建多行文本输入框
2. Cols=”每行中的字符数”,rows=”显示的行数”,在实际开发中不会使用,都是用CSS来改变大小。
4. HTML5的新特性
这些新特性基本上都有兼容性问题,基本上是IE+9以上版本的浏览器才支持
以前的布局,我们基本上就用div来做,div对搜索引擎来说,没有语义。
1. HTML5新增的语义化标签
<header> | 头部标签 |
<nav> | 导航栏标签 |
<article> | 内容标签 |
<section> | 定义文档某个区域 |
<aside> | 侧边栏标签 |
<footer> | 尾部标签 |
注意:
1. 这种语义化标签主要是针对搜索引擎的
2. 这种新标签页面可以使用多次
3. 在IE9中,需要把这些元素转换为块级元素
4. 其实,移动端更喜欢用这些标签
2. HTML5新增多媒体标签
1. <vedio> (尽量使用MP4格式的)
<video src=”文件地址” controls=”controls”> </video>
属性值 | 值 | 描述 |
autoplay | autoplay | 视频就绪自动播放(谷歌浏览器需要添加muted来解决自动播放问题) |
controls | controls | 向用户显示播放控件 |
width | plxes(像素) | 设置播放器宽度 |
height | plxes | 设置播放器高度 |
loop | loop | 播放完是否继续播放该视频,循环播放 |
preload | auto(预先加载该视频) none(不应预先加载视频) | 规定是否预先加载视频,如果有了autoplay,就忽略该属性 |
src | url | 视频url地址 |
poster | imgurl | 加载等待的画面图片 |
muted | muted | 静音播放 |
2. <audio>音频(当前<audio>支持三种音频格式——MP3,wav,Ogg)
语法:<audio src=”文件地址” controls=”controls”></audio>
属性 | 值 | 描述 |
autoplay | autoplay | 如果出现该属性,则音频在就绪后马上播放 |
controls | controls | 如果出现该属性,则向用户显示控件,比如播放按钮 |
loop | loop | 如果出现该属性,则每当音频结束时重新开始播放 |
src | url | 要播放的音频的url |
注意:谷歌把音频和视频自动播放禁止了
我们可以给视频标签添加muted属性来静音播放视频,音频不可以。(可以通过JAVAScript解决)
3. HTML5新增input类型
重点记住:number,tel,search
属性值 | 说明 |
type=”email” | 限制用户输入必须为Email类型 |
type=”url” | 限制用户输入必须为url类型 |
type=”date” | 限制用户输入必须为日期类型 |
type=”time” | 限制用户输入必须为时间类型 |
type=”month” | 限制用户输入必须为月类型 |
type=”week” | 限制用户输入为周类型 |
type=”number” | 限制用户输入必须为数字类型 |
type=”tel” | 手机号码 |
type=”search” | 搜索框 |
type=”color” | 生成一个颜色选择表单 |
4. HTML新增的表单属性
属性 | 值 | 说明 |
required | required | 表单拥有该属性,表示其内容不能为空,必填 |
placeholder | 提示文本 | 表单的提示信息,存在默认值将不显示 |
autofocus | autofocus | 自动聚焦属性,页面加载完成自动聚焦到指定表单 |
autocomplete | off/on | 当用户在字段开始键入时,浏览器基于之前键入过的值,应该显示出在字段中填写的选项 |
multiple | multiple | 可以多选文件提交 |
可以通过以下设置方式修改placeholder里面的字体颜色:
input::placeholde {
color: pink;
}
二. css基础
1. CSS简介
1. HTML主要做结构,显示元素内容
2. CSS美化HTML。布局网页
3. CSS最大价值:由HTML专注去做结构呈现,样式交给CSS,即结构(HTML)与样式(CSS)相分离
2. CSS规则
CSS规则由两个主要的部分构成:选择器以及一条或多条声明:
1. 选择器是用于指定CSS样式的HTML标签,花括号内是对该对象设置的具体样式
2. 属性和属性值以“键值对”的形式出现
3. 记得加“分号”结束
3. CSS代码格式
1. 样式格式书写
1. 紧凑格式:
h3{color:deeppink;font-size:20px;}
2. 展开格式:(强烈推荐这种,更直观)
h3{
color:deeppink;
font-size:20px;
}
2. 样式大小写(推荐小写)
3. 空格规范
1. 属性值前面,冒号后面,保留一个空格
2. 选择器(标签)和大括号中间保留一个空格
h3 {
color: pink;
}
4. CSS基础选择器
选择器分为:基础选择器和复合选择器两个大类。
1. 基础选择器是由单个选择器组成的
2. 基础选择器又包括:标签选择器,类选择器,id选择器和通配符选择器。
1. 标签选择器
是指用HTML标签名称作为选择器,按标签名称分类,为页面中某一类标签指定统一的CSS样式
语法
标签名 {
属性1: 属性值1;
属性2: 属性值2;
}
作用:可以把某一类标签全部选择出来,比如所有的<div>标签和所有的<span>标签
优点:能快速为页面中同类型的的标签统一设置样式
缺点:不能设计差异化样式,只能选择全部的当前标签。
2. 类选择器(开发中最常用)
如果想要差异化选择不同的标签,单独选择一个或某几个标签,可以使用类选择器
语法:
.类名 {
属性1: 属性值1;
属性2: 属性值2;
}
结构需要用class属性来调用class类的意思
<div class=”red”>变红色</div>
注意:命名规范,见附件(WEB前端开发规范手册)
3. 类选择器-多类名
<div class=”red font20”>亚瑟</div>
1. 在标签class属性中写多个类名,或者说这个标签有多个名字
2. 多个类名中间必须用空格分开
3. 可以节省CSS代码,统一修改也很方便
4. id选择器
id选择器可以为标有特定id的HTML元素指定特定的样式
HTML元素以id属性来设置id选择器,CSS中id选择器以“#”来定义
注意:id属性只能在每个HTML文档中出现一次。
语法:
#id名 {
属性1: 属性值1;
属性2: 属性值2;
}
//例如
#nav {
color: red;
}
5. 类选择器和id选择器的区别
1. 类选择器好比人的名字,一个人可以有多个名字,同时一个名字也可以被多个人使用
2. id选择器好比人的身份证号码,全中国是唯一的,不得重复
3. id选择器和类选择器最大的不同在于使用次数上。
4. 类选择器在修改样式中用的最多,id选择器一般用于唯一性的元素上,经常和JavaScript搭配使用。
6. 通配符选择器
在CSS中,通配符选择器使用“*”定义,它表示选取页面中的所有元素。
1. 通配符选择器不需要调用,自动就给所有的元素使用样式
2. 特殊情况才使用
语法:
*{
属性1:属性值1;
}
// 例如:清除所有的元素标签的内外边距
* {
margin: 0;
padding: 0;
}
作用:选择所有标签;
特点:选择的太多,有部分不需要。
5. CSS复合选择器
1. 复合选择器是由两个或多个基础选择器通过不同的方式组合而成的
2. 常用的复合选择器包括:后代选择器,子选择器,并集选择器,伪类选择器等等。
1. 后代选择器(重要)
后代选择器有称为包含选择器,可以选择父元素里面子元素
语法:元素1 元素2 {样式声明}
1. 表示选择元素1里面所有元素2(后代元素),
2. 元素1和元素2中间用空格隔开;
3. 元素2可以是儿子,也可以是孙子,只要是元素1的后代即可;
2. 子选择器(重要)
子选择器只能选择作为某元素的最近一级子元素,简单理解就是选亲儿子元素
语法:元素1>元素2 {样式声明}
1. 表示选择元素1里面所有直接后代元素2
2. 元素2必须是亲儿子,其孙子,重孙之类都不归他管
3. 并集选择器
语法:元素1,元素2 {声明样式}
1. 并集选择器可以选择多组标签,同时为他们定义相同的样式,通常用于集体声明。
2. 并集选择器是各选择器之间用英文逗号隔开
3. 逗号可以理解为和的意思
4. 约定的语法规范:并集选择器喜欢竖着写
4. 伪类选择器
用于向某些选择器添加特殊效果。
1. 伪类选择器书写最大的特点是用冒号(:)表示,例如:hover,:first-child。
2. 伪类选择器有很多,例如链接伪类,结构伪类等等。
链接伪类选择器:
a:link | 选择所有未被访问的链接 |
a:visited | 选择所有已被访问的链接 |
a:hover | 选择鼠标指针位于其上的链接 |
a:active | 选择活动链接 |
为了确保生效,请按照LVHA的顺序声明 :link-:visited-:hover-:active。
3. :focus伪类选择器
用于选取获得焦点的表单元素。焦点就是光标,一般情况下,<input>类表单元素才能获取。
语法:
input:focus {
background-color: yellow;
}
6. CSS字体属性
用于定义字体系列,大小,粗细,和文字样式(如斜体)
1. font-family
p{ font-family:”微软雅黑”}
div { font-family:Arial,”Microsoft Yahei”,”微软雅黑”;}
1. 各个字体之间必须使用英文状态下的逗号隔开
2. 一般情况下,如果有空格的多个单词组成的字体,加引号。
3. 尽量使用系统默认自带的字体,保证在任何用户的浏览器中都能正确显示
2. font-size
px(像素)大小是我们网页的最常用的单位。可以给整个body指定
p {
font-size: 20px;
}
3. font-weight
p{
font-weight: bold;
}
属性值 | 属性 |
normal | 默认值(不加粗的) |
bold | 定义粗体(加粗的) |
100-900 | 400等同于normal,而700等同于bold 注意这个数字后面不跟单位。 |
4. font-style
p {
font-style: normal;
}
属性值 | 作用 |
normal | 默认值,浏览器会显示标准的字体样式 font-style:normal |
italic | 浏览器会显示斜体的字体样式 |
5. 字体复合属性
字体复合属性可以把以上文字样式综合来写,节约代码
body {
font: font-style font-weight font-size/line-height font-family;
}
1. 使用font属性时,必须按照上面语法格式中的顺序书写,不能更换顺序,并且各个属性间以空格隔开;
2. 不需要设置的属性可以省略(取默认值),但必须保留font-size和font-family属性,否则font属性将不起作用。
7. CSS文本属性
用于定义文本的外观,比如文本的颜色,对齐文本,装饰文本,文本缩进,行间距等。
1. color属性
div {
color: red;
}
表示表示 | 属性值 |
预定义的颜色值 | red,green,blue,pink |
十六进制 | #FF0000 |
RGB代码 | rgb(255,0.0) |
2. text-align属性
用于设置元素内文本内容的水平对齐方式。
div {
text-align: center;
}
属性值 | 解释 |
left | 左对齐(默认值) |
right | 右对齐 |
center | 居中对齐 |
3. text-decoration属性
规定添加到文本的修饰。可以给文本添加下划线,删除线,上划线等。
div {
text-decoration: underline;
}
属性值 | 描述 |
none | 默认,没有装饰线(最常用) |
underline | 下划线。链接a自带下划线(常用) |
overline | 上划线(几乎不用) |
line-through | 删除线(不常用) |
4. text-indent属性
用来指定文本的第一行的缩进,通常是将段落的首行缩进
div {
text-indent: 10px;
}
p {
text-indent: 2em;
}
em是一个相对单位,就是当前元素(font-size)1个文字的大小,如果当前元素没有设置大小,则会按照父元素的1个文字大小。
5. line-height属性
用于设置行间的距离(行高)。可以控制文字行与行之间的距离
行间距(上间距,文本高度,下间距),改变行高,真正改变的是上间距和下间距。
p {
line-height: 26px;
}
8. CSS的引入方式
CSS样式表可以分为三大类:
1. 行内样式表(行内式)
2. 内部样式表(嵌入式)
3. 外部样式表(链接式)
1. 内部样式表
是写到html页面内部,将所有的CSS代码抽取出来,单独放到一个<style>标签中
<style>
div{
color: red;
font-size: 12px;
}
</style>
1. <style>标签理论上可以放在HTML文档的任何地方,但一般会放在文档的<head>标签中
2. 代码结构清晰,但并没有实现结构与样式完全分离
3. 使用内部样式表设定CSS,通常也被成为嵌入式引入,这种方式是我们练习时常用的方式。
2. 行内样式表
是在元素标签内部的style属性中设定CSS样式。适合于修改简单样式
<div style=”color: red; font-size: 12px;”>青春不常在,抓紧谈恋爱</div>
注意:由于书写繁琐,并且没有体现出结构与样式相分离的思想,所以不推荐大量使用,只有对当前元素添加简单样式的时候,可以考虑。
3. 外部样式表
实际开发中都是外部样式表,核心是样式单独写到CSS文件中,之后把CSS文件引入到HTML页面中使用。
1. 新建一个后缀名为.css的样式文件,把所有CSS代码都放入此文件中
2. 在HTML页面中,使用<link>标签引入这个文件
<link rel=”stylesheet” href=”CSS文件路径”}
3. 使用外部样式表设定CSS,通常被称为外链式或链接式引入,这种方式是开发中常用的方式。
9. Chrome调试工具
1. 打开调试工具,打开Chrome浏览器,按下F12或者右击页面空白处——检查
2. 左边是HTML元素结构,右边是CSS样式
3. 右边CSS样式可以改动数值(左右箭头或者直接输入)和查看颜色
4. ctrl+0复原浏览器大小
5. 如果点击元素,发现右侧没有样式的引入,极有可能是类名或者样式引入错误
6. 如果有样式,但前面有黄色感叹号提示,则是样式属性书写错误。
10. Emmet语法
1. 快速生成HTML结构语法
1. 生成标签,直接输入标签名按tab键即可
2.想要生成多个相同的标签,加上*即可,例如div3就可以快速生成3个div
3. 如果有父子级关系的标签,可以用>,比如ul>li即可
4. 如果有兄弟关系的标签,用+即可,比如div+p
5. 如果生成带有类名或者id名字的,直接写.demo或者#two,再按tab键即可
6. 如果生成的div类名是有顺序的,可以用自增符号$
7. 如果想要在生成的标签内部写内容,可以用{}表示,例如div{文字}。
2. 快速生成CSS样式
基本上简写然后按tab键即可。
11. CSS的元素显示模式
元素显示模式就是元素(标签)以什么方式进行显示,比如<div>自己占一行,比如一行可以放多个div。
HTML元素一般分为块元素和行内元素两种类型。
1. 常见的块元素
有<h1>~<h6>,<p>,<div>,<ul>,<ol>,<li>等,其中<div>标签是最典型的块元素。
2. 块级元素的特点
1. 比较霸道,自己独占一行
2. 高度,宽度,外边距以及内边距都可以控制
3. 宽度默认是容器(父级宽度)的100%
4. 是一个容器及盒子,里面可以放行内或者块级元素。
注意:
1. 文字类的元素内不能使用块级元素
2. <p>标签主要用于存放文字,因此,<p>里面不能放块级元素,特别是不能放<div>
3. 同理,<h1>~<h6>等都是文字类块级标签,里面也不能放其他块级元素
3. 常见的的行内元素
有<a>,<strong>,<b>,<em>,<i>,<del>,<s>,<ins>,<u>,<span>等,其中<span>是最典型的行内元素,有的地方也将行内元素称为内联元素。
4. 行内元素的特点
1. 相邻的行内元素在一行上,一行可以显示多个
2. 高,宽直接设置是无效的
3. 默认宽度就是它本身内容的宽度
4. 行内元素只能容纳文本或其他行内元素
注意:
1. 链接里面不能再放链接
2. 特殊情况链接<a>里面可以放块级元素,但是给<a>转换一下块级模式更安全。
5. 行内块元素
在行内元素中,有几个特殊的标签,<img/>,<input/>,<td>,它们同时具有块元素和行内元素的特点,有些资料称它们为行内块元素。
特点:
1. 和相邻行内元素(行内块)在一行上,但是他们之间会有空白缝隙,一行可以显示多个。(行内元素的特点)
2. 默认宽度就是它本身内容的宽度(行内元素的特点)
3. 高度,行高,外边距以及内边距都可以控制。(块级元素的特点)
6. 元素显示模式转换
1. 转换为块元素:display:block;
2. 转换为行内元素:display:inline;
3. 转换为行内块元素:display:inline-block;
12. CSS的背景
背景属性可以设置背景颜色,背景图片,背景平铺,背景图片位置,背景图像固定等。
1. 背景颜色:background-color
2. 背景图片:background-image(background-image:none|url),其优点是非常便于控制位置。
3. 背景平铺:background-repeat(background-repeat: repeat|repeat-X;|repeat-Y|no-repeat
4. 背景图片位置:background-position: X Y;(X Y代表坐标,可以使用方位名词或者精确单位)
特点:
1. 如果两个值都是方位名词,则两个值前后顺序无关,比如top left和left top效 果一致
2. 如果只指定了一个方位名词,另一个省略,则第二个值默认居中对齐
3. 如果参数是精确坐标,那么第一个肯定是X坐标,第二个肯定是Y坐标,如果 只指定一个数值,那该数值一定是x坐标,另一个默认垂直居中
4. 参数是混合单位(如果指定的两个值是精确单位和方位名词混合使用,则第一 个值是X坐标,第二个值是Y坐标)
1. 背景图像固定
background-attachment属性设置背景图像是否固定或者随着页面的其余部分滚动。
background-attachment: scroll(滚动)| fixed(固定)
2. 背景色半透明
background: rgba(0,0,0,0.3);其中,最后一个参数是alpha透明度,取值范围在0~1 之间。
注意:
1. 背景半透明是指盒子背景半透明,盒子里的内容不受影响
2. 这是CSS的新增属性,是IE9+版本浏览器才支持的。
3. 实际开发中,不太关注兼容性,可以放心使用。
13. CSS的三大特性
1. 层叠性(就近|覆盖原则)
2. 继承性
(子标签会继承父标签的某些样式)(text-,font-,line-这些元素开头的可以继承, 以及color属性)
1. 行高的继承
body {
font: 12px/1.5 Microsoft YaHei;
}
1. 行高可以跟单位也可以不跟单位;
2. 如果子元素没有设置行高,则会继承父元素的行高为1.5;
3. 此时子元素的行高是:当前子元素的文字大小*1.5
3. 优先级
1. 选择器相同,则执行层叠性
2. 选择器不同,则根据选择器权重执行
3. 注意CSS权重的叠加
选择器 | 选择器权重 |
继承或者* | 0,0,0,0 |
元素选择器 | 0,0,0,1 |
类选择器,伪类选择器 | 0,0,1,0 |
ID选择器 | 0,1,0,0 |
行内样式style=”’ | 1,0,0,0 |
!important | 无穷大 |
14. CSS3的新特性
新增的CSS3特性有兼容性问题,ie9+以上才支持。移动端优于PC端
1. CSS3新增选择器
1. 属性选择器
属性选择器可以根据元素特定属性来选择元素。这样就可以不用借助类或id选择器
选择器 | 简介 |
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元素 |
2. 结构伪类选择器
结构伪类选择器(根据文档结构来选择元素,常用于根据父级选择器里面的子元素
选择符 | 简介 |
E: first-child | 匹配父元素中的第一个子元素E |
E:last-child | 匹配父元素中的最后一个E元素 |
E:nth-child(n) | 匹配父元素中的第n个子元素E |
E:first-of-type | 指定类型E的第一个 |
E:last-of-type | 指定类型E的最后一个 |
E:nth-of-type(n) | 指定类型E的第n个 |
nth-child(n)选择父元素的一个或多个特定的子元素
1. n可以是数字,关键字和公式
2. n如果是数字,就是选择第n个子元素,里面数字从1开始
3. n可以是关键字:even偶数,odd奇数
4. n可以是公式:常见的公式如下(如果n是公式,则从0开始计算,但是第0个元素或者超出了元素的个数会被忽略)
公式 | 取值 |
2n | 偶数 |
2n+1 | 奇数 |
5n | 5,10,15... |
n+5 | 从第五个开始(包含第五个)到最后 |
-n+5 | 前五个(包含第五个) |
区别:
1. nth-child 会把所有盒子都排列序号,执行的时候
首先看 :nth-child(1)→之后回去看前面的div→看1和2是否匹配
2. nth-of-type 会把指定的盒子排列序号,执行的时候
首先看 div指定的元素→之后回去看 :nth-of-type(1)第几个孩子
3. 伪元素选择器(重点)
伪元素选择器可以帮助我们利用CSS创建新标签元素,而不需要HTML标签,从而简化HTML结构
选择符 | 简介 |
::before | 在元素内部的前面插入内容 |
::after | 在元素内部的后面插入内容 |
注意:
1. before和after创建一个元素,但是属于行内元素
2. 新创建的这个元素在文档树中是找不到的,所以我们称为伪元素
3. 语法:element::before{}
4. before和after必须有content属性
5. before在父元素内容前面创建元素,after在父元素内容后面插入元素
6. 伪元素选择器和标签选择器一样,权重为1
2. CSS3盒子模型
CSS3中可以通过box-sizing来指定盒模型,有两个值:
即可指定为content-box,border-box,这样我们计算盒子大小的方式就发生了改变。
1. box-sizing: content-box: 盒子大小为width+padding+border(以前默认的)
2. box-sizing: border-box 盒子大小为width
3. CSS3其他特性(了解)
1. 图片模糊
CSS3滤镜filter
filter CSS属性将模糊或颜色偏移等图形效果应用于元素
语法:filter: 函数();
例如: filter:blur(5px); blur模糊处理,数值越大越模糊
2. 计算盒子宽度width: cacl函数
例如:width: cacl(100% - 80); (意思是子盒子永远比父盒子小80px)
(注意:一点要在运算符号前后加空格)(可以使用+-*/进行计算)
4. CSS3过渡(重点)
过渡动画:是从一个状态,渐渐过渡到另外一个状态。经常和 :hover一起,搭配使用
transition: 要过渡的属性 花费时间 运动曲线 何时开始;
1. 属性:想要变化的CSS属性,宽度,高度,背景颜色,内外边距都可以。如果想要所有的属性都变化过渡,写一个all就可以
2. 花费时间:单位是秒(必须写单位)
3. 运动曲线: 默认是ease(可以省略)
4. 何时开始:单位是秒(必须写单位)可以设置延迟触发时间,默认是0s(可以省略)
注意:记住过渡的使用口诀:谁做过渡给谁加
5. 广义的HTML5
指: HTML5本身+CSS3+JavaScript
三. CSS进阶
1. 浮动
1. 标准流(普通流/文档流)
所谓标准流:就是标签按照规定好默认方式排列
块级元素会独占一行,从上向下顺序排列;行内元素会按照顺序,从左到右顺序排列,碰到父元素边缘则自动换行
注意:实际开发中,一个页面基本都包含了三种布局方式(标准流,浮动,定位)(后面移动端学习新的布局方式)
浮动最典型的应用:可以让多个块级元素一行内排列显示
网页布局第一准则:多个块级元素纵向排列找标准流,多个块级元素横向排列找浮动。
float属性用于创建浮动框,将其移动到一边,直到左边缘或右边缘触及包含块或另一个浮动框的边缘。
语法:选择器{float: 属性值}
属性值 | 描述 |
none | 元素不浮动 |
left | 元素向左浮动 |
right | 元素向右浮动 |
2. 浮动特性(重难点)
1. 浮动元素会脱离标准流
2. 浮动的元素会一行内显示并且元素顶部对齐
3. 浮动的元素会具有行内块元素的特性;(此时就可以直接给高度和宽度了)
如果块级盒子没有设置宽度,默认宽度和父级一样宽,但是添加浮动后,它的大小 根据内容来决定。
浮动的盒子中间是没有缝隙的,是紧挨在一起的。
行内元素同理。
4. 如果多个盒子都设置了浮动,则它们会按照属性值一行内显示并且顶端对齐排列。
5. 浮动元素经常和标准流父级搭配使用:
为了约束浮动元素位置,我们网页布局一般采取的策略是:
先用标准流的父元素排列上下位置→之后内部子元素采取浮动排列左右位置。(符合网页布局第一准则)→先设置盒子大小,之后设置盒子的位置(网页布局第二准则)
3. 常见页面布局
top→banner→main→footer
top→banner→left,right→footer
top→banner→box→footer
2. 清除浮动
理想状态:让子盒子撑开父亲,有多少孩子,父盒子就有多高。
1. 为什么要清除浮动
由于父盒子很多情况下,不方便给高度,但是子盒子浮动又不占位置,最后父级盒子高度为0时,就会影响下面的标准流盒子。(所以需要清除浮动)
2. 清除浮动的本质
清除浮动元素造成的影响。
清除浮动之后,父级就会根据浮动的子盒子自动检测高度。父级有了高度,就不会影响下面的标准流了。
语法:选择器 {clear: 属性值}
属性值 | 描述 |
left | 清除左侧浮动的影响 |
right | 清除右侧浮动的影响 |
both | 同时清除左右两侧浮动的影响 |
实际工作中,常用的是clear:both
3. 清除浮动的策略
闭合浮动
4. 清除浮动的方法
1. 额外标签发也称为隔墙法,是W3C推荐的做法;
在浮动元素末尾添加一个空标签。(例如:<div style=”clear.both”></div>)
注意:这个新添加的标签必须是块级标签。
优点:通俗易懂
缺点:添加许多无意义的标签,结构化较差。
2. 父级添加overflow属性
将其属性值设置为hidden,auto,scroll(注意是给父元素添加代码)
优点:代码简洁
缺点:无法显示溢出部分
3. 父级添加after伪属性
也是给父元素添加
.clearfix:after {
content:””;
display: block;
height: 0;
clear: both;
visibility: hidden;
}
.clearfix {
/* IE6,7专用*/
*zoom: 1;
}
4. 父级添加双伪属性
.clearfix:before,
.clearfix:after {
content: “”;
display: table;
}
.clearfix:after {
clear: both;
}
.clearfix {
*zoom:1
}
3. 定位
浮动可以让多个块级盒子一行没有缝隙排列显示,经常用于横向排列盒子;
定位则可以让盒子自由的在某个盒子内移动位置或者固定屏幕中某个位置,并且可以压住其他盒子。
1. 定位的组成
定位=定位模式+边偏移(定位模式用于指定一个元素在文档中的定位方式,边偏移则决定了该元素的最终位置)
2. 定位模式
(通过CSS的position属性来设置)
值 | 语义 |
static | 静态定位 |
relatives | 相对定位 |
absolute | 绝对定位 |
fixed | 固定定位 |
sticky | 粘性定位 |
3. 边偏移
边偏移就是定位的盒子移动到最终位置,有top,bottom,left和right4个属性
边偏移属性 | 示例 | 描述 |
top | top:80px | 顶端偏移量,定义元素相对于其父元素上边线的距离 |
bottom | bottom:80px; | 底部偏移量,定义元素相对于其父元素下边线的距离 |
left | left:80px; | 左侧偏移量,定义元素相对于其父元素左边线的距离 |
right | right:80px; | 右侧偏移量,定义元素相对于其父元素右边线的距离 |
4. 静态定位
静态定位是元素的默认定位方式,无定位的意思
语法:选择器 {position: static;}
静态定位按照标准流特性摆放位置,它没有边偏移。
5. 相对定位relative(重要)
即在元素移动位置时,是相对于它原来的位置来说的。
语法:选择器 {position: relative}
特点:
1. 它是相对于自己原来的位置来移动的(参照点是自己原来的位置)
2. 原来在标准流的位置继续占有,后面的盒子仍然以标准流的方式对待它(不脱标)
6. 绝对定位absolute(重要)
即元素在移动位置时,是相对于它祖先元素来说的。
语法:选择器 {position: absolute}
特点:
1. 如果没有祖先元素或者祖先元素没有定位,则以浏览器为准定位
2. 如果祖先元素有定位(相对,绝对,固定定位),则以最近一级的有定位祖先元素为参考点移动位置。
3. 绝对定位不再占有原先位置(是脱标的)
7. 相对定位和绝对定位的使用场景
子绝父相:即,子级使用绝对定位,父级则需要使用相对定位
由来:
1. 子级绝对定位,不会占有位置,可以放到父盒子里面的任意一个地方,不会影响其他的兄弟盒子。
2. 父盒子需要加定位限制子盒子在父盒子内显示
3. 父盒子布局时,需要占有位置,因此父亲只能是绝对定位
8. 固定定位(重要)
即元素固定在浏览器可视区的位置。
主要使用场景:可以在浏览器页面滚动时元素的位置不会改变。
语法:选择器 {position: fixed}
特点:
1. 以浏览器的可视窗口为参照点移动元素
跟父元素没有任何关系,不随滚动条滚动。
2. 固定定位不再占有原先的位置
固定定位也是脱标的,其实固定定位也可以看做是一种特殊的绝对定位。
3. 固定定位小技巧(固定在版心右侧位置)
让固定定位的盒子left:50%,走到浏览器可视区的一半位置
让固定定位的盒子margin-left:版心宽度的一半距离,多走版心宽度的一半位置
即可固定定位的盒子贴着版心右侧对齐
9. 粘性定位sticky(了解)
可以认为是相对定位和固定定位的混合。
语法:选择器 {position: sticky; top:10px;}
特点:
1. 以浏览器的可视窗口为参照点移动元素(固定定位特点)
2. 粘性定位占有原先位置(相对定位特点)
3. 必须添加top,left,right,bottom其中一个才有效
4. 跟页面滚动搭配使用。兼容性较差。
10. 定位叠放次序
在使用定位布局时,可能会出现盒子重叠的情况。
此时,可以使用z-index来控制盒子的前后次序(z轴)
语法:选择器 {z-index: 1;}
1. 数值可以是正整数,负整数或0,默认是auto,数值越大,盒子越靠上
2. 如果属性值相同,则按照书写顺序,后来居上
3. 数字后面不能加单位
4. 只有定位的盒子才有z-index属性
11. 定位的拓展
1. 绝对定位的盒子居中
加了绝对定位的盒子不能通过margin:0 auto水平居中,但是可以通过以下计算方法实现水平和垂直居中。
1. left: 50%; (让盒子的左侧移动到父级元素的水平中心位置)
2. margin-left: -100px; (让盒子向左移动自身宽度的一半)
2. 定位特殊特性
1. 行内元素添加绝对或者固定定位,可以直接设置高度和宽度
2. 块级元素添加绝对或固定定位,如果不给宽度或者高度,默认大小是内容的大小
3. 脱标的盒子不会触发外边距塌陷
浮动元素,绝对定位(固定定位)元素不会触发外边距合并问题
4. 绝对定位(固定定位)会完全压住盒子
1. 浮动元素不同,浮动元素只会压住它下面标准流的盒子,但是不会下面标准流盒子 里面的文字(图片)
(浮动之所以不会压住文字,因为浮动产生的目的最初是为了做文字环绕效果的。文字会围绕浮动元素)
2. 但是绝对定位(固定定位)会压住下面标准流所有的内容
4. CSS属性书写顺序
1. 布局定位属性
display/position/float/clear/visibility/overflow
2. 自身属性
width/height/margin/padding/border/background
3. 文本属性
color/font/text-decoration/text-align/vertical-align/white-space/break-word
4. 其他属性(CSS3)
content/cursor/border-radius/box-shadow/text-shadow/background:linear-gradient
5. 开发导航栏注意点
实际开发中,我们不会直接用链接a而是用li包含链接a(li+a)的做法
1. li+a语义更清晰,是有条理的列表型内容
2. 如果直接用a,搜索引擎容易辨别为有堆砌关键字嫌疑,从而影响网站排名。
3. nav导航栏可以不给宽度,将来可以继续添加其余文字
6. 精灵图
一个网页中往往会应用很多小背景图像作为修饰,当网页中的图像过多时,服务器就会频繁地接收和发送请求图片,造成服务器请求压力过大,这将大大降低页面地加载速度。
为了有效的减少服务器接收和发送请求地次数,提高页面的加载速度,出现了CSS精灵技术。(也称CSS Sprites,CSS雪碧)
使用精灵图的核心:
1. 精灵技术主要针对背景图片使用。就是把多个小背景图片整合到一张大图片中。
2. 这个大图片也称为sprites精灵图或者雪碧图
3. 移动背景图片位置,此时可以使用background-position
4. 移动的距离就是这个目标图片的x和y坐标。注意网页中的坐标有所不同。
5. 因为一般情况下都是往上往左走,所以数值是负值
6. 使用精灵图的时候需要精确测量,每个小背景图片的大小和位置
7. 字体图标
字体图标使用场景:主要用于显示网页中通用,常用的一些小图标
1. 精灵图有诸多缺点
1. 图片文件还是比较大的
2. 图片本身放大和缩小会失真
3. 一旦图片制作完毕想要更换非常复杂
此时,字体图标iconfont很好的解决了以上问题
字体图标展示的是图标,本质属于字体。
2. 字体图标的优点
1. 轻量级:一个图标字体比一系列的图像要小,一旦字体加载了,图标就会马上渲染 出来,减少了服务器请求。
2. 灵活性:本质其实是文字,可以很随意的改变颜色,产生阴影,透明效果,旋转等
3. 兼容性:几乎支持所有的浏览器,请放心使用。
注意:字体图标不能替代精灵技术,只是对工作中图标部分技术的提升和优化
3. 字体图标的使用步骤
1. 字体图标的下载
icomoon字库 Icon Font & SVG Icon Sets ❍ IcoMoon(免费,但是是国外的服务器,打开较慢)
阿里iconfont字库 iconfont-阿里巴巴矢量图标库(免费)
2. 字体图标的引入(引入到我们html页面中)
把下载包里的fonts文件夹放入页面根目录下
在CSS样式中全局声明字体(就是把这些字体通过CSS引入到我们页面中)
(复制字体图标icomoon文件夹下的style.css里面的其中一小段代码到css中)
html标签内添加小图标
(复制字体图标icomoon文件夹下demo.html里面对应字体后面的小方框)
必须给此文字指定字体(font-family: 'icomoon';)
3. 字体图标的追加(以后添加新的小图标)
找到压缩包里面的selection.json从新上传,然后选中自己想要的新图标,从新下 载压缩包,并替换原来的文件即可。
8. CSS用户界面样式
1. 更改用户鼠标样式(cursor)
属性值 | 描述 |
default | 小白(默认) |
pointer | 小手 |
move | 移动 |
text | 文本 |
not-allowed | 禁止 |
2. 表单轮廓(outline)
给表单添加outline: 0;或者 outline: none;样式之后,就可以去掉默认的蓝色边框
3. 防止表单域拖拽域(resize)
textarea {resize: none}
9. vertical-align属性应用
经常用于设置图片或表单(行内块元素)和文字垂直对齐。(只针对行内元素或者行内块元素有效)
语法:vertical-align : baseline|top|middle|bottom
值 | 描述 |
baseline | 默认,元素放在父元素基线上 |
top | 把元素顶端与行中最高元素的顶端对齐 |
middle | 把此元素放在父元素的中部 |
bottom | 把元素顶端与行中最低的元素的顶端对齐 |
解决图片底侧默认空白缝隙问题
bug:图片底侧会有一个空白缝隙,原因是行内块元素会和文字的基线对齐。
主要解决方案有两种:
1. 给图片添加vertical-align :middle|top|bottom等(提倡使用)
2. 把图片元素转换为块级元素display: block;
10. 溢出的文字省略号显示
1. 单行文本溢出显示省略号
1. 强制一行内显示文本(white-space: nowrap;(默认normal自动换行))
2. 超出部分隐藏(overflow: hidden;)
3. 文字用省略号替代超出的部分(text-overflow: ellipsis)
2. 多行文本溢出显示省略号
(有较大兼容性问题,适合于webkiyt浏览器或移动端)
1. overflow:hidden
2. text-overflow:ellipsis
3. display: -webkit-box;(弹性伸缩盒子模型)
4. -webkit-line-clamp:2(限制在一个块元素显示的文本的行数)
5. -webkit-box-orient:vertical;(设置或检索伸缩盒子对象的子元素的排列方式)
(更推荐让后台人员来做这个效果,因为后台人员可以设置显示多少个字,操作更简单)
11. 浏览器私有前缀
浏览器私有前缀是为了兼容老版本的写法,比较新的浏览器无需添加
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;
12. 元素的显示与隐藏
类似网站广告,当我们点击关闭就不见了,但是我们重新刷新页面,会重新出现。
本质:让一个元素在页面中隐藏或者显示出来。
1. display显示元素
display属性用于设置一个元素如何显示(重要)
display: none;(隐藏对象)
display: block;(除了转换为块级元素之外,同时还有显示元素的意思)
display隐藏元素后,不再占有原来的位置
(后面其应用极其广泛,搭配JS可以做很多的网页特效)
2. visibility显示隐藏
visibility 可见性,visibility隐藏元素后,继续占有原来的位置
visibility: visible; 元素可见
visibility: hidden; 元素隐藏
如果隐藏元素想要原来的位置:就用visibility: hidden;
如果隐藏元素不想要原来位置,就用display: none(用处更多)
3. overflow溢出显示隐藏
overflow属性指定了如果内容溢出一个元素的宽(超过其指定高度及宽度)时,会发生什么。
但是,如果有定位的盒子,请慎用overflow:hidden,因为它会隐藏多余的部分
属性值 | 描述 |
visible | 不剪切内容也不添加滚动条 |
hidden | 不显示超过对象尺寸的内容,超出的部分隐藏掉 |
scroll | 不管超出内容与否,总是显示滚动条 |
auto | 超出自动显示滚动条,不超出不显示滚动条 |
四. 盒子模型
页面布局要学习三大核心:盒子模型,浮动,定位
网页布局过程:
1. 先准备好相关的网页元素,网页元素基本上都是盒子box;
2. 利用CSS设置好盒子样式,然后摆放到相应位置
3. 往盒子里面装内容
1. 网页布局的核心本质
利用CSS摆盒子
2. 盒子模型的组成
1. border边框
border可以设置元素的边框。边框:粗细,样式,颜色
border: border-width||border-style||border-color
solid(实线)|dashed(虚线)|dotted(点线)
边框简写:border: 1px solid red;(没有顺序)
边框分开写法:border-top: 1px solid red;(只设定上边框)
表格的细线边框:border-collapse: collapse;(collapse单词是合并的意思,表示相邻边框合并在一起)
边框会额外增加盒子的实际大小
2. content内容
3. 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个值,上,右,下,左(顺时针) |
当给盒子指定padding值之后,发生了:
1. 内容和边框有了距离(添加了内边距)
2. padding影响力盒子实际大小(盒子已经有了高度和宽度,此时再指定内边框,会撑大盒子)
4. margin外边距
用于设置盒子和盒子之间的距离。
属性 | 作用 |
margin-left | 左外边距 |
margin-right | 右外边距 |
margin-top | 上外边距 |
margin-bottom | 下外边距 |
margin简写方式与padding完全一致
外边距可以让块级盒子水平居中,但需满足两个条件:
1. 盒子必须指定了宽度;
2. 盒子左右的外边距都设置为auto
常见的写法,以下三种都可以:
margin-left: auto; margin-right: auto;
margin: auto;
margin: 0 auto;
以上方法是让块级元素水平居中,行内元素或者行内块元素水平居中给其父元 素添加text-align: center即可。
margin定义块元素的垂直外边距时,可能会出现外边距的合并。主要有两种情况:
1. 相邻块元素垂直外边距的合并
当上下相邻的两个块元素(兄弟关系)相遇时,如果上面的元素有下外边距,下面的元素有上外边距,则他们之间的垂直间距取两个值中的较大者。
解决方案:只给其中一个盒子加margin
2. 嵌套块元素垂直外边距的塌陷
解决方案:
1. 可以为父元素定义上边框
2. 可以为父元素定义上内边距
3. 可以为父元素添加overflow:hidden
清除内外边距:
* {
padding: 0;
margin: 0;
}
注意:行内元素为了照顾兼容性,尽量只设置左右内外边距,不要设置上下内 外边距。但是转换为块级和行内块元素就可以了。
3. 盒子阴影
语法:box-shadow: h-shadow v-shadow blur spread color inset
值 | 描述 |
h-shadow | 必须。水平阴影的位置,允许为负值 |
v-shadow | 必须。垂直阴影的位置,允许为负值 |
blur | 可选。模糊距离 |
spread | 可选。阴影的尺寸。 |
color | 可选。阴影的颜色。 |
inset | 可选。将外部阴影(outset)改为内部阴影 |
默认是外阴影,但是不可以写这个单词,否则导致阴影无效。
盒子阴影不占用空间,不会影响其他盒子排列。
4. 文字阴影
语法:text-shadow: h-shadow v-shadow blur color;
五. 2D转换
转换可以实现元素的位移,旋转,缩放等效果(转换可以简单理解为变形)
移动:translate;
旋转:rotate;
缩放:scale;
1. 2D转换之translate
语法:
transform: translate(x,y);(或者分开写)
transform:translateX(n);
transform:translateX(Y);
重点:
1. 定义2D转换中的移动,沿着X和Y轴移动元素
2. translate最大优点:不会影响到其他元素的位置
3. translate中的百分比单位是相对于自身元素的translate:(50%,50%)
4. 对行内标签是没有效果
2. 2D转换之旋转rotate
语法:transform: ratate(度数)
重点:
1. rotate里面跟度数,单位是deg,比如rotate(45deg)
2. 角度为正时,顺时针,负时,为逆时针
3. 默认旋转的中心点是元素的中心点
3. 2D转换中心点
语法: transform-origin: X,Y;
重点:
1. 注意后面的参数x和y用空格隔开
2. x,y默认转换的中心点是元素的中心点(50% 50%)
3. 还可以给x y设置像素或者方位名词(top bottom left right center)
4. 2D转换之scale
语法:transform: scale(x,y);
注意:其中的x和y用逗号分隔
1. transform: scale(1,1); :宽和高都放大了一倍,相对于没有放大;
2. transform: scale(2,2); :宽和高都放大了2倍
3. transform: scale(2); :只写了一个参数,第二个参数则和第一个参数一样,相当于scale(2,2);
4. transform: scale(0.5,0.5); :缩小
5. scale缩放最大优势:可以设置中心点缩放,默认以中心点缩放的,而且不影响其他盒子
5. 2D转换综合写法
注意:
同时使用多个转换,其格式为:transform:translate() rotate() scale()…等
其顺序会影响转换的效果(先旋转会改变坐标轴方向)
当我们同时有位移和其他属性的时候,记得要将位移放到最前
6. CSS3动画(animation)
相比较过渡,动画可以实现更多变化,更多控制,连续自动播放等效果。
1. 动画的基本使用
制作动画分为两步:
1. 先定义动画
2. 再使用(调用动画)
用keyframes定义动画(类似定义类选择器)
@keyframes 动画名称 {
0% {
width: 100px;
}
100% {
width: 200px;
}
}
动画序列
1. 0%是动画的开始,100%是动画的完成。这样的规则就是动画序列
2. 在@keyframes中规定某项CSS样式,就能创建由当前样式逐渐改为新样式的动画效果
3. 动画是使元素从一种样式逐渐变化为另一种样式的效果。您可以改变任意多的样式,任意多的次数
4. 请用百分比来规定变化发生的时间,或用关键词”form”和”to”,等同于0%和100%
元素使用动画
div {
width: 200px;
height: 200px;
background-color: aqua;
margin: 100px auto;
/*调用动画*/
animation-name: 动画名称;
/*持续时间*/
animation-duration: 持续时间;
}
2. 动画常用属性
属性 | 描述 |
@keyframes | 规定动画 |
animation | 所有动画属性的简写属性,除了animation-play-state属性 |
animation-name | 规定@keyframes动画的名称(必须的) |
animation-duration | 规定动画完成一个周期所花费的秒或毫秒,默认是0.(必须的) |
animation-timing-fuction | 规定动画的速度曲线,默认是“ease” |
animation-delay | 规定动画何时开始,默认是0 |
animation-iteration-count | 规定动画被播放的次数,默认是1,还有infinite(无限的) |
animation-direction | 规定动画是否在下一周期逆向播放,默认是“normal”,alternate逆播放 |
animation-play-state | 规定动画是否正在运行或暂停,默认是”running”,还有”paused” |
animation-fill-mode | 规定动画结束后状态,保持forwards回到起始backwards |
动画简写属性:
1. 简写属性里面不包含animation-play-state
2. 暂停动画:animation-play-state: paused;经常和鼠标经过等其他配合使用
3. 速度曲线细节
animation-timing-fuction:规定动画的速度曲线,默认是”ease”
值 | 描述 |
linear | 动画从头到尾的速度是相同的,匀速的 |
ease | 默认,动画从低速开始,然后加快,在结束前变慢 |
ease-in | 动画以低速开始 |
ease-out | 动画以低速结束 |
ease-in-out | 动画以低速开始和结束 |
steps() | 指定了时间函数中的间隔数量(步长) |
六. 3D转换
三维坐标系,立体空间是由三个轴共同组成的
X轴:水平向右,注意:X右边是正值,左边是负值
Y轴:水平向下,注意:Y下面是正值,上面是负值
Z轴:垂直屏幕,注意:往外面是正值,往里面是负值
1. 3D转换主要知识点
1. 3D位移:translate3d(x,y,z)
2. 3D旋转:rotate3d(x,y,z)
3. 透视:perspective
4. 3D呈现transform-style
2. 3D移动translate3d
1. transform:translateX(100px): 仅仅在x轴上移动
2. transform:translateY(100px): 仅仅在y轴上移动
3. transform:translateZ(100px): 仅仅在z轴上移动
4. transform:translate3d(x,y,z): 在三个轴分别移动的距离
3. 透视perspective
透视我们也称为视距:视距就是人的眼睛到屏幕的距离
距离视觉点越近的在电脑平面成像越大,越远成像越小
透视(perspective)写在被观察元素的父盒子上面
d:就是视距,视距就是一个距离人的眼睛到屏幕的距离
z(translateZ):就是z轴,物体距离屏幕的距离,z轴越大(正值)我们看到的物体越大
4. 3D旋转rotate3d
transform: rotateX(45deg): 沿着x轴正方向旋转45度
transform: rotateY(45deg): 沿着y轴正方向旋转45度
transform: rotateZ(45deg): 沿着z轴正方向旋转45度
transform: rotate3d(x,y,z,deg): 沿着自定义轴旋转deg度
xyz是表示旋转轴的矢量,是标示你是否希望沿着该轴旋转,最后一个标示旋转的角度
transform: rotate3d(1,0,0,45deg)就是沿着x轴旋转45deg
transform: rotate3d(1,1,0,45deg)就是沿着对角线旋转45deg
5. 元素旋转方向的判断
左手准则:
左手的手拇指指向X轴的正方向,其余手指的弯曲方向就是该元素沿着X轴旋转的方向。
左手的手拇指指向Y轴的正方向,其余手指的弯曲方向就是该元素沿着Y轴旋转的方向。
7. 3D呈现transform-style
控制子元素是否开启三维立体环境
transform-style:flat子元素不开启3d立体空间 默认的
transform-style: preserve-3d; 子元素开启立体空间
代码写给父级,但是影响的是子盒子
七. 移动端
1. 视口
视口就是浏览器显示页面内容的屏幕区域,视口可以分为布局视口,视觉视口和理想视口。
1. 布局视口(layout viewport)
一般移动设备的浏览器都默认设置了一个布局视口,用于解决早期的pc端页面在手机上显示的问题。
IOS,Android基本都将这个视口分辨率设置为980px,所以PC上的页面大多都能在手机上呈现,只不过元素看上去很小,一般默认可以通过手动缩放页面。
2. 视觉视口
字面意思,它是用户正在看到的网站的区域。注意:是网站的区域
我们可以通过缩放去操作视觉视口,但不会影响布局视口,布局视口仍保持原来的宽度。
3. 理想视口(ideal viewport)
为了使网站在移动端有最理想的浏览和阅读而设定。理想视口,对设备来讲,是最理想的视口尺寸
需要手动添加meta视口标签通知浏览器操作
meta视口标签的主要目的:布局视口的宽度应该与理想视口的宽度一致,简单理解就是设备有多宽,我们的布局的视口就多宽。
4. meta视口标签
(!感叹号 按tab键自动生成)
<meta name=”viewport” content=”width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=”1.0”>
属性 | 属性值 |
width | 宽度设置的是viewport宽度,可以设置device-width特殊值 |
initial-scale | 初始缩放比,大于0的数字 |
maximum-scale | 最大缩放比,大于0的数字 |
minimum-scale | 最小缩放比,大于0的数字 |
user-scalable | 用户是否可以缩放,yes或no(1或0) |
5. 标准的viewport设置
视口宽度与设备保持一致
视口的默认缩放比列1.0
不允许用户自行缩放
最大允许的缩放比例1.0
最小允许的缩放比列1.0
2. 二倍图
物理像素&物理像素比
物理像素点指的是屏幕显示的最小颗粒,是物理真实存在的。这是厂商出厂时就设置好了。
我们开发时候的1px不是一定等于1个物理像素的
PC端页面,1个px等于1个物理像素的,但是移动端就不尽相同(例如iphone8里面,1px等于两个物理像素,当width=375px时候,就把它750的物理像素占满了)
一个PX能显示的物理像素点的个数,称为物理像素比或屏幕像素比。
物理像素就是我们说的分辨率 iPhone8的物理像素是750(1PX开发像素=2个物理像素)
例如:
设备 | 尺寸(英寸) | 开发尺寸(px) | 物理像素比(dpr) |
iphone3G | 3.5 | 320*480 | 1.0 |
iphone4/4s | 3.5 | 320*480 | 2.0 |
iphone6 | 4.7 | 375*667 | 2.0 |
iphone6plus | 5.5 | 414*736 | 3.0 |
3. 背景缩放background-size
(规定背景图像的尺寸)
background-size: 背景图片宽度 背景图片高度;
单位: 长度|百分比|cover|contain
cover 使背景图像完全覆盖背景区域 可能有部分背景图片显示不全(超出了)
contain 把高度和宽度等比例拉伸 当宽度或高度铺满div盒子 就不再进行拉伸了
4. 移动端开发选择
移动端主流方案
1. 单独制作移动端页面
2. 响应式页面兼容移动端
1. 单独移动端页面
通常情况下,网站域名前面加m(mobile)可以打开移动端。
通过判断设备,如果是移动设备打开,则跳到移动端页面。
2. 响应式兼容PC移动端
通过判断屏幕宽度来改变样式,以适应不同终端
缺点:制作麻烦,需要花很大精力去调兼容性问题
5. 移动端技术解决方案
1. 移动端CSS初始化推荐使用normalize.css/
Normalize.css:保护了有价值的默认值
Normalize.css:修复了浏览器的bug
Normalize.css:是模块化的
Normalize.css:拥有详细的文档
2. CSS3盒子模型box-sizing
传统的盒子模型:border-sizing: content-box;(传统盒子模型=width+border+padding)
CSS3的盒子模型:border-sizing: border-box;
CSS3盒子模型特点: padding和border不会再撑大盒子了
3. 传统orCSS3盒子模型?
移动端可以全部CSS3盒子模型
PC端如果完全需要兼容,我们就用传统模式,如果不考虑兼容性,我们就选择CSS3盒子模型。
4. 特殊样式
/*CSS3盒子模型*/
box-sizing: border-box;
-webkit-box-sizing: border-box;
/*点击高亮我们需要清除,设置为transparent完成透明*/
-webkit-tap-highlight-color: transparent
/*在移动端浏览器默认的外观在IOS上加上这个属性才能给按钮和输入框自定义样式*/
-webkit-apperance: none;
/*禁用长按页面时弹出菜单*/
img,a { -webkit-touch-callout: none;}
6. 移动端常见布局
1. 单独制作移动端页面
流式布局(百分比布局)
flex弹性布局(强烈推荐)
less+rem+媒体查询布局
混合布局
2. 响应式页面兼容移动端
媒体查询
bootstarp
3. 流式布局
流式布局,也称非固定像素布局
通过盒子的宽度设置成百分比来根据屏幕的宽度来进行伸缩,不受固定像素的限制,内容向两侧填充。
max-width: 最大宽度(max-height 最大高度)
min-width: 最小宽度(min-height 最小高度)
4. flex弹性布局
flex弹性布局(给父元素添加display: flex)
传统布局与flex布局
传统布局:兼容性好,布局繁琐,局限性,不能在移动端很好的布局
flex弹性布局:操作方便,布局极为简单,移动端应用很广泛,PC端浏览器支持情况较差
IE11或更低版本,不支持或仅部分支持。
建议:
1. 如果是PC端页面布局,我们还是传统布局
2. 如果是移动端或者不考虑兼容性问题的PC端页面布局,我们还是使用flex弹性布局
5. flex布局原理
flex是flexible Box的缩写,意味“弹性布局”,用来为盒状模型提供最大的灵活性,任何一个容器都可以指定为flex布局。
当我们为夫元素设为flex布局以后,子元素的float,clear和vertical-align属性将失效
伸缩布局=弹性布局=伸缩盒布局=弹性盒布局=flex布局(名字不同,都是同一个东西)
采用flex布局的元素,称为Flex容器,简称“容器”。
它的所有子元素自动成为容器成员,称为flex项目,简称“项目”
总结flex布局原理:就是通过给父盒子添加flex属性,来控制子盒子的位置和排列方式
1. 常见父项属性(对父元素设置的)
flex-direction | 设置主轴的方向 |
justify-content | 设置主轴上的子元素排列方式 |
flex-wrap | 设置子元素是否换行 |
align-content | 设置侧轴上的子元素的排列方式(多行) |
align-items | 设置侧轴上的子元素的排列方式(单行) |
flex-flow | 复合属性,相当于同时设置了flex-direction和flex-wrap |
在flex布局中,是分主轴和侧轴两个方向:
默认主轴方向就是x轴方向,水平向右
默认侧轴方向就是y轴方向,水平向下
注意:主轴和侧轴是会变化的,就看flex-direction设置谁为主轴,剩下的就是侧轴。
属性值 | 说明 |
row | 默认值从左到右 |
row-reverse | 从右到左 |
column | 从上到下 |
column-reverse | 从下到上 |
justify-content设置主轴上的子元素排列方式
注意:使用这个属性之前一定要确定好主轴是哪个
属性值 | 说明 |
flex-start | 默认值从头部开始,如果主轴是x轴,则从左到右 |
flex-end | 从尾部开始排列 |
center | 在主轴居中对齐(如果主轴是X轴则水平居中) |
space-around | 平分剩余空间 |
space-between | 先两边贴边,再平分剩余空间(重要) |
flex-wrap设置子元素是否换行
(flex布局中,默认的子元素是不换行的,如果装不开,会缩小子元素的宽度,放到父元素里面)
属性值 | 说明 |
nowrap | 默认值 |
wrap | 换行 |
align-items设置侧轴上的子元素排列方式(单行)
属性值 | 说明 |
flex-start | 从上到下 |
flex-end | 从下到上 |
center | 居中 |
stretch | 拉伸 |
align-content 设置侧轴上的子元素排列方式(多行)
属性值 | 说明 |
flex-start | 默认值在侧轴的头部开始排列 |
flex-end | 在侧轴的尾部开始排列 |
center | 在侧轴中间显示 |
stretch | 设置子项元素高度评分父元素高度 |
space-between | 子项在侧轴先分布在两头,再平分剩余空间 |
space-around | 子项在侧轴平分剩余空间 |
flex-flow
flex-direction: column 与flex-wrap: wrap可以简写成下面形式:
flex-flow: column wrap;
2. flex布局子项常见属性
flex子项目占的份数
flex属性定义子项目分配剩余空间,用flex来表示占多少份数
.item {
flex: <number>; /*default 0*/
}
align-self控制子项自己在侧轴的排列方式
align-self属性允许单个项目有与其他项目不一样的对齐方式,可覆盖align-items属性
默认值为auto,表示继承父元素的align-items属性,如果没有父元素,则等同于stretch
order属性定义子项排列顺序(先后顺序)
数值越小,排列越靠前,默认是0,
注意:和z-index不一样
6. rem适配布局
(rem是一个单位)
1. 能够使用rem单位
rem是一个相对单位,
em是相对于父元素的字体大小来说的
rem是相对于html元素字体大小来说的
rem的优点就是可以通过修改html里面的文字大小来改变页面中元素的大小
2. 能够使用媒体查询(Media Query)的基本语法
使用@Media查询,可以针对不同的媒体类型定义不同的样式
@Media可以针对不同的屏幕尺寸设置不同的样式
当重置浏览器大小的过程中,页面也会根据浏览器的宽度和高度重新渲染页面
语法:
@media mediatype and|not|only (media feature) {
CSS-Code;
}
用@media开头
mediatype媒体类型
将不同的终端设备划分成不同的类型,称为媒体类型。
值 | 解释说明 |
all | 用于所有设备 |
| 用于打印机和打印预览 |
scree | 用于电脑屏幕,平板电脑,智能手机 |
关键字 and not only
关键字将媒体类型或多个媒体特性连接到一起作为媒体查询条件
and:相当于且
not:排除某个媒体类型,相当于“非”
only:指定某个特定的媒体类型,可以省略。
media feature媒体特性 必须有小括号包含
值 | 解释说明 |
width | 定义输出设备中页面可见区域的宽度 |
min-width | 定义输出设备中页面最小可见区域宽度 |
max-width | 定义输出设备中页面最大可见区域宽度 |
媒体查询+rem实现元素动态大小变化
即实现,不同设备宽度,实现页面元素大小的动态变化
引入资源
当样式比较繁多的时候,我们可以针对不同的媒体使用不同stylesheets(样式表)
原理,就是直接在link中判断设备尺寸,然后引用不同的CSS文件
例如:
当屏幕大于等于640px以上的,我们让div一行显示2个
当屏幕小于640 我们让div一行显示一个
语法规范:
<link rel=”stylesheet” media=”mediatype and|not|only (media feature) “href=”mystylesheet.css”)
此处的媒体查询就是充当判断条件的作用。
3. 能够使用Less基本语法
CSS是一门非程序式语言,没有变量,函数,SCOPE(作用域)等概念。
Less是一门CSS扩展语言,也称CSS预处理器,在现有CSS语法上,为CSS加入程序式语言的特性。
Less中文网址:Less.js 中文网
使用:
首先新建一个后缀名为less的文件,在这个less文件里面书写less语句。
Less变量
@变量名: 值;
Less编译
把less文件编译生成为css文件,这样我们的html文件才能使用。
4. 能够使用Less中的嵌套
语法:
#header {
.logo {
width: 300px;
}
}
如果遇见(交集|伪类|伪元素选择器)
内层选择器的前面没有&符号,则被解析为父选择器的后代
如果有&符号,它就被解析为父元素自身或父元素的伪类
5. 能够使用Less中的运算
乘号*和除号(/)的写法
运算符中间左右有个空格隔开 1px + 5
对于两个不同的单位值之间的运算,运算结果的值取第一个值的单位
如果两个值之间只有一个值有单位,则运算结果就取该单位。
6. 能够使用2种rem适配方案
让一些不能等比适应的元素,达到当设备尺寸发生变化的时候,等比例适配当前设备
使用媒体查询根据不同设备按比例设置html的字体大小,然后页面元素使用rem做尺寸单位,当html字体大小变化元素尺寸也会发生变化,从而达到等比例的适配。
rem实际开发适配方案
1. 按照设计稿与设备宽度的比例,动态计算并设置html根标签的font-size大小;(媒体查询)
2. CSS中,设计稿元素的宽,高,相对位置等取值,按照同等比例换算为rem为单位的值。
技术方案1:less+媒体查询+rem
技术方案2(推荐):flexible.js+rem
技术方案1:
1. 设计稿常见尺寸宽度
一般情况下,我们以一套或者两套效果图适应大部分的屏幕,放弃极端屏或对其优雅降级,牺牲一些效果,现在基本上以750为准。
2. 动态设置html标签font-size大小
3. 元素大小取值方法
最后的公式: 页面元素的rem值=页面元素值(PX)/(屏幕宽度/划分的份数)
屏幕宽度/划分的份数就是html font-size的大小
或者:页面元素的rem值=页面元素值(px)/html font-size字体大小
技术方案2:
flexible的下载地址:gibhub地址:http://github.com/amfe/lib-flexible