HTML/CSS
字体图标
- unicode
- 兼容性最好,支持ie6+,及所有现代浏览器。
- 支持按字体的方式去动态调整图标大小,颜色等等。
- 但是因为是字体,所以不支持多色。只能使用平台里单色的图标,就算项目里有多色图标也会自动去色。
- font-class (unicode使用方式的一种变种)
- 兼容性良好,支持ie8+,及所有现代浏览器。
- 相比于unicode语意明确,书写更直观。可以很容易分辨这个icon是什么。
- 因为使用class来定义图标,所以当要替换图标时,只需要修改class里面的unicode引用。
- 不过因为本质上还是使用的字体,所以多色图标还是不支持的。
- symbol (svg的集合)
- 支持多色图标了,不再受单色限制。
- 通过一些技巧,支持像字体那样,通过font-size,color来调整样式。
- 兼容性较差,支持 ie9+,及现代浏览器。
- 浏览器渲染svg的性能一般,还不如png。
position 的定位方式
- absolute:生成绝对定位的元素,相对于值不为 static 的第一个父元素进行定位
- relative:生成相对定位的元素,相对于其正常位置进行定位
- fixed:生成绝对定位的元素,相对于浏览器窗口进行定位(固定定位)
- static:默认值, 无定位, 元素出现在正常的流中(忽略top,bottom,left,right z-index)
flex布局
Flexbox用于不同尺寸屏幕中创建可自动扩展和收缩布局,使用弹性布局可以有效的分配一个容器的空间,设置了flex布局后,子元素的float、clear和vertical-align属性就会失效
- flex容器属性
- flex-direction: row | row-reverse | column | column-reverse
- flex-wrap: nowrap | wrap | wrap-reverse;
默认情况下,项目都排列在一条轴线上,但有可能一条轴线排不下。
- flex-flow属性:flex-direction和flex-wrap的简写,默认row nowrap
- justify-content属性:定义项目在主轴上的对齐方式。
- align-items属性:定义在交叉轴上的对齐方式
- align-content属性:定义多根轴线的对齐方式
- flex-box属性
- order:定义项目的排列顺序。
数值越小,排列越靠前,默认为0,可以是负值。
- flex-grow:定义项目的放大比例
默认值为0,即如果空间有剩余,也不放大。
可以是小数,按比例占据剩余空间。 - flex-shrink:定义项目的缩小比例
默认值都为1,即如果空间不足将等比例缩小。
如果有一个项目的值为0,其他项目为1,当空间不足时,该项目不缩小。
负值对该属性无效,容器不应该设置flex-wrap。 - flex-basis:定义在分配多余空间之前,项目占据的主轴空间。
默认值为auto,浏览器根据此属性检查主轴是否有多余空间。
- flex: flex-grow,flex-shrink和flex-basis的简写
- align-self:允许单个项目与其他项目有不一样的对齐方式
默认值为auto,表示继承父元素的align-items属性,并可以覆盖align-items属性。
- order:定义项目的排列顺序。
清除浮动
- 给父级使用
:after伪元素 设置clear: both - 末尾处添加
空div标签设置clear:both - 父元素设置
overflow: hidden(必须定义width或zoom:1) - 父元素也设置浮动
- 结尾处加
br标签clear:both
水平居中、垂直居中
- 水平居中
- inline-block实现水平居中(text-align:center;)
- margin和width实现水平居中
- 绝对定位实现水平居中 (宽高确定/不确定)
.child { position: absolute; left: 50%; transform: translateX(-50%); } - 使用flex实现水平居中
- 使用栅格布局grid实现水平居中
- 垂直居中
- 新增 inline-block 兄弟元素,设置 vertical-align
- 绝对定位配合 transform 位移
.child { position: absolute; top: 50%; transform: translateY(-50%); } - 使用flex弹性盒子display:flex
- 未知高度的块级子元素,采用table-cell配合vertical-align
- 已知高度的块级子元素,采用绝对定位和负边距
- 通过css3的translate变形实现
盒子模型
简单的说页面是由若干个盒模型(BOX)堆砌起来的,可以说每个HTML元素就是一个盒模型。
盒模型由外到内包括边距(margin)、边框(border)、填充(padding)、内容(content)
- W3C标准模型 width = content (
box-sizing: content-box) - IE模型 width = content + border + padding (
box-sizing: border-box)
*可以设置box-sizing 属性进行模型设置
BFC (Block Formatting Content)
BFC:块格式化上下文(Block Formatting Context)。BFC 是一个独立的布局环境,可以理解为一个容器,在这个容器中按照一定规则进行物品摆放,并且不会影响其它环境中的物品
- BFC的特性:
- bfc 是一个独立的容器,容器内子元素不会影响容器外的元素
- bfc的区域不会与float的元素区域重叠
- 计算bfc的高度时,浮动元素也参与计算
- 垂直方向上的距离由margin决定
- 内部的Box会在垂直方向上一个接一个的放置
- 以下条件会形成BFC:
- 浮动元素 float:left | right | inherit(none除外)
- position:absolute 或 fixed 定位
- display:inline-block | inline-flex | table-cell
- overflow:hidden | auto | scroll (visible除外)
边距重叠
相邻的两个盒子(可能是兄弟关系也可能是祖先关系)的外边距可以结合成一个单独的外边距。 这种合并外边距的方式被称为折叠 折叠结果遵循下列计算规则:
- 两个相邻的外边距都是 正数 时,折叠结果是它们两者之间 较大的值
- 两个相邻的外边距都是 负数 时,折叠结果是两者 绝对值的较大值
- 两个外边距 一正一负 时,折叠结果是两者的相加的 和
使用 link 和 @import 有什么区别
- link 属于HTML标签,除了加载CSS外,还能用于定 RSS等;@import 只能用于加载CSS (加载内容)
- 页面加载的时,link 会同时被加载,而 @import 引用的 CSS 会等到页面被加载完再加载 (加载方式)
- @import 只在 IE5 以上才能被识别,而 link 是HTML标签,无兼容问题 (兼容问题)
隐藏元素
display: none元素会变得不可见,并且不会再占用文档的空间visibility: hidden只是简单的隐藏某个元素,但是元素占用的空间还存在opacity: 0设置0可以使一个元素完全透明position: absolute设置一个很大的 left 负值定位,使元素定位在可见区域之外transform: scale(0)将一个元素设置为缩放无限小,元素不可见 原来位置将被保留
超出文本自动省略
-
单行
.ellipsis: { overflow:hidden; text-overflow:ellipsis; white-space:nowrap } -
多行
- 利用css
.ellipsis: { overflow: hidden; text-overflow: ellipsis; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; }- 利用伪类
:after
<div id="box"> <span id="text">文本溢出显示省略号,文本溢出显示省略号,文本溢出显示省略号,文本溢出显示省略</span> <span class="ellipsis"></span> </div>#text { display: inline-block; height: 40px; width: 250px; line-height: 20px; overflow: hidden; font-size: 16px; } .ellipsis:after{ display: inline; content: "..."; font-size: 16px; }
css 三角形
.triangle {
width:0;
height:0;
border-width:20px;
border-style:solid;
border-color:transparent transparent red transparent;
}
%、px、em、rem、vw、vh、vm
- px就是pixel像素的缩写,相对长度单位。常用于PC端的字体单位
- em相对于当前父元素的 font-size(并不是固定的)
- rem相对于HTML根元素的 font-size
- %百分比,一般来说就是相对于父元素
- vw是相对视口(viewport)的宽度而定的,长度等于视口宽度的1/100
- vh是相对视口(viewport)的高度而定的,长度等于视口高度的1/100
- vm css3新单位,相对于视口的宽度或高度中较小的那个 1/100
CSS3 高级图形
- 等腰梯形
#o::before{
content: "";
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
z-index: -1;
background: #58a;
/* 重点 */
transform: perspective(.5em) rotateX(3deg);
transform-origin: bottom;
}
- 直角梯形
#o::before{
content: "";
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
z-index: -1;
background: #58a;
/* 重点 */
/*底部固定旋转后,导致文字偏上*/
/*通过放大scale()解决此问题*/
transform: perspective(.5em) rotateX(3deg) scale(1.3);
transform-origin: left bottom; 左下角直角
/* transform-origin: right top; 右上角直角 */
}
- 切角
- 单切角
{ background: #58a; background: linear-gradient(-45deg,transparent 15px,#58a 0); }- 双切角
{ background: #58a; /*right设置切角放置在右下角*/ background: linear-gradient(-45deg,transparent 15px,#58a 0) right, linear-gradient(45deg,transparent 15px,#655 0) left; background-size: 50% 100%; /*平铺了2次*/ background-repeat: no-repeat; }- 四切角
{ background: #58a; background: linear-gradient(-45deg,transparent 15px,#58a 0) bottom right, linear-gradient(45deg,transparent 15px,#58a 0) bottom left, linear-gradient(135deg,transparent 15px,#58a 0) top left, linear-gradient(-135deg,transparent 15px,#58a 0) top right; background-size: 50% 50%; background-repeat: no-repeat; }- 圆切角
{ background: #58a; background: radial-gradient(circle at bottom right ,transparent 15px,#58a 0) bottom right, radial-gradient(circle at bottom left ,transparent 15px,#58a 0) bottom left, radial-gradient(circle at top left ,transparent 15px,#58a 0) top left, radial-gradient(circle at top right ,transparent 15px,#58a 0) top right; background-size: 50% 50%; background-repeat: no-repeat; }
文本不能选择
{
-webkit-user-select: none;
-ms-user-select: none;
-moz-user-select: none;
-khtml-user-select: none;
user-select: none;
}
Meta 标签
1、定义文档的编码格式(H5的标准写法)
<meta charset="UTF-8">
2、声明指定的浏览器以及版本
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
当指定的content值为IE=edge,chrome=1时,优先使用 IE 最新版本和 Chrome。
假定客户端安装了Google Chrome Frame,则在IE中使用chrome的渲染引擎来渲染页面,否则,将会使用客户端IE最高的标准模式对页面进行渲染。
3、viewport移动设备屏幕可视区域
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
- width viewport 宽度(数值/device-width)
- height viewport 高度(数值/device-height)
- initial-scale 初始缩放比例
- maximum-scale 最大缩放比例
- minimum-scale 最小缩放比例
- user-scalable 是否允许用户缩放(yes/no)
4、忽略数字自动识别为电话号码
<meta content="telephone=no" name="format-detection" />5、忽略识别邮箱<meta content="email=no" name="format-detection" />6、Pragma禁止本地缓存<meta http-equiv="Pragma" contect="no-cache" />7、百度禁止转码<meta http-equiv="Cache-Control" content="no-siteapp" />8、SEO优化部分
<!-- 页面关键词 keywords -->
<meta name="keywords" content="your keywords">
<!-- 页面描述内容 description -->
<meta name="description" content="your description">
<!-- 定义网页作者 author -->
<meta name="author" content="author,email address">
<!-- 定义网页搜索引擎索引方式,robotterms 是一组使用英文逗号「,」分割的值,通常有如下几种取值:none,noindex,nofollow,all,index和follow。 -->
<meta name="robots" content="index,follow">
SEO
- 合理的title、description、keywords。
- title值强调重点即可,重要关键词出现不要超过2次,而且要靠前,不同页面title要有所不同。
- description把页面内容高度概括,长度合适,不可过分堆砌关键词,不同页面description有所不同;
- keywords列举出重要关键词即可
- 语义化的HTML代码,符合W3C规范:语义化代码让搜索引擎容易理解网页
- 重要内容HTML代码放在最前:搜索引擎抓取HTML顺序是从上到下,有的 搜索引擎对抓取长度有限制,保证重要内容一定会被抓取
- 重要内容不要用js输出:爬虫不会执行js获取内容
- 少用iframe:搜索引擎不会抓取iframe中的内容
- 非装饰性图片必须加alt
- 提高网站速度:网站速度是搜索引擎排序的一个重要指标
性能优化
content方向
- 减少HTTP请求:合并文件、CSS精灵、inline Image
- 减少DNS查询:DNS查询完成之前浏览器不能从这个主机下载任何文件。方法:DNS缓存、将资源分布到恰当数量的主机名,平衡并行下载和DNS查询
- 避免重定向:多余的中间访问
- 使Ajax可缓存
- 非必须组件延迟加载
- 未来所需组件预加载
- 减少DOM元素数量
- 将资源放到不同的域下:浏览器同时从一个域下载资源的数目有限,增加域可以提高并行下载量
- 减少iframe数量
- 减少404页面
Server方面
- 使用CDN
- 添加Expires或者Cache-Control响应头
- 对组件使用Gzip压缩
- 配置ETag
- Flush Buffer Early
- Ajax使用GET进行请求
- 避免空src的img标签
Cookie方面
- 减小cookie大小
- 引入资源的域名不要包含cookie
css方面
- 将样式表放到页面顶部
- 不使用CSS表达式
- 使用link不使用@import
- 不使用IE的Filter
Javascript方面
- 将脚本放到页面底部
- 将javascript和css从外部引入
- 压缩javascript和css
- 删除不需要的脚本
- 减少DOM访问
- 合理设计事件监听器 图片方面
- 优化图片:根据实际颜色需要选择色深、压缩
- 优化css精灵
- 不要在HTML中拉伸图片
- 保证favicon.ico小并且可缓存
重绘和回流
重绘
改变了背景颜色、边框、字体的颜色,浏览器重新绘制颜色的过程称为重绘
回流
当页面的元素发生变化的时候(宽、高、位置、创建元素),都会导致整个页面重排,浏览器会重新计算结构位置,重新渲染页面,称为DOM回流 回流必定会发生重绘,重绘不一定会引发回流。