一、前言
从今天起,我将为大家梳理一下HTML、CSS、JavaScript的基础知识。
如果你对Web前端开发并不了解,那么这个系列文章能够让你掌握Web前端开发的基础知识,再结合练习,就可以正式入门Web前端开发啦。
如果你已是一个Web前端开发人员,那么这个系列文章能够成为你工作中的好助手,你能够在文章中查询你要用到的知识点。
同时,该系列文章中引用的文章多来自于HTML5学堂,感谢HTML5学堂老师们在我学习过程中的帮助!
如果你在阅读过程中遇到困难,或我的描述有不详尽和有错误,请指出,万分感谢。
二、网页中常见的图片格式
1.网页中常见的图片格式有哪些?
Jpg, gif, png-8, png-24
http://www.h5course.com/a/2015050298.html
2.这些不同图片格式各自有什么特点
动态支持程度:gif
图片质量:png24 > jpg > png-8 > gif
透明程度的支持:
透明程度
Gif 不支持半透明,支持全透明
Jpg 不支持半透明,不支持全透明
Png-8 不支持半透明,支持全透明
Png-24 支持半透明,全透明
兼容问题:
IE 6、7、8 PNG不兼容
三、代码注释的写法
1.html代码:
2.CSS代码:/* …….. */
3.js代码:
a.单行注释://
b.多行注释:/* ….. */ 星号对齐;每加一行开头多加一个星号;星号后面加一个空格
/* ….
* …
* …
* … */
四、HTML5介绍
1.什么是HTML5
HTLM5 = HTML(结构 ) + CSS(样式) + JavaScript(行为)
a.HTML5:结构,内容排版
b.CSS:样式,页面布局、美化
c.HTML+CSS纯静态开发——搭载基本的页面(有样式)
d.JavaScript:行为,网页中的动作,包括自动动作与操作反馈
2.HTML基本代码模板
<!doctype html>
<html>
<head>
</head>
<body>
</body>
</html>
3.HTML标签规则
a.标签通常是成对出现的,一开一关
b.<标签名字> 内容区 </标签名字>
c.不成对出现的单标签包括:meta(<meta charset="utf-8">)、<link>、<img>、<input>、<br>等等
d.使用Tab键进行缩进——缩进原则为:每一个级别在当前状态下缩进一次
e.网页文档的读取顺序是由上到下
4.
<!doctype html>:文档声明,声明文档的基本类型。
5.0版本开始,只需此方式简化编写,之前版本需要定义很多内容
<!DOCTYPE> 声明必须是 HTML 文档的第一行,位于 <html> 标签之前。
<!DOCTYPE> 声明不是 HTML 标签;它是指示 web 浏览器关于页面使用哪个 HTML 版本进行编写的指令。
在 HTML 4.01 中,<!DOCTYPE> 声明引用 DTD,因为 HTML 4.01 基于 SGML。DTD 规定了标记语言的规则,这样浏览器才能正确地呈现内容。
HTML5 不基于 SGML,所以不需要引用 DTD。
提示:请始终向 HTML 文档添加 <!DOCTYPE> 声明,这样浏览器才能获知文档类型。
5.Html标签
包含head标签和body标签
6.Head标签
Head标签中放置的叫做文档信息以及相关文件,其中主要包含“元信息”、标题、CSS、JS的内容或文件等。
<head> 标签用于定义文档的头部。
<head> 中的元素可以引用脚本、指示浏览器在关联的样式表、提供元信息等。
文档的头部描述了文档的各种属性和信息,包括文档的标题、编码格式等。
7.Body标签
Body标签中放置的是呈现在网页中的内容
<body> 元素定义文档的主体。
<body> 元素包含文档的所有内容(比如文本、超链接、图像、表格和列表等等。) 网页需展示的内容需嵌套在<body>标签中。
五、结构/标签 HTML —— head部分
1.head标签的定义
<head> 标签用于定义文档的头部,它是所有头部元素的容器。
<head> 中的元素可以引用脚本、指示浏览器在哪里找到样式表、提供元信息等等。
绝大多数文档头部包含的数据都不会真正作为内容显示给读者。
下面这些标签可用在 head 部分:<base>, <link>, <meta>, <script>, <style>, 以及 <title>。
<title> 定义文档的标题,它是 head 部分中唯一必需的元素。
2.元信息Meta标签:
用于确定文件的编码格式:<meta charset="utf-8">
Meta:元信息——针对信息进行描述的信息
Charset:表示字符编码,通常我们使用utf-8的编码类型
存储的文件编码格式需要与浏览器编码一致,否则会出现乱码。
a.Meta标签:name属性
主要用于描述网页,与content属性相对应使用。主要作用:便于搜索引擎爬虫查找、分类等。
b.Meta标签:keywords关键词
<meta name="keywords" content="具体关键词内容">(content值即为网页搜索的关键词,和SEO(搜索引擎优化有关))
c.Meta标签:description关键词
<meta name="description" content="具体描述信息">(即网页搜索时,网站名称下面的简介内容)
d.Meta标签:author关键词
<meta name="author" content="姓名">
e.Meta标签:http-equiv自动跳转
<meta http-equiv="refresh" content="5">(5秒后自动刷新当前网页)
<meta http-equiv="refresh" content="5; url=http://www.baidu.com">(5秒后自动跳转到百度)
http-equiv相当于是http的文件头,用于向浏览器传递一些信息,从而正确的显示网页内容,与content属性对应。
content属性当中主要存储相应参数的值。
最典型的例子:字符编码的位置,自动刷新/跳转
f.Meta定义编码格式旧方法
<meta http-equiv="content-Type" content="text/html; charset=utf-8">(早期写法,等价于<meta charset="utf-8">)
3.link标签
标签定义文档与外部资源的关系。
标签最常见的用途是链接样式表。
<link rel="stylesheet" href="css/index.css">
4.title标签
<title> 元素可定义文档的标题。
5.style标签
<style> 标签用于为 HTML 文档定义样式信息。
<style type="text/css">
h1 {color:red}
p {color:blue}
</style>
在 style 中,您可以规定在浏览器中如何呈现 HTML 文档。
type 属性是必需的,定义 style 元素的内容。唯一可能的值是 "text/css"。
style 元素位于 head 部分中。
六、结构/标签 HTML —— body部分
1.具体模块开发的流程
a.选择标签的基本标准
1)元素的默认样式
2)元素/标签的样式的控制难易程度(后代选择器)
3)SEO——标签的语义性
4)代码的精简度
5)遇到图,选择背景实现还是img标签,是否需要浮动处理。
b.合理选择标签
1)标签语义性——规范
2)怎么少起名字——合理使用后代选择器
3)嵌套层数、代码量、可读性
4)一旦出现图文并茂的模块,通常第一优选dl,但是对于内容比较少,布局比较简单的图文并茂模块,考虑是否能使用更精简的
2.标签的语义性以及基本选用
以下引自百度百科
为了使我们的网站更好的被搜索引擎抓取收录,更自然的获得更高的流量,网站标签的语义化就显得尤为重要。所谓标签语义化,就是指标签的含义。
HTML为我们提供了相当丰富的标签,每个标签都有它各自的含义。
我认为在设计时,除了遵循HTML语法以外,应该充分利用并遵守各标签的“语义”。
如标题文字应该包含在h1-h6中,大段的文字内容应该由p标签进行分段而不是br标签,列表项应该放在ul或ol或dl中,表格形式的数据应该仍然用table布局。
为什么要这样做?
一个很有说服力的原因是,保证在用户去掉CSS显示的情况下,网页能够尽量有效的将内容的结构层次显示出来。
如果全部用div,当去掉CSS之后,整个网页就失去了层次,只剩下一些杂乱的文字碎片。这并不符合Web标准对低配置兼容性的要求。
3.块元素
a.块元素的种类
div h1 h2 h3 [h4]少用 (h5 h6)基本弃用 p dl dt dd ul ol
b.div
div是主要用于做布局的元素,没有任何的语义性,默认宽度是占满父级整行
c.h1~h6
h1~h6表示一级标题~六级标题,当前h4比较少用,h5 h6已经弃用
d.p
p表示段落
e.dl、dt、dd
dl 自定义列表
dt 自定义列表的标题
dd 自定义列表的内容
<dl>
<dt>自定义列表的标题</dt>
<dd>自定义列表的内容</dd>
</dl>
f.ul
ul 无序列表
<ul>
<li>ul下只能直接包含li元素</li>
</ul>
g.ol
ol 有序列表
<ol>
<li>ol下只能直接包含li元素</li>
</ol>
4.行元素
a.行元素的种类
span img(单标签元素) a em(自带斜体效果) strong(自带加粗效果) i b var del、ins、before伪元素、after伪元素
b.行元素的间隙
行元素之间的换行符(即回车),会在页面中被渲染,体现为行元素之间有一个空隙,空隙的大小各个浏览器不相同。
解决方法:
1)为行元素加上浮动属性,如:float: left;
2)利用CSS代码进行兼容处理
父级设置:
.wrap {
/*因行元素之间的换行符(即回车),会在页面中被渲染,体现为行元素之间有一个空隙,空隙的大小各个浏览器不相同。*/
/*因回车会被当做空白字符,所以可以在父级设置font-size: 0;,将字符的大小设置为0,回车即不会被显示*/
font-size: 0;
}
子级设置:
.demo * {
/*因父级设置了font-size: 0;,子级中有文字时,需要单独设置字体大小*/
font-size: 12px;
}
c.span
没有语义性,行标签,用于辅助布局
d.img
属性:alt;title;src。
注意:
控制宽高;border: 0;或border: none;;(两者均用于取消边框,但后者不会引起页面渲染)
设置float或display block;用于规避img标签下方自带3px的空隙bug;
img中alt与title辨析
http://www.h5course.com/a/20150526184.html
e.a
超链接
注意:移动端需要考虑指触区(用户可点击区域)
<a href="链接地址" title="当前标签中的内容">: 超文本链接
<a href="http://www.baidu.com" title="baidu" target="_blank">超链接内容</a>
<a href="链接的页面" target="_blank">新窗口打开</a>
<a href="链接的页面" target="_parent">原窗口打开</a>
title属性:当鼠标悬停在超链接文字上时,会显示出来的提示性信息,与SEO相关。
target属性:用于定义打开超链接的位置,默认是新当前页面,可以使用_blank,在新的空白页当中打开超链接
href属性:用于书写要跳转的链接地址。特殊写法如下
如果不填写 即为刷新当前页。(扩展知识:锚链接)
不书写href属性值或者#,表示刷新。也可以利用#,实现返回顶部href属性:用于书写要跳转的链接地址,如果不填写
(扩展知识:锚链接)
填写# 实现返回顶部。
填写### 点击后不刷新页面最常用
a标签的样式:
a: link 基本状态
a: visited 访问后的状态
a: hover 鼠标悬停状态
a: active 鼠标按下状态(鼠标点击与释放之间时)
:link :visited :hover :active叫做伪类选择器(注意,不是伪元素!!!)
伪类选择器,优先级0010
书写顺序严格按照:link :visited :hover :active,因为优先级都一样,否则会互相覆盖!
f.strong/b、em/i的比较
1)strong em内容类标签,
2)b i 修饰类标签,没有含义,已弃用
3)strong、b表现为加粗显示,em i表现为倾斜样式
4)strong em具有强调语气,strong强调语气更强烈。
5)strong em在搜索引擎优化(SEO)当中比b和i重要的多
http://www.h5course.com/a/2015042740.html
g.del、ins
del、ins是行元素,但是有块元素性质,不需要设置display: block;
5.第三类元素
a.第三类元素的种类
br(单标签) li 表格类的元素 以及 部分表单的元素
b.li
表示列表项(既不属于块元素,也不属于行元素,是列表项元素,但是能够按照块元素的方式进行显示)
c.br
换行标签,有clear属性,在清浮动中应用
6.块元素和行元素的区别
http://www.h5course.com/a/20150502100.html
块属性标签独占一行、支持设置宽高、margin定义四个方向属性值。
块转行:display: inline; 可以转换成 行元素、除个别特殊元素外,可包含块状元素和行内元素。
行属性标签不独占一行、不支持设置宽高、margin只能定义左右方向属性值。
行转块:display: block; 可以转换成块元素、除ins和del外,不能包含块状元素。
a.默认状态
块元素默认独占父级一行,行元素默认内容撑开宽高
b.能否设置宽高
行元素设置宽高无效
c.margin、padding的转换
行元素纵向外边距(margin)设置无效
d.如何相互转换:通过使用display: inline和display: block实现块元素和行元素的转换
7.嵌套规则
a.body 可以直接包含块状元素、ins、del、script。不可以直接包含行内元素
b.块元素能够包含块元素,但是标题和段落类标签(h1~h6,p dt)除外,块元素能够包含行元素。
c.行元素能包含行元素,不能包含块元素(ins 、del 除外)
d.ins 和 del(行内元素)可以包含块状元素或者行内元素,其他任何行内元素 都不允许包含块状元素
e.p、h1-h6 可以直接包含行内元素和文本信息,但是不允许包含块状元素
f.dl 元素只允许包含 dt 和 dd,同时 dt 不能包含块状元素,只允许包含行内元素,对于 dd 可以包含任何元素
g.ul和ol下只能直接包含li元素,li下可以包含块元素行元素
h.form 元素不能够直接包含 input 元素。原因在于 input 元素属于行内元素, form 元素仅仅能够包含块状元素
i.table 元素只能够包含 caption、colgroup、col、thead、tbody、tfoot,不能够直接包含 tr 或者其他任何元素
8.table布局与DIV+CSS布局的区别(比较方向:语义性[搜索引擎方向];代码量——加载速度——用户体验[用户体验方向];灵活性、可维护性[开发者方向])
一.div+css布局的好处:
1.符合W3C标准,代码结构清晰明了,结构、样式和行为分离,带来足够好的可维护性。
2.布局精准,网站版面布局修改简单。
3.加快了页面的加载速度(最重要的)(在IE中要将整个table加载完了才显示内容)。
4.节约站点所占的空间和站点的流量。
5.用只包含结构化内容的HTML代替嵌套的标签,提高另外搜索引擎对网页的搜索效率。
二.table布局的好处(table布局也不是一点用的没有,这点是毋庸置疑的)
1.容易上手。
2.可以形成复杂的变化,简单快速。
3.表现上更加“严谨”,在不同浏览器中都能得到很好的兼容。
9.其他布局方式:960栅格、圣杯、双飞翼、瀑布流(蘑菇街)、WIN8-Grid(网格)、自适应(移动端)、弹性布局、响应式布局(移动端)
七、HTML5移动端新增标签
1.兼容性
移动端大部分浏览器都是webkit内核,兼容IE9+,添加JS DOM后兼容IE8及其以下
2.新增结构标签
a.<header></header> 定义页眉/头部
b.<footer></footer> 定义页脚/底部
c.<nav></nav> 定义导航
d.<article></article> 定义文章
e.<aside></aside> 定义文章的侧边栏
f.<section></section> 定义文章中的区段
g.<hgroup></hgroup> 定义网页标题的组合
3.新增行元素
a.<mark> 呈现突出显示的文字,如搜索结果中高亮度显示关键词;<mark>...</mark>
b.<time> 表示日期和时间
c.<meter> 表示度量衡,用于已知最大与最小值的度量
d.<progress> 表示运行中的金城
e.<wbr> 表示软换行
4.新增其他元素
a.<video></video> 定义视频
b.<audio></audio> 定义音频
c.<details></details> 表示用户要求得到并可以得到的详细信息
d.<canvas></canvas> 定义图形,提供画布
e.<embed src="" type=""> 插入各种多媒体
八、视音频
1.视频格式
a.Theora + Vorbis = Ogg
b.H.264 + ACC = MPEG4
c.Vp8 + Vorbis = Webm
2.支持程度
3.HTML5视频的使用 —— video标签
a.video标签属性
1)src属性 —— 设置视频的链接
2)width属性 —— 设置元素宽,不好维护,推荐使用样式书写
3)height属性 —— 设置元素高,不好维护,推荐使用样式书写
b.兼容处理 —— source元素
浏览器对视音频的格式支持程度不同,使用source标签进行处理
source标签被视频标签video和音频标签audio所支持,它可以链接不同的媒体文件,浏览器将使用第一个可识别的格式
c.播放控制 ——
1)controls:控制条
2)autoplay:属性是视频就绪后自动播放自动播放
3)preload:auto值是表示页面加载后载入视频,none值表示禁用
4)loop:实现视频播放结束后进行循环播放
5)poster:将在视频文件开始播放前显示图片
6)load()方法用于在更改来源(视频地址)后对视频/应聘进行加载
7)play()方法播放加载完成的视音频文件
8)pause()方法暂停正在播放的视音频文件
9)volume属性:控制音量,范围[0-1]
10)playbackRate属性:设置视音频当前的播放速度,FF最大值为5,IE最大值为8,Chrome不确定
11)timeupdate事件
12)duration:视频可播放的总时间
13)currentTime:当前播放视频的时间,可以读写操作
d.其他属性
九、Canvas
1.Canvas是什么?
HTML5新增的一个标签,它的作用是画矢量图和位图
2.Canvas能做什么?
a.能做游戏、能做特别酷炫的效果等等,主要是为画图而生
b.注意:Canvas元素本身并没有绘制能力,必须使用JavaScript来完成实际的绘图任务
3.Canvas设置大小
Canvas有默认宽高,如果使用CSS设置Canvas画布的大小,则导致画布按比例缩放到CSS设置的值。
所以Canvas画布宽度的设置需要在标签中,使用标签的属性进行设置。
4.Canvas的基本方法
a.什么是路径
1)绘制时产生的线条成为路径。路径由一个或多个直线段或曲线段组成
b.开始和闭合路径
1)beginPath()
2)开始和闭合之间进行绘图
3)closePath()
c.移动画笔与画线
1)moveTo(x, y)
2)lineTo(x, y)
d.文本绘制
1)strokeText(text, x, y); —— 绘制文字轮廓
2)fillText(text, x, y); —— 填充文字
5.Canvas基本属性
a.设置填充与描边的颜色
1)strokeStyle = ‘red’;
2)fillStyle = ‘red’;
b.线条样式的设置
1)lineCap设置线条末端线帽的样式(round、square)
2)lineWidth设置线条粗细,不需要写单位,以像素来计算
c.文字的设置
1)font跟CSS类似:字体大小、字体
2)textAlign文字水平对齐(start、end、left、right、center)
3)textBaseline文字垂直对齐方式(文字基线是普通的字母基线)
6.Canvas快速绘制
a.矩形路径的绘制
1)rect(x, y, width, height);
参数 描述
x 矩形左上角的 x 坐标。
y 矩形左上角的 y 坐标。
width 矩形的宽度,以像素计。
height 矩形的高度,以像素计。
2)fillRect(x, y, width, height);
fillRect() 方法绘制"已填充"的矩形。默认的填充颜色是黑色。
提示:请使用 fillStyle 属性来设置用于填充绘图的颜色、渐变或模式。
b.圆形路径的绘制
1)arc(x, y, r, sa, ea, true/false)
context.arc(x,y,r,sAngle,eAngle,counterclockwise);
参数 描述
x 圆的中心的 x 坐标。
y 圆的中心的 y 坐标。
r 圆的半径。
sAngle 起始角,以弧度计(弧的圆形的三点钟位置是 0 度)。
eAngle 结束角,以弧度计。
counterclockwise 可选。规定应该逆时针还是顺时针绘图。False = 顺时针,true = 逆时针。
c.贝赛尔曲线
1)quadraticCurveTo(kx, ky, ex, ey);
二次贝塞尔曲线
ex, ey:终点
2)bezierCurveTo(kx1, ky1, kx2, ky2, ex, ey)
三次贝塞尔曲线
7.Canvas绘制思路
开始绘制——属性设置——路径变化——关闭路径——填充/描边
8.Canvas图形操作
a.缩放
scale(x, y) —— 缩放当前绘图放大与缩小,x为在横坐标轴上的缩放倍数,y为纵坐标轴上的缩放倍数
b.旋转
rotate(par) —— 旋转当前绘制的图,par为旋转的量,用弧度制表示
c.平移
translate(x, y) —— 为画布水平和垂直的位移
9.Canvas动画
a.原理:绘制——清除——绘制——清除……
b.Canvas动画相关命令
1)清除画布
clearRect(x, y, width, height);
2)save与restore
保存与恢复
Canvas绘图上下文(程序之上和之下的意思)属性都是可以保存和回复,也就是说只能保存状态,不能回复所绘制的内容(图像)
save() —— 用于储存状态,如strokeStyle, fillStyle, lineWidth, lineCap, shadowOffsetX, shadowOffsetY, shadowBlur,
shadowColor, font, textAlign, textBaseline.
restore() —— 将储存的状态取出并赋予新建的图形
3)上下文和栈
save()(入栈)
restore()(出栈)
十、硬件调用
1.特殊功能
a.电话、短信、邮箱
1)取消电话号码识别
<meta name="format-detection" content="telephone=no">
2)调用电话
<a href="tel:15880200025" title="">15880200025</a>
3)调用邮箱
<a href="sms: 231019025@qq.com" title="">231019025@qq.com</a>
b.手机相册
1)调用相册
<input type="file" accept="image/*" name="" value="" style="background: #faa">
2)调用手机摄像头
<input type="file" accept="image/*" capture="camera" name="" value="" style="background: #aaf">
c.PC端调用QQ
http://shang.qq.com/v3/widget.html
d.IP定位