DOCTYPE是HTML5中一种标准通用标记语言的文档类型声明,它的目的是告诉浏览器(解析器)应该以什么样(html或xhtml)的文档类型定义来解析文档,它必须声明在HTML⽂档的第⼀⾏。书写声明,浏览器就会按照W3C的标准来解析,即进入标准模式。如果不声明,浏览器就会按照自己的标准来解析,即进入怪异模式。不同的渲染模式会影响浏览器对 CSS 代码甚⾄ JavaScript 脚本的解析。
Head标签用于定义文档的头部,它是所有头部元素的容器。Head元素可以引用脚本、指示浏览器在哪里找到样式表,提供元信息等
文档的头部描述了文档的各种属性和信息,包括文档的标题、在web中的位置以及和其他文档的关系。绝大多数文档头部包含的数据都不会真正作为内容显示给读者
Title标签是head中必不可少的标签,表示的是html文档的标题,现在默认是document
Charset 编码类型,常用编码utf-8,俗称万国码
viewport适配移动端,可以控制视口的大小和比例:一般width=device-width
src用于替换当前的元素,href用于在当前文档和引用资源之间确立练习。
Src
Src是source的缩写,指向外部的资源的位置,指向的内容将会嵌入到文档中当前的标签所在的位置;在请求src资源时会将其指向的资源下载并应用到文档中,例如js脚本、img图片等。当浏览器解析到该元素时,会暂停其他资源的下载,优先把该资源加载编译执行,这也是为什么js的脚本文件放在body的最后引用。
Href
指向资源所在的位置,建立当前元素与资源之间的联系,如果在文档中添加那么浏览器识别该文档为css文件,就会并行下载资源并且不会停止对文档的处理。
语义化是h5提出的根据html内容与结构选择合适的标签,这样的标签无论是对机器还是开发人员都是十分友好的
对机器:语义化的标签能够让我们的搜索引擎,网络爬虫快速的确定页面中那些内容是比较重要的部分,提升搜索速率。
对于开发人员:语义化标签使得代码的可读性增强
语义化标签:header头部 nav导航栏 section节 article文章内容 aside侧边栏 footer底部
Number 数字控件
Color 颜色控件
Date 日期控件 month 月份控件 week 星期控件
search 搜索控件
range 范围控件
在一些页面中,我们需要将文字或其他一些元素同按钮、输入框等关联起来,使得能够同时获得焦点,这个时候我们就需要使用label来完成这一操作。
1通过label的for id绑定
2将需要绑定的内容写到label当中,不推荐这样的作法。
Iframe元素可以帮助我们引用其他文档中已经写好的模块,直接在本文档中生效。是前端模块化开发的一种,增强代码的复用性。
优点:
缺点:
空元素,即没有内容的HTML元素。空元素是在开始标签中关闭的,也就是空元素没有闭合标签(单标签)
行内元素有:a b span img input select strong;
块级元素有:div ul ol li dl dt dd h1 h2 h3 h4 h5 h6 p;
空元素:
、
ID选择器>类选择器=属性选择器=伪类选择器>标签选择器=伪元素选择器>兄弟选择器(~)=相邻兄弟选择器(+)=子代选择器(>)=后代选择器=通配符选择器(*)
伪元素:在内容元素的前后插入额外的元素或样式,但是这些元素实际上并不在文档中生成。它们只在外部显示可见,但不会在文档的源代码找到它们,因此,称为“伪”元素。例如:::before在内容前面添加元素,::after在内容后面添加元素
伪类:将特殊的效果添加到特定选择器上。它是已有元素上添加类别的,不会产生新的元素。例如::link :visited :hover :active 选择的是元素的不同状态。这样既不用添加新的元素还能为元素的不同状态添加不同的样式进行区分。
display:none; 元素不显示,并且会从文档流中移除
display:block; 将元素强制转化成块级元素,独占一行,默认宽度为父级元素的百分百,可以设置宽高
display:inline; 行内元素类型,高宽均靠内容撑起来,不可自设置,在一行显示,宽度不够再换行
display:inline-block; 行内块元素,兼顾行内和块级元素的特点,同行显示,可自设宽高
三种元素最大的区别就是是否独占一行,是否可以自设宽高
块级元素:独占一行,可以自设宽高
行内块:同行显示,可自设宽高
行内元素:同行显示,宽高靠内容撑起
盒模型都是由四个部分组成的,分别是margin、border、padding和content。
盒子模型分两种:内容盒子、边框盒子(怪异盒模型)
内容盒子:设置的宽高给到的是content区域,border和padding设置值时,会增加整个和模型的宽高。
边框盒子:设置的宽高就是盒模型的宽高。border和padding设置值时,会向内压缩内容区域的宽高,盒模型整体宽高不会改变。
Margin无论再那种模型当中,都不会计算到盒模型的宽高当中
1在引入图片的标签img之间加一个空格
2将图片放在盒子当中,为盒子设置外间距。
设置外间距方法更好,空白可以调整
Transition是过渡属性,实现元素位置,大小,颜色等的一种变化过程,过渡需要进行触发才能发生,如onclick 、hover 、keydown等事件的发生
Animation 动画属性 ,不需要触发事件,设定好时间之后可以自己执行,且可以循环一个动画
精灵图在html中的应用,可以用一张图片包裹页面大部分的小图标样式,这样就可以减少频繁加载图片造成的性能损失。但是在图片合并时,要把多张图片有序的,合理的合并成一张图片,还要留好足够的空间,防止板块内出现不必要的背景。而且如果在自适应的页面中,很有可能造成图片失真。
提高加载性能:
Css压缩:将写好的css进行打包压缩,可以减小文件体积
Css单一样式:在查看框架底层代码时我们可以发现,样式的设置都是单一样式进行设置的,如外边距就是margin 上下左右四个方向单都设置,而不是写在一起。
减少@import的使用,尽量使用link引用,因为link在页面加载时一起加载,而@import则是等待页面加载完成以后再加载
选择器性能:
(1)关键选择器(key selector)。选择器的最后面的部分为关键选择器(即用来匹配目标元素的部分)。CSS选择符是从右到左进行匹配的。当使用后代选择器的时候,浏览器会遍历所有子元素来确定是否是指定的元素等等;
(2)如果规则拥有ID选择器作为其关键选择器,则不要为规则增加标签。过滤掉无关的规则(这样样式系统就不会浪费时间去匹配它们了)。
(3)避免使用通配规则,如*{}计算次数惊人,只对需要用到的元素进行选择。
(4)尽量少的去对标签进行选择,而是用class。
(5)尽量少的去使用后代选择器,降低选择器的权重值。后代选择器的开销是最高的,尽量将选择器的深度降到最低,最高不要超过三层,更多的使用类来关联每一个标签元素。
(6)了解哪些属性是可以通过继承而来的,然后避免对这些属性重复指定规则。
渲染性能:
(1)慎重使用高性能属性:浮动、定位。
(2)尽量减少页面重排、重绘。
(3)去除空规则:{}。空规则的产生原因一般来说是为了预留样式。去除这些空规则无疑能减少css文档体积。
(4)属性值为0时,不加单位。
(5)属性值为浮动小数0.**,可以省略小数点之前的0。
(6)标准化各种浏览器前缀:带浏览器前缀的在前。标准属性在后。
(7)不使用@import前缀,它会影响css的加载速度。
(8)选择器优化嵌套,尽量避免层级过深。
(9)css雪碧图,同一页面相近部分的小图标,方便使用,减少页面的请求次数,但是同时图片本身会变大,使用时,优劣考虑清楚,再使用。
(10)正确使用display的属性,由于display的作用,某些样式组合会无效,徒增样式体积的同时也影响解析性能。
(11)不滥用web字体。对于中文网站来说WebFonts可能很陌生,国外却很流行。web fonts通常体积庞大,而且一些浏览器在下载web fonts时会阻塞页面渲染损伤性能。
可维护性、健壮性:
(1)将具有相同属性的样式抽离出来,整合并通过class在页面中进行使用,提高css的可维护性。
px 像素值 1px=一个像素点
em 父节点字体大小的百分比值 1em等于一个字体大小
rem html根节点的字体大小,在Google浏览器,1rem = 16px
vw 相对于设备宽度的百分比单位,100vw = 设备宽度
vh 相对于设备高度的百分比单位,100vh = 设备高度
Flex是FlexibleBox的缩写,意为"弹性布局",用来为盒状模型提供最大的灵活性。任何一个容器都可以指定为Flex布局。行内元素也可以使用Flex布局。注意,设为Flex布局以后,子元素的float、clear和vertical-align属性将失效。采用Flex布局的元素,称为Flex容器(flex container),简称"容器"。它的所有子元素自动成为容器成员,称为Flex项目(flex item),简称"项目"。容器默认存在两根轴:水平的主轴(main axis)和垂直的交叉轴(cross axis),项目默认沿水平主轴排列。
以下6个属性设置在容器上:
以下6个属性设置在项目上:
简单来说:
flex布局是CSS3新增的一种布局方式,可以通过将一个元素的display属性值设置为flex从而使它成为一个flex容器,它的所有子元素都会成为它的项目。一个容器默认有两条轴:一个是水平的主轴,一个是与主轴垂直的交叉轴。可以使用flex-direction来指定主轴的方向。可以使用justify-content来指定元素在主轴上的排列方式,使用align-items来指定元素在交叉轴上的排列方式。还可以使用flex-wrap来规定当一行排列不下时的换行方式。对于容器中的项目,可以使用order属性来指定项目的排列顺序,还可以使用flex-grow来指定当排列空间有剩余的时候,项目的放大比例,还可以使用flex-shrink来指定当排列空间不足时,项目的缩小比例。
Flex:1是flex-grow:1 flex-shrink:1 flex-basic:auto 三个属性的缩写,flex:1自动适应弹性盒的剩余空间,因此我们在用弹性盒做单飞翼,双飞翼布局时,需要自动适应的部分就添加flex:1。
响应式网站设计(Responsive Web design)是一个网站能够兼容多个终端,而不是为每一个终端做一个特定的版本。
关于原理: 基本原理是通过媒体查询(@media)查询检测不同的设备屏幕尺寸做处理。
关于兼容: 页面头部必须有mate声明的viewport。
块格式化上下文(Block Formatting Context,BFC)是Web页面的可视化CSS渲染的一部分,是布局过程中生成块级盒子的区域,也是浮动元素与其他元素的交互限定区域。
通俗来讲:BFC是一个独立的布局环境,可以理解为一个容器,在这个容器中按照一定规则进行物品摆放,并且不会影响其它环境中的物品。如果一个元素符合触发BFC的条件,则BFC中的元素布局不受外部影响。
创建BFC的条件:
BFC的特点:
BFC的作用:
.left{
width: 100px;
height: 200px;
background: red;
float: left;
}
.right{
height: 300px;
background: blue;
overflow: hidden;
}
左侧设置float:left,右侧设置overflow: hidden。这样右边就触发了BFC,BFC的区域不会与浮动元素发生重叠,所以两侧就不会发生重叠,实现了自适应两栏布局。
问题描述:
两个块级元素的上外边距和下外边距可能会合并(折叠)为一个外边距,其大小会取其中外边距值大的那个,这种行为就是外边距折叠。需要注意的是,浮动的元素和绝对定位这种脱离文档流的元素的外边距不会折叠。重叠只会出现在垂直方向。
计算原则:
折叠合并后外边距的计算原则如下:
解决办法:
对于折叠的情况,主要有两种:兄弟之间重叠和父子之间重叠
(1)兄弟之间重叠
(2)父子之间重叠
层叠顺序,英文称作 stacking order,表示元素发生层叠时有着特定的垂直显示顺序。下面是盒模型的层叠规则:
对于上图,由上到下分别是:
(1)背景和边框:建立当前层叠上下文元素的背景和边框。
(2)负的z-index:当前层叠上下文中,z-index属性值为负的元素。
(3)块级盒:文档流内非行内级非定位后代元素。
(4)浮动盒:非定位浮动元素。
(5)行内盒:文档流内行内级非定位后代元素。
(6)z-index:0:层叠级数为0的定位元素。
(7)正z-index:z-index属性值为正的定位元素。
注意: 当定位元素z-index:auto,生成盒在当前层叠上下文中的层级为 0,不会建立新的层叠上下文,除非是根元素。
position有以下属性值:
前面三者的定位方式如下:
absolute:生成绝对定位的元素,相对于static定位以外的一个父元素进行定位。元素的位置通过left、top、right、bottom属性进行规定。
relative: 生成相对定位的元素,相对于其原来的位置进行定位。元素的位置通过left、top、right、bottom属性进行规定。
fixed: 生成绝对定位的元素,指定元素相对于屏幕视⼝(viewport)的位置来指定元素位置。元素的位置在屏幕滚动时不会改变,⽐如回到顶部的按钮⼀般都是⽤此定位⽅式
inherit: 规定从父元素继承position属性的值