css高频考题
整理了一下常见的css的问题
介绍一下标准的 CSS 的盒子模型
- 有两种盒子模型:IE 盒模型(border-box)、W3C 标准盒模型(content-box)
- 盒模型:分为内容(content)、填充(padding)、边界(margin)、边框(border)四个部分
IE 盒模型和 W3C 标准盒模型的区别:
- W3C 标准盒模型:属性 width,height 只包含内容 content,不包含 border 和 padding
- IE 盒模型:属性 width,height 包含 content、border 和 padding,指的是 content + padding + border。
如果将 box-sizing 设为 border-box 则用的是 IE 盒模型。
CSS 选择符有哪些?
- id 选择器(#myid)
- 类选择器(.myclassname)
- 标签选择器(div,h1,p)
- 后代选择器(h1 p)
- 相邻后代选择器(子)选择器(ul>li)
- 兄弟选择器(li~a)
- 相邻兄弟选择器(li+a)
- 属性选择器(a[rel=”external”])
- 伪类选择器(a:hover,li:nth-child)
- 伪元素选择器(::before、::after)
- 通配符选择器(*)
CSS 中哪些属性可以继承
字体系列属性
font、font-family、font-weight、font-size、font-style、font-variant、font-stretch、font-size-adjust文本系列属性
text-indent、text-align、text-shadow、line-height、word-spacing、letter-spacing、text-transform、direction、color表格布局属性
caption-sideborder-collapseempty-cells列表属性
list-style-type、list-style-image、list-style-position、list-style光标属性
cursor元素可见性
visibility
CSS3 新增伪类有那些?
- elem:nth-child(n)选中父元素下的第 n 个子元素,并且这个子元素的标签名为 elem,n可以接受具体的数值,也可以接受函数。
- elem:nth-last-child(n)作用同上,不过是从后开始查找。
- elem:last-child 选中最后一个子元素。
- elem:only-child 如果 elem 是父元素下唯一的子元素,则选中之。
- elem:nth-of-type(n)选中父元素下第 n 个 elem 类型元素,n 可以接受具体的数值,也可以接受函数。
- elem:first-of-type 选中父元素下第一个 elem 类型元素。
- elem:last-of-type 选中父元素下最后一个 elem 类型元素。
- elem:only-of-type 如果父元素下的子元素只有一个 elem 类型元素,则选中该元素。
- elem:empty 选中不包含子元素和内容的 elem 类型元素。
- elem:target 选择当前活动的 elem 元素。
- :not(elem)选择非 elem 元素的每个元素。
- :enabled 控制表单控件的禁用状态。
- :disabled 控制表单控件的禁用状态。
- :checked 单选框或复选框被选中。
CSS3 有哪些新特性?
- 圆角 (border-radius:8px)
- 多列布局 (multi-column layout)
- 阴影和反射 (Shadow\Reflect)
- 文字特效 (text-shadow)
- 文字渲染 (Text-decoration)
- 线性渐变 (gradient)
- 过渡 (transform)缩放,定位,倾斜,动画,多背景
解释一下 CSS3 的 Flexbox(弹性盒布局模型)
width:auto 和 width:100%的区别
width:100%会使元素 box 的宽度等于父元素的 contentbox 的宽度。
width:auto 会使元素撑满整个父元素,margin、border、padding、content 区域会自动分配水平空间。
BFC规范的理解?css中常见的兼容性问题?margin 重叠问题的理解?怎么让 Chrome 支持小于 12px 的文字?
CSS 优化、提高性能的方法有哪些?
加载性能:
- css 压缩:将写好的 css 进行打包压缩,可以减少很多的体积。
- css 单一样式:当需要下边距和左边距的时候,很多时候选择:margin:top 0 bottom 0;但margin-bottom:bottom;margin-left:left;执行的效率更高。
- 减少使用@import,而建议使用 link,因为后者在页面加载时一起加载,前者是等待页面加载完成之后再进行加载。
选择器性能:
- 关键选择器(keyselector)。选择器的最后面的部分为关键选择器(即用来匹配目标元素的部分)。CSS 选择符是从右到左进行匹配的。当使用后代选择器的时候,浏览器会遍历所有子元素来确定是否是指定的元素等等;
- 如果规则拥有 ID 选择器作为其关键选择器,则不要为规则增加标签。过滤掉无关的规则(这样样式系统就不会浪费时间去匹配它们了)。
- 避免使用通配规则,如*{}计算次数惊人!只对需要用到的元素进行选择。
- 尽量少的去对标签进行选择,而是用 class。
- 尽量少的去使用后代选择器,降低选择器的权重值。后代选择器的开销是最高的,尽量将选择器的深度降到最低,最高不要超过三层,更多的使用类来关联每一个标签元素。
- 了解哪些属性是可以通过继承而来的,然后避免对这些属性重复指定规则。
渲染性能:
- 慎重使用高性能属性:浮动、定位。
- 尽量减少页面重排、重绘。
- 去除空规则:{}。空规则的产生原因一般来说是为了预留样式。去除这些空规则无疑能减少 css 文档体积。
- 属性值为 0 时,不加单位。
- 属性值为浮动小数 0.**,可以省略小数点之前的 0。
- 标准化各种浏览器前缀:带浏览器前缀的在前。标准属性在后。
- 不使用@import 前缀,它会影响 css 的加载速度。
- 选择器优化嵌套,尽量避免层级过深。
- css 雪碧图,同一页面相近部分的小图标,方便使用,减少页面的请求次数,但是同时图片本身会变大,使用时,优劣考虑清楚,再使用。
- 正确使用 display 的属性,由于 display 的作用,某些样式组合会无效,徒增样式体积的同时也影响解析性能。
- 不滥用 web 字体。对于中文网站来说 WebFonts 可能很陌生,国外却很流行。webfonts通常体积庞大,而且一些浏览器在下载 webfonts 时会阻塞页面渲染损伤性能。
可维护性、健壮性:
- 将具有相同属性的样式抽离出来,整合并通过 class 在页面中进行使用,提高 css 的可维护性。
- 样式与内容分离:将 css 代码定义到外部 css 中。
上面的选择器性能的第一条,为什么CSS 选择符是从右到左进行匹配的 试想一下,如果采用从左至右的方式读取 CSS 规则,那么大多数规则读到最后(最右)才会发现是不匹配的,这样做会费时耗能,最后有很多都是无用的;而如果采取从右向左的方式,那么只要发现最右边选择器不匹配,就可以直接舍弃了,避免了许多无效匹配
在网页中应该使用奇数还是偶数的字体?为什么呢?
- 偶数字号相对更容易和 web 设计的其他部分构成比例关系。比如:当我用了 14px 的正文字号,我可能会在一些地方用 14×0.5=7px 的 margin,在另一些地方用 14×1.5=21px 的标题字号。
- 浏览器缘故,低版本的浏览器 ie6 会把奇数字体强制转化为偶数,即 13px 渲染为 14px。
- 系统差别,早期的 Windows 里,中易宋体点阵只有 12 和 14、15、16px,唯独缺少 13px。
如何修改 chrome 记住密码后自动填充表单的黄色背景?
chrome 表单自动填充后,input 文本框的背景会变成黄色的,通过审查元素可以看到这是由于 chrome 会默认给自动填充的 input 表单加上 input:-webkit-autofill 私有属性,然后对其赋予以下样式:
1 | { |
对 chrome 默认定义的 background-color,background-image,color 使用 important 是不能提高其优先级的,但是其他属性可使用
使用足够大的纯色内阴影来覆盖 input 输入框的黄色背景,处理如下
1 | input:-webkit-autofill,textarea:-webkit-autofill,select:-webkit-autofill{ |
让页面里的字体变清晰,变细用 CSS 怎么做?
webkit 内核的私有属性:-webkit-font-smoothing,用于字体抗锯齿,使用后字体看起来会更清晰舒服。
在 MacOS 测试环境下面设置-webkit-font-smoothing:antialiased;但是这个属性仅仅是面向MacOS,其他操作系统设
使用 rem 布局的优缺点
优点:
在屏幕分辨率千差万别的时代,只要将 rem 与屏幕分辨率关联起来就可以实现页面的整体缩放,使得在设备上的展现都统一起来了。而且现在浏览器基本都已经支持 rem 了,兼容性也非常的好。
缺点:
- 在奇葩的 dpr 设备上表现效果不太好,比如一些华为的高端机型用 rem 布局会出现错乱。
- 使用 iframe 引用也会出现问题。
- rem 在多屏幕尺寸适配上与当前两大平台的设计哲学不一致。即大屏的出现到底是为了看得又大又清楚,还是为了看的更多的问题。
(…未完待续)