1.盒模型
标准模式下总宽度=width+margin(左右)+padding(左右)border(左右);
怪异模式下总宽度=width+margin(左右)(就是说width已经包含了padding和border值)。
标准模式下如果定义的DOCTYPE缺失,则在ie6、ie7、ie8下汇触发怪异模式。
当设置为box-sizing:content-box时,将采用标准模式解析计算,也是默认模式;
当设置为box-sizing:border-box时,将采用怪异模式解析计算;
标准盒模型:总宽度=内容(content)+border+padding+margin
IE盒模型(怪异盒模型): 宽度 = 内容宽度(content+2border+2padding)+margin
2.弹性盒模型(移动端布局)
①display: flex;
②给父元素 flex-direction 设置主轴方向
flex-direction:row //(默认)主轴为水平方向,起点在左端。---水平逆序 在容器的最右面
flex-direction:row-reverse //主轴为水平方向,起点在右端
flex-direction:column //使用后会使主轴变为y轴
flex-firection:column-reverse //主轴为垂直方向,起点在下沿。---纵向逆序 在容器底部③flex-wrap:warp; 换行
flex-wrap:nowrap //(默认)不换行
<flex-wrap:wrap //换行,第一行在上方>
flex-wrap:wrap-reverse //换行,第一行在下方④flex-flow 复合属性
flex-flow:该属性是flex-direction属性和flex-wrap属性的简写形式。
flex-flow:值1(主轴方向) 值2(是否换行)
flex-flow:row nowrap //(默认)
flex-flow:row-reverse warp; 让弹性盒子以相反的顺序显示,且在必要是换行⑤justify-content 主轴方向富裕空间管理
justify-content:flex-start //(默认)左对齐
justify-content:flex-end //右对齐
justify-content:center //居中(子元素紧凑居中)
justify-content:space-between; //两端对齐,项目之间的间隔都相等
justify-content:space-around; //每个项目两侧的间隔相等⑥ align-items 富裕空间管理
align-items:flex-start //与交叉轴的起点对其
align-items:flex-end //与交叉轴的终点即末尾对其
align-items:center //与交叉轴的中点对其<位于容器中心>
align-items:baseline //项⽬的第⼀⾏⽂字的基线对齐
align-items:stretch //如果项⽬未设置⾼度或设为auto,将占满整个容器的⾼度⑦ align-content 富裕空间管理
align-content属性,紧跟于flex-wrap属性后,该属性用于修饰flex-wrap属性
align-content:flex-start //与交叉轴的起点对齐
align-content:flex-end //与交叉轴的终点对其
align-content:center //与交叉轴的中点对齐
align-content:space-between //与交叉轴两端对齐,轴线之间的间隔平均分布
align-content:space-around //每根轴线两侧的间隔都相等⑧ flex-grow:1; 自动扩充
.middle{
height:20px;
flex-glow:1;background:blue
}
/表示的是当容器有多余的空间时,这些空间在不同条目之间的分配比例
//比如,一个容器中有 3 个条目,其"flex-grow"属性的值分别为 1,2 和 3
//那么当容器中有空白空间时,这 3 个条目所获得的额外空白空间分别占
//全部空间的 1/6、1/3 和 1/2
⑨flex-shrink属性:(定义弹性盒子元素的收缩比率)
flex-shrink属性:(定义弹性盒子元素的收缩比率)
//该属性的值也是无单位的,表示的是当容器的空间不足各个条目的尺寸缩小的比例。
//例如,在容器中有 3 个条目,其"flex-shrink"属性的值分别为 1,2 和 3。
//每个条目的主轴尺寸均为 200px。当容器的主轴尺寸不足 600px 时,
//比如变成了 540px 之后则需要缩小的尺寸 60px 由 3 个条目按照比例来分配。
//3 个条目分别要缩小 10px、20px 和 30px,
//主轴尺寸分别变为 190px、180px 和 170px3、CSS单位
⑴px:绝对单位。页面按精确像素展示。
⑵em:相对单位,基准点为父节点字体的大小,如果自定义了font-size按自身的来算,整个页面内1em不是一个固定的值。
⑶rem:相对单位,相对于根节点html的font-size的大小来计算。
⑷vw:视窗宽度,1vw等于视窗宽度的1%。
⑸vh:视窗高度:1vh等于视窗高度的1%。
⑹vmin:以宽和高之间最短的一端为基准,如果宽>高,那么1vmin相当于宽的1%;
⑺vmax:以宽和高之间最长的一端为基准,如果宽>高,那么1vmax相当于宽的1%;
⑻%:百分比。
⑼pt:point,大约1/72寸,一寸=3.3333···厘米。
⑽pc:pica,大约6pt,1/6寸。
⑾ex:取当前作用效果的字体的x的高度,在无法确定x高度的情况下以0.5em计算,IE11以下不支持。
⑿ch:以节点所使用字体中的“0”字符为基准,找不到时为0.5em。IE10以上支持。
4、CSS选择器
4.1 css兼容性问题
1、双倍浮动BUG:
描述:块状元素设置了float属性后,又设置了横向的margin值,在IE6下显示的margin值要比设置的值大;
解决方案:给float的元素添加 display:inline;将其转换为内联元素;
2、表单元素行高不一致:
解决方案:
①、给表单元素添加vertical-align:middle;
②、给表单元素添加float:left;
3、IE6(默认16px为最小)不识别较小高度的标签(一般为10px):
解决方案:
①、给标签添加overflow:hidden;
②、给标签添加font-size:0;
4、图片添加超链接时,在IE浏览器中会有蓝色的边框:
解决方案:
给图片添加border:0或者border:none;
5、最小高度min-height不兼容IE6;
解决方案:
①、min-height:100px;_height:100px;
②、min-height:100px;height:auto!important;height:100px;
6、图片默认有间隙:
解决方案:
①、给img添加float属性;
②、给img添加display:block;
7、按钮默认大小不一:
解决方案:
①、如果按钮是一张图片,直接用背景图作为按钮图片;
②、用a标记模拟按钮,使用JS实现其他功能;
8、百分比BUG:
描述:父元素设置100%,子元素各50%,在IE6下,50%+50%大于100%;
解决方案:
给右边的浮动元素添加clear:right;
9、鼠标指针BUG:
cursor:hand 只有IE浏览器识别;
cursor:pointer;IE及以上浏览器和其他浏览器都识别(手型);
10、透明度设置,IE不识别opacity属性:
解决方案:
标准写法:opacity:value;(取值范围0-1);
兼容IE浏览器 filter:alpha(opacity=value);(取值范围1-100);
11、上下margin重叠问题:
描述:给上面的元素设置margin-bottom,给下面的元素设置margin-top,只能识别其中较大的那个值;
解决方案:
①、margin-top和margin-bottom 只设置其中一个值;
②、给其中一个元素再包裹一个盒子,并设置over-flow:hidden;
12、给子元素设置margin-top.应用在了父元素上:
解决方案:
①、把给子元素设置的margin-top改为给父元素设置padding-top;
②、给父元素设置1px的border,即border-top:1px solid transparent;
③、给父元素设置over-flow:hidden;
④、给父元素设置float:left;
5、BFC
6、清除浮动的方法
①给设置了浮动的元素的父级加高。
②给设置了浮动的元素的父级设置overflow:hidden。如果需要兼容IE,在添加一个zoom:1
③给需要清除浮动的元素设置clear:both;
④在最后一个子元素的后面加一个空的div,给它样式属性 clear:both(不推荐)
⑤伪类清除:.clearfix:after{content:"";clear:both;display:block;}
.clearfix{zoom:1}
<div class="container clearfix">
<div class="box"></div>
</div>
<div class="main "></div>
.box{
width:100px;
height:100px;
background:yellow;
float: left;
}
.main{
width:150px;
height: 150px;
background:red;
}
.clearfix:after{
content: "";
clear: both;
display: block;
}
.clearfix{
zoom:1;
}
复制代码7、层叠上下文
X轴,Y轴以及表示层叠的Z轴。一般情况下,元素在页面上沿X轴Y轴平铺,我们察觉不到它们在Z轴上的层叠关系。而一旦元素发生堆叠,这时就能发现某个元素可能覆盖了另一个元素或者被另一个元素覆盖。通元素设置position属性为非static值并设置z-index属性为具体数值,产生层叠上下文。
8、常见页面布局
⑴静态布局:最传统、原始的Web布局设计。网页最外层容器(outer)有固定的大小,所有的内容以该容器为标准,超出宽高的部分用滚动条(overflow:scroll)来实现滚动查阅。
优点:采用的是css2之前的写法,不存在浏览器兼容性。布局简单。
缺点:但是移动端不可以使用pc端的页面,两个页面的布局不一致,移动端需要自己另外设计一个布局并使用不同域名呈现。
⑵流式布局:流式布局也叫百分比布局。随着屏幕的改变,页面的布局没有发生大的变化,可以进行适配调整,这个正好与自适应布局相补。
优点:元素的宽高用百分比做单位,元素宽高按屏幕分辨率调整,布局不发生变化。
缺点:屏幕尺度跨度过大的情况下,页面不能正常显示。
⑶弹性布局:弹性布局是CSS3引入的强大的布局方式,弹性盒模型:display:flex;
优点:简单、方便、快速
缺点:CSS3新特性,浏览器兼容性非常头疼。而且手机浏览器对flex的支持也不是很理想。
⑷响应式布局:采用自适应布局和流式布局的综合方式,为不同屏幕分辨率范围创建流式布局。利用媒体查询可以检测到屏幕的尺寸(主要检测宽度),并设置不同的CSS样式,就可以实现响应式的布局。
9、CSS预处理,后处理
CSS预处理器:用一种编程语言,为CSS增加了一些编程的特性,最终编译出css文件。比如sass、less、stylus。
优点:语言级逻辑处理,动态特性,改善项目结构
缺点:采用特殊语法,框架耦合度高,复杂度高
实现原理:
①取到 DSL 源代码 的 分析树②将含有 动态生成 相关节点的 分析树 转换为 静态分析树
③将 静态分析树 转换为 CSS 的 静态分析树
④将 CSS 的 静态分析树 转换为 CSS 代码
CSS后处理器:堆css进行处理,并最终生成css的预处理器,属于广义上的css预处理器,最典型的就是css压缩工具(clean-css),流行的Autoprefixer,以Clean I Use上的浏览器支持数据为基础,自动处理兼容性问题
优点:使用 CSS 语法,容易进行模块化,贴近 CSS 的未来标准
缺点:逻辑处理能力有限
实现原理:
①将 源代码 做为 CSS 解析,获得 分析树②对 CSS 的 分析树 进行 后处理
③将 CSS 的 分析树 转换为 CSS 代码
10、CSS3的新特性
新增一:rgba(简单不做解释);
新增二:弹性布局flex(上面第二题);
新增三:媒体查询;
新增四:渐变色;
新增五:动画animation,使用@keyframes定义,使用的元素animation:名字 时间;
@keyframes changeWidth{
0%{width:100px}
100%{width:800px}
}
div{
width:100px;
height:100px;
background:red;
animation:changeWidth 10s forwards;
}复制代码animation的6个值:

第三个值:

第五个值:

第六个值:

11、display有哪些值
display:none 此元素不被显示。display:block 此元素显示为块级元素,支持宽高,独占一行。
display:inline 此元素为内联元素,不支持宽高,不独占一行。
display:table 此元素作为块级表格来显示。
display:flex 此元素为弹性盒模型
display:list-item此元素会作为列表显示
12、相邻的两个inline-block节点为什么会出现间隔,该如何解决?
元素被当成行内元素排版的时候,原来HTML代码中的回车换行被转成一个空白符,在字体不为0的情况下,空白符占据一定宽度,所以inline-block的元素之间就出现了空隙。这些元素之间的间距会随着字体的大小而变化,当行内元素font-size:16px时,间距为8px。(不懂没关系,看下面解决方法就明白了)。
方法一:父级font-size:0;子级设置字体大小;
方法二:改变书写方式
//原来
<span>1</span>
<span>2</span>
<span>3</span>
//改变
<span>1</span><span>2</span><span>3</span>复制代码方法三:margin负值
方法四:设置父元素display:table;word-spacing:0(两个记得都要加上);
13、meta viewport移动端适配
<metaname="viewport" content="width=device-width,initial-scale=1.0">复制代码14、CSS实现宽度自适应100%,宽高16:9的比例的矩形
*{
margin:0;
padding:0;
}
.wrap{
width:20%;
}
.box{
kground:pink;
}
.box p{
width:100%;
height:100%;
position: absolute;
color:#666;
}复制代码<div class="wrap"> <div class="box"> <p>13</p> </div></div>复制代码16、画三角形
div{
width:0;
height:0;
border-top:50px solid transparent;
border-left:50px solid transparent;
border-right:50px solid transparent;
border-bottom:50px solid red;
}复制代码注:上述三角形为正三角形,如果想要倒三角形,那么将border-top的值设为50px solid red,其余的属性值相同。
17、1像素边框问题
物理像素:移动设备出厂时,不同设备自带的不同像素,也称硬件像素。逻辑像素:即css中记录的像素。
为什么会有1像素边框问题:在开发中,在移动端css里面写了1px,实际看起来比1px粗。这就关系到物理像素和逻辑像素的问题了,开发中UI设计师要求的1px是指设备的物理像素1px,而css里记录的像素是逻辑像素,它们之间存在一个比例关系,可以用window.devicePixelRadio来获取,也可以用媒体查询的-webkit-min-device-pixel-ratio来获取,比例的多少与设备相关。iphone的devicePixelRatio == 2,而我们设置的border:1px 描述的是设备的独立像素,所以被放大到物理像素2px显示,在iphone上就显的比较粗。
解决方案:
⑴媒体查询利用设备像素比缩放,设置小数像素。
优点:简单,好理解。缺点:兼容性差目前IOS8+才支持,IOS7以下、安卓系统都显示0px。
.box{border:1px solid #333}
@media screen and (-webkit-min-device-pixel-ratio:2){
.box{border:1px solid #333}
}
@media screen and (-webkit-min-device-pixel-radio:3){
.border{border:0.333333px solid #333}
}复制代码⑵设置border-image方案
缺点:需要制作图片,圆角可能会出现模糊。
.border-image-1px{
border-width:1px 0px;
-webkit-border-image:url("border.png")2 0 strech;
border-image:url("border.png")2 0 stretch;
}复制代码 border-width:指定边框的宽度,可以设定四个值,分别为上右下左top right bottom left。border-image:距离图片上方2px裁剪图片作为上边框,下方2px裁剪作为下边框。距离左右0像素裁剪图片即没有边框,以拉伸方式展示。
总结:在边框图片中,裁剪图片上下方的2个像素宽度作为上下边框,并展示在宽度为1个像素的边框空间里。左右没有边框。
⑶box-shadow方案
优点是没有圆角问题。缺点是颜色不好控制。
.box{
-webkit-box-shadow:0 1px 1px -1px rgba(0,0,0,.5);
}复制代码参数:水平阴影位置,垂直阴影位置,模糊距离,阴影尺寸,阴影颜色,将外部阴影改为内部阴影。
⑷transform:scale(0.5)方案(推荐):
以上的方案,思想其实都是将1px缩小为0.5px来展示,然而0.5px并不是所有的设备或浏览器都支持。其实1像素问题的产生基本发生在设置边框或分割线的时候,场景并不覆盖全局样式,因此,直接缩放需要设置的元素,才是我们真正需求的。transform就可以实现。
①设置height:1px,根据媒体查询结合transform缩放为相应的尺寸
.box{
height:1px;
background:#333;
-webkit-transform:scaleY(0.5);
-webkit-transform-origin:0 0;
overflow:hidden;
}复制代码②用: :after和: :before,设置border-bottom:1px solid #000;,然后缩放-webkit-transform:scaleY(0.5);可以实现两根边线的需求;
.box::after{
content:"";
width:100%;
border-bottom:1px solid #000;
transform:scaleY(0.5);
}复制代码③用: :after设置border:1px solid #000;width:200%;height:200%;然后缩放scaleY(0.5);优点可以实现圆角京东就是这么实现的,缺点是按钮添加active比较麻烦。
.div::after {
content: '';
width: 200%;
height: 200%;
position: absolute;
top: 0;
left: 0;
border: 1px solid #bfbfbf;
border-radius: 4px;
-webkit-transform: scale(0.5,0.5);
transform: scale(0.5,0.5);
-webkit-transform-origin: top left;
}复制代码18,H5性特性
- 语义化标签:header、footer、section、nav、aside、article ---
- 增强型表单:input 的多个 type ---
- 新增表单元素:datalist、keygen、output
- 新增表单属性:placehoder、required、min 和 max
- 音频视频:audio、video ---
- canvas : 绘图 ---
- 地理定位 ---
- 拖拽 ---
- 本地存储:localStorage - 没有时间限制的数据存储;sessionStorage - 针对一个 session 的数据存储,当用户关闭浏览器窗口后,数据会被删除
- 新事件:onresize、ondrag、onscroll、onmousewheel、onerror、onplay、onpause
- WebSocket:单个 TCP 连接上进行全双工通讯的协议
标签 | 描述 |
header | 定义了文档的头部区域 |
footer | 定义了文档的尾部区域 |
nav | 定义文档的导航 |
section | 定义文档中的节(section、区段) |
article | 定义页面独立的内容区域 |
aside | 定义页面的侧边栏内容 |
detailes | 用于描述文档或文档某个部分的细节 |
summary | 标签包含 details 元素的标题 |
dialog | 定义对话框,比如提示框 |
input 的 type | 描述 |
color | 主要用于选取颜色 |
date | 从一个日期选择器选择一个日期 |
datetime | 选择一个日期(UTC 时间) |
email | 包含 e-mail 地址的输入域 |
month | 选择一个月份 |
number | 数值的输入域 |
range | 一定范围内数字值的输入域 |
search | 用于搜索域 |
tel | 定义输入电话号码字段 |
time | 选择一个时间 |
url | URL 地址的输入域 |
week | 选择周和年 |
表单元素 | 描述 |
datalist | 元素规定输入域的选项列表,使用 input 元素的 list 属性与 datalist 元素的 id 绑定 |
keygen | 提供一种验证用户的可靠方法,标签规定用于表单的密钥对生成器字段 |
output | 用于不同类型的输出,比如计算或脚本输出 |
表单属性 | 描述 |
placehoder | 简短的提示在用户输入值前会显示在输入域上。即我们常见的输入框默认提示,在用户输入后消失 |
required | 是一个 boolean 属性。要求填写的输入域不能为空 |
pattern | 描述了一个正则表达式用于验证 input 元素的值 |
min 和 max | 设置元素最小值与最大值 |
step | 为输入域规定合法的数字间隔 |
height 和 width | 用于 image 类型的 input 标签的图像高度和宽度 |
autofocus | 是一个 boolean 属性。规定在页面加载时,域自动地获得焦点 |
multiple | 是一个 boolean 属性。规定 input 元素中可选择多个值 |
事件 | 描述 |
onresize | 当调整窗口大小时运行脚本 |
ondrag | 当拖动元素时运行脚本 |
onscroll | 当滚动元素滚动元素的滚动条时运行脚本 |
onmousewheel | 当转动鼠标滚轮时运行脚本 |
onerror | 当错误发生时运行脚本 |
onplay | 当媒介数据将要开始播放时运行脚本 |
onpause | 当媒介数据暂停时运行脚本 |
- 块级元素
- 行内元素
CSS3 新特性
- 选择器
- 背景和边框
- 文本效果
- 2D/3D 转换
- 动画、过渡
- 多列布局
- column-count: 规定元素应该被分隔的列数
- column-gap: 规定列之间的间隔
- column-rule: 设置列之间的宽度、样式和颜色规则
- 用户界面
:last-child /* 选择元素最后一个孩子 */
:first-child /* 选择元素第一个孩子 */
:nth-child(1) /* 按照第几个孩子给它设置样式 */
:nth-child(even) /* 按照偶数 */
:nth-child(odd) /* 按照奇数 */
:disabled /* 选择每个禁用的E元素 */
:checked /* 选择每个被选中的E元素 */
:not(selector) /* 选择非 selector 元素的每个元素 */
::selection /* 选择被用户选取的元素部分 */- 伪类:用于向某些选择器添加特殊的效果(没有创建新元素)
- 伪元素:创建了 html 中不存在的元素,用于将特殊的效果添加到某些选择器
- 背景:
- 边框:
属性 | 描述 |
text-shadow | 向文本添加阴影 |
text-justify | 规定当 text-align 设置为 “justify” 时所使用的对齐方法 |
text-emphasis | 向元素的文本应用重点标记以及重点标记的前景色 |
text-outline | 规定文本的轮廓 |
text-overflow | 规定当文本溢出包含元素时发生的事情 |
text-wrap | 规定文本的换行规则 |
word-break | 规定非中日韩文本的换行规则 |
word-wrap | 允许对长的不可分割的单词进行分割并换行到下一行 |
text-decoration | 文本修饰符:overline、line-through、underline 分别是上划线、中划线、下划线 |
- @font-face 自定义字体
- 渐变,CSS3新增了渐变效果,包括 linear-gradient(线性渐变)和 radial-gradient(径向渐变)
- 2D 转换(transform)
- translate():元素从其当前位置移动,根据给定的 left(x 坐标) 和 top(y 坐标) 位置参数。 transform: translate(50px, 100px);
- rotate():元素顺时针旋转给定的角度。若为负值,元素将逆时针旋转。transform: rotate(30deg);
- scale():元素的尺寸会增加或减少,根据给定的宽度(X 轴)和高度(Y 轴)参数,也可以一个值(宽高)。transform: scale(2,4);
- skew():元素翻转给定的角度,根据给定的水平线(X 轴)和垂直线(Y 轴)参数。transform: skew(30deg, 20deg);
- matrix(): 把所有 2D 转换方法组合在一起,需要六个参数,包含数学函数,允许您:旋转、缩放、移动以及倾斜元素。transform:matrix(0.866,0.5,-0.5,0.866,0,0);
- 3D 转换
- rotateX():元素围绕其 X 轴以给定的度数进行旋转。transform: rotateX(120deg);
- rotateY():元素围绕其 Y 轴以给定的度数进行旋转。transform: rotateY(130deg);
- perspective:规定 3D 元素的透视效果
- 过渡效果(transition),使页面变化更平滑,以下参数可直接写在 transition 后面
- transition-property :执行动画对应的属性,例如 color,background 等,可以使用 all 来指定所有的属性。
- transition-duration:过渡动画的一个持续时间。
- transition-timing-function:在延续时间段,动画变化的速率,常见的有:ease | linear | ease-in | ease-out | ease-in-out | cubic-bezier
- transition-delay:延迟多久后开始动画
- 动画(animation)
- animation-name: 定义动画名称
- animation-duration: 指定元素播放动画所持续的时间长
- animation-timing-function: ease | linear | ease-in | ease-out | ease-in-out | cubic-bezier(, , , ): 指元素根据时间的推进来改变属性值的变换速率,即动画的播放方式
- animation-delay: 指定元素动画开始时间
- animation-iteration-count: infinite | number:指定元素播放动画的循环次数
- animation-direction: normal | alternate: 指定元素动画播放的方向,其只有两个值,默认值为normal,如果设置为 normal 时,动画的每次循环都是向前播放;另一个值是 alternate,规定动画在下一周期逆向地播放(来去播放)
- animation-play-state: running | paused :控制元素动画的播放状态
- column-count: 规定元素应该被分隔的列数
- column-gap: 规定列之间的间隔
- column-rule: 设置列之间的宽度、样式和颜色规则
- resize
- box-sizing
- outline-offset