1. CSS优化方法
- 避免过度约束
- 避免后代选择符
- 避免链式选择符
- 使用紧凑的语法
- 避免不必要的命名空间
- 避免不必要的重复
- 最好使用表示语义的名字。
- 避免!important,可以选择其他选择器
- 尽可能的精简规则,合并不同类里的重复规则
2. css sprite 是什么? 有什么优缺点
1. 概念:
将多个小图片拼接到一个图片中。通过 background-position 和元素尺寸调节需要显示的背景图案。
其实就是把网页中一些背景图片整合到一张图片文件中,再利用CSS的“
background-image
”,“background- repeat
”,“background-position
”的组合进行背景定位,background-position
可以用数字能精确的定位出背景图片的位置。这样可以减少很多图片请求的开销,因为请求耗时比较长;请求虽然可以并发,但是也有限制,一般浏览器都是6个。对于未来而言,就不需要这样做了,因为有了http2。
2. 优点:
- 减少 HTTP 请求数,极大地提高页面加载速度。
- 增加图片信息重复度,提高压缩比,减少图片大小。
- 更换风格方便,只需在一张或几张图片上修改颜色或样式即可实现。
3. 缺点:
- 图片合并麻烦。
- 维护麻烦,修改一个图片可能需要从新布局整个图片,样式。
3. 如何垂直居中一个元素?
方法一:绝对定位居中(原始版之已知元素的高宽)
.content {width: 100px;height: 100px;background-color: #6600ff;position: absolute;/*父元素需要相对定位*/top: 50%;left: 50%;margin-top: -50px;/*设为高度的1/2*/margin-left: -50px;/*设为宽度的1/2*/
}
方法二:flex 布局居中
body {display: flex;/*设置外层盒子display为flex*/align-items: center;/*设置内层盒子的垂直居中*/justify-content: center;/*设置内层盒子的水平居中*/.content {width: 100px;height: 100px;background-color: #6600ff;}
}
方法三:绝对定位居中(改进版之二未知元素的高宽)
.content {width: 100px;height: 100px;background-color: #6600ff;margin: auto;/*很关键的一步*/position: absolute;/*父元素需要相对定位*/left: 0;top: 0;right: 0;bottom: 0;/*让四个定位属性都为0*/
}
方法四:绝对定位居中(改进版之一未知元素的高宽)
.content {width: 100px;height: 100px;background-color: #6600ff;position: absolute;/*父元素需要相对定位*/top: 50%;left: 50%;transform: translate(-50%, -50%);/*在水平和垂直方向上各偏移-50%*/
}
4. li 与 li 之间看不见的空白间隔是什么原因引起的?解决办法是?
浏览器的默认行为是把 inline 元素间的空白字符(空格换行 tab)渲染成一个空格,也就是我们上面的代码
<li>
换行后会产生换行字符,而它会变成一个空格,当然空格就占用一个字符的宽度。
解决方案:
方法一:既然是因为 <li>
换行导致的,那就可以将<li>
代码全部写在一排,如下
<div class="wrap"><h3>li标签空白测试</h3><ul><li class="part1"></li><li class="part2"></li><li class="part3"></li><li class="part4"></li></ul>
</div>
方法二:为了代码美观以及方便修改,不可能将 <li>
全部写在一排,空格占一个字符的宽度,直接将<ul>
内的字符尺寸设为 0,将下面样式放入样式表,就可以解决了.,但是<ul>
中的其他文字就不见了,因为其尺寸被设为 0px ,只能重新设定字符尺寸。
.box ul {font-size: 0px;
}
方法三:将 li 父级标签字符设置为 0 在 Safari 浏览器依旧出现间隔空白;将下面代码替换方法二的代码,目前看来可以解决。但 li 内的字符间隔也会被设置,需要将 li 内的字符间隔设为默认。
.wrap ul {letter-spacing: -5px;
}
设置 li 内字符间隔
.wrap ul li {letter-spacing: normal;
}
5. PNG, GIF, JPG 的区别及如何选
-
GIF:
- 256 色
- 无损,编辑 保存时候,不会损失。
- 支持简单动画。
- 支持 boolean 透明,完全透明/不透明
-
JPEG:
- millions of colors
- 有损压缩, 意味着每次编辑都会失去质量。
- 不支持透明。
- 适合照片,实际上很多相机使用的都是这个格式。
-
PNG:
- 无损,其实 PNG 有好几种格式的,一般分为两类:PNG8 和 truecolor PNGs;
与 GIF 相比:
- 它通常会产生较小的文件大小。
- 它支持阿尔法(变量)透明度。
- 无动画支持
与 JPEG 相比:
- 无损
- 文件更大
- 因此可以作为 JPEG 图片中间编辑的中转格式。
结论:
- JPEG 适合照片
- GIF 适合动画
- PNG 适合其他任何种类—图表,buttons,背景,图表等。
6. 行内元素 float:left 后是否变为块级元素?
行内元素设置成浮动之后变得像 inline-block
行内块级元素,设置成这个属性的元素会同时拥有行内和块级的特性,最明显的不同是它的默认宽度不是 100%,行内元素默认 100%宽度占据一行
给行内元素设置padding-top
和padding-bottom
或者width、heigh
t即可