1.介绍一下标准的CSS的盒子模型?低版本IE的盒子模型有什么不同的?

(1)有两种, IE 盒子模型、W3C 盒子模型;

(2)盒模型: 内容(content)、填充(padding)、边界(margin)、 边框(border);

(3)区 别: IE的content部分把 border 和 padding计算了进去;

2.CSS选择符有哪些?哪些属性可以继承?

  • 选择符

    (1)id选择器( # myid)

    (2)类选择器(.myclassname)

    (3)标签选择器(div, h1, p)

    (4)相邻选择器(h1 + p)

    (5)子选择器(ul > li)

    (6)后代选择器(li a)

    (7)通配符选择器( * )

    (7)属性选择器(a[rel = "external"])

    (9)伪类选择器(a:hover, li:nth-child)
  • 可继承的样式: font-size font-family color, ul li dl dd dt
  • 不可继承的样式:border padding margin width height

3.CSS优先级算法如何计算?

  • 优先级就近原则,同权重情况下样式定义最近者为准;
  • 载入样式以最后载入的定位为准;

优先级:

同权重: 内联样式表(标签内部)> 嵌入样式表(当前文件中)>外部样式表(外部文件中)。

!important > id > class > tag

important 比 内联优先级高

4.CSS3新增伪类有那些?

  1. p:first-of-type 选择属于其父元素的首个 <p> 元素的每个 <p> 元素
  2. p:last-of-type 选择属于其父元素的最后 <p> 元素的每个 <p> 元素
  3. p:only-of-type 选择属于其父元素唯一的 <p> 元素的每个 <p> 元素
  4. p:only-child 选择属于其父元素的唯一子元素的每个 <p> 元素
  5. p:nth-child(2) 选择属于其父元素的第二个子元素的每个 <p> 元素
  6. ::after 在元素尾部添加内容,也可以用来做清除浮动
  7. ::before 在元素头部添加内容
  8. :enabled 匹配每个已启用的元素
  9. :disabled 控制表单控件的禁用状态
  10. :checked 单选框或复选框被选中

5.如何居中div?

(1)水平居中:给div设置一个宽度,然后添加margin:0 auto属性

  1. div{
  2. width:200px;
  3. margin:0 auto;
  4. }

(2)让绝对定位的div居中

  1. div {
  2. position: absolute;
  3. width: 300px;
  4. height: 300px;
  5. margin: auto;
  6. top: 0;
  7. left: 0;
  8. bottom: 0;
  9. right: 0;
  10. background-color: pink; /* 方便看效果 */
  11. }

(3)水平垂直居中一

  1. 已知容器的宽高 500 300
  2. 设置层的 'margin'
  3. div {
  4. position: relative; /* 相对定位或绝对定位均可 */
  5. width:500px;
  6. height:300px;
  7. top: 50%;
  8. left: 50%;
  9. margin: -150px 0 0 -250px; /* 外边距为自身宽高的一半 */
  10. background-color: pink; /* 方便看效果 */
  11. }

(4)水平垂直居中二

  1. 未知容器的宽高
  2. 利用 'transform' 属性
  3. div {
  4. position: absolute; /* 相对定位或绝对定位均可 */
  5. width:500px;
  6. height:300px;
  7. top: 50%;
  8. left: 50%;
  9. transform: translate(-50%, -50%);
  10. background-color: pink; /* 方便看效果 */
  11. }

(5)水平垂直居中三

  1. 利用 'flex' 布局
  2. 实际使用时应考虑兼容性
  3. .container {
  4. display: flex;
  5. align-items: center; /* 垂直居中 */
  6. justify-content: center; /* 水平居中 */
  7. }
  8. .container div {
  9. width: 100px;
  10. height: 100px;
  11. background-color: pink; /* 方便看效果 */
  12. }

6.display有哪些值?说明他们的作用。

  • block 块类型。默认宽度为父元素宽度,可设置宽高,换行显示;
  • none 元素不显示,并从文档流中移除;
  • inline 行内元素类型。默认宽度为内容宽度,不可设置宽高,同行显示;
  • inline-block 默认宽度为内容宽度,可以设置宽高,同行显示;
  • list-item 象块类型元素一样显示,并添加样式列表标记;
  • table 此元素会作为块级表格来显示;
  • inherit 规定应该从父元素继承 display 属性的值。

7.position的值relative和absolute定位原点是?

  • absolute 生成绝对定位的元素,相对于值不为 static的第一个父元素进行定位。
  • fixed (老IE不支持)生成绝对定位的元素,相对于浏览器窗口进行定位。
  • relative 生成相对定位的元素,相对于其正常位置进行定位。
  • static 默认值。没有定位,元素出现在正常的流中(忽略 top, bottom, left, right z-index 声明)。
  • inherit 规定从父元素继承 position 属性的值。

8.CSS3有哪些新特性?

  • 新增各种CSS选择器 (: not(.input):所有 class 不是“input”的节点)
  • 圆角 (border-radius:8px)
  • 多列布局 (multi-column layout)
  • 阴影和反射 (Shadow\Reflect)
  • 文字特效 (text-shadow、)
  • 文字渲染 (Text-decoration)
  • 线性渐变 (gradient)
  • 旋转 (transform)
  • 缩放,定位,倾斜,动画,多背景
  1. transform:\scale(0.85,0.90)\ translate(0px,-30px)\ skew(-9deg,0deg)\Animation

9.请解释一下CSS3的Flexbox(弹性盒布局模型),以及适用场景?

  • 一个用于页面布局的全新CSS3功能,Flexbox可以把列表放在同一个方向(从上到下排列,从左到右),并让列表能延伸到占用可用的空间。
  • 较为复杂的布局还可以通过嵌套一个伸缩容器(flex container)来实现。
  • 采用Flex布局的元素,称为Flex容器(flex container),简称"容器"。
  • 它的所有子元素自动成为容器成员,称为Flex项目(flex item),简称"项目"。
  • 常规布局是基于块和内联流方向,而Flex布局是基于flex-flow流可以很方便的用来做局中,能对不同屏幕大小自适应。
  • 在布局上有了比以前更加灵活的空间。

10.用纯CSS创建一个三角形的原理是什么?

原理:把上、左、右三条边隐藏掉(颜色设为 transparent)

  1. #demo {
  2. width: 0;
  3. height: 0;
  4. border-width: 20px;
  5. border-style: solid;
  6. border-color: transparent transparent red transparent;
  7. }

11.一个满屏 品 字布局 如何设计?

实现方式:

上面的div宽100%,

下面的两个div分别宽50%,

然后用float或者inline使其不换行即可

12.css多列等高如何实现?

利用padding-bottom|margin-bottom正负值相抵;设置父容器设置超出隐藏(overflow:hidden),这样子父容器的高度就还是它里面的列没有设定padding-bottom时的高度,当它里面的任一列高度增加了,则父容器的高度被撑到里面最高那列的高度,其他比这列矮的列会用它们的padding-bottom补偿这部分高度差。

13.经常遇到的浏览器的兼容性有哪些?原因,解决方法是什么,常用hack的技巧 ?

  • png24位的图片在iE6浏览器上出现背景,解决方案是做成PNG8.

  • 浏览器默认的margin和padding不同。

解决方案:

  1. 最简单的方法,但是不建议使用,具体可以参照 15条初始化样式
  2. *{
  3. margin:0;
  4. padding:0;
  5. }
  • IE6双边距bug:块属性标签float后,又有横行的margin情况下,在ie6显示margin比设置的大。

    浮动ie产生的双倍距离,如:
  1. #box{
  2. float:left;
  3. width:10px;
  4. margin:0 0 0 100px;
  5. }
  6. 这种情况之下IE会产生20px的距离

解决方案:

  1. #box{
  2. float:left;
  3. _display:inline; // '_'这个符号只有ie6会识别
  4. width:10px;
  5. margin:0 0 0 100px;
  6. }

渐进识别的方式,从总体中逐渐排除局部。

首先,巧妙的使用“\9”这一标记,将IE游览器从所有情况中分离出来。

接着,再次使用“+”将IE8和IE7、IE6分离开来,这样IE8已经独立识别。

  1. .bb{
  2. background-color:red; /*所有识别*/
  3. background-color:#00deff\9; /*IE6、7、8识别*/
  4. +background-color:#a200ff; /*IE6、7识别*/
  5. _background-color:#1e0bd1; /*IE6识别*/
  6. }
  • IE下,可以使用获取常规属性的方法来获取自定义属性,也可以使用getAttribute()获取自定义属性;

    Firefox下,只能使用getAttribute()获取自定义属性。

解决方案: 统一通过getAttribute()获取自定义属性。

  • IE下,even对象有x,y属性,但是没有pageX,pageY属性;

    Firefox下,event对象有pageX,pageY属性,但是没有x,y属性。

解决方案: (条件注释)缺点是在IE浏览器下可能会增加额外的HTTP请求数。

  • Chrome 中文界面下默认会将小于 12px 的文本强制按照 12px 显示

解决方法: 可通过加入 CSS 属性 -webkit-text-size-adjust: none; 解决。

  • 超链接访问过后hover样式就不出现了,被点击访问过的超链接样式不在具有hover和active了

解决方案:

改变CSS属性的排列顺序: L-V-H-A

a:link {} a:visited {} a:hover {} a:active {}

14.li与li之间有看不见的空白间隔是什么原因引起的?有什么解决办法?

行框的排列会受到中间空白(回车\空格)等的影响,因为空格也属于字符,这些空白也会被应用样式,占据空间,所以会有间隔,把字符大小设为0,就没有空格了。

15.为什么要初始化CSS样式。

  • 因为浏览器的兼容问题,不同浏览器对有些标签的默认值是不同的,如果没对CSS初始化往往会出现浏览器之间的页面显示差异。

  • 当然,初始化样式会对SEO有一定的影响,但鱼和熊掌不可兼得,但力求影响最小的情况下初始化。

  • 最简单的初始化方法: (强烈不建议)

  1. * {
  2. padding: 0;
  3. margin: 0;
  4. }

淘宝的样式初始化代码:

  1. body, h1, h2, h3, h4, h5, h6, hr, p, blockquote, dl, dt, dd, ul, ol, li, pre, form, fieldset, legend, button, input, textarea, th, td {
  2. margin:0; padding:0;
  3. }
  4. body, button, input, select, textarea {
  5. font:12px/1.5tahoma, arial, \5b8b\4f53;
  6. }
  7. h1, h2, h3, h4, h5, h6 {
  8. font-size:100%;
  9. }
  10. address, cite, dfn, em, var {
  11. font-style:normal;
  12. }
  13. code, kbd, pre, samp {
  14. font-family:couriernew,
  15. courier, monospace;
  16. }
  17. small{
  18. font-size:12px;
  19. }
  20. ul, ol {
  21. list-style:none;
  22. }
  23. a {
  24. text-decoration:none;
  25. }
  26. a:hover {
  27. text-decoration:underline;
  28. }
  29. sup {
  30. vertical-align:text-top;
  31. }
  32. sub{
  33. vertical-align:text-bottom;
  34. }
  35. legend {
  36. color:#000;
  37. }
  38. fieldset, img {
  39. border:0;
  40. }
  41. button, input, select, textarea {
  42. font-size:100%;
  43. }
  44. table {
  45. border-collapse:collapse;
  46. border-spacing:0;
  47. }

16.css定义的权重

以下是权重的规则:标签的权重为1,class的权重为10,id的权重为100

  1. /* 权重为1 */
  2. div{ }
  3. /* 权重为10 */
  4. .class1{ }
  5. /* 权重为100 */
  6. #id1{ }
  7. /* 权重为100+1=101 */
  8. #id1 div{ }
  9. /* 权重为10+1=11 */
  10. .class1 div{ }
  11. /* 权重为10+10+1=21 */
  12. .class1 .class2 div{ }

如果权重相同,则最后定义的样式会起作用,但是应该避免这种情况出现

17.请解释一下为什么需要清除浮动?清除浮动的方式

why? 清除浮动是为了清除使用浮动元素产生的影响。浮动的元素,高度会塌陷,而高度的塌陷使我们页面后面的布局不能正常显示。

方式:

(1)父级div定义height;(要求能够详细计算出实际高度,否则容易布局混乱,不推荐使用。)

(2)父级div 也一起浮动;(与父元素相邻的元素的布局会受到影响,如果全部浮动的话,太麻烦也不利于后期维护,不推荐使用。)

(3)父级div定义 overflow: hidden;(无法显示溢出部分,会触发BFC,不推荐使用。)

(4)浮动元素的父级div定义伪类:after

  1. div::after,div::before{
  2. content: " ";
  3. visibility: hidden;
  4. display: block;
  5. height: 0;
  6. clear: both;
  7. }
  8. div {
  9. *zoom: 1;
  10. }

解析原理:

(1)display:block 使生成的元素以块级元素显示,占满剩余空间;

(2)height:0 避免生成内容破坏原有布局的高度;

(3)visibility:hidden 使生成的内容不可见,并允许可能被生成内容盖住的内容可以进行点击和交互;

(4)通过 content:" "生成内容作为最后一个元素,至于content里面是点还是其他都是可以的,例如oocss里面就有经典的 content:"",有些版本可能content里面内容为空,一丝冰凉是不推荐这样做的,firefox直到7.0 content:"" 仍然会产生额外的空隙;

(5)zoom:1 触发IE hasLayout。

18.什么是外边距合并?

外边距合并指的是,当两个垂直外边距相遇时,它们将形成一个外边距。

合并后的外边距的高度等于两个发生合并的外边距的高度中的较大者。

19.::before 和 :after中双冒号和单冒号 有什么区别?解释一下这2个伪元素的作用。

  • 单冒号(:)用于CSS3伪类,双冒号(::)用于CSS3伪元素。(伪元素由双冒号和伪元素名称组成)
  • 双冒号是在当前规范中引入的,用于区分伪类和伪元素。不过浏览器需要同时支持旧的已经存在的伪元素写法,:before、:after等,而新的在CSS3中引入的伪元素则不允许再支持旧的单冒号的写法。
  • 想让插入的内容出现在其它内容前,使用::before,否者,使用::after;
  • 在代码顺序上,::after生成的内容也比::before生成的内容靠后。
  • 如果按堆栈视角,::after生成的内容会在::before生成的内容之上

20.CSS优化、提高性能的方法有哪些?

  • 关键选择器(key selector),选择器的最后面的部分为关键选择器(即用来匹配目标元素的部分);
  • 如果规则拥有 ID 选择器作为其关键选择器,则不要为规则增加标签。过滤掉无关的规则(这样样式系统就不会浪费时间去匹配它们了);
  • 提取项目的通用公有样式,增强可复用性,按模块编写组件;增强项目的协同开发性、可维护性和可扩展性;
  • 使用预处理工具或构建工具(gulp对css进行语法检查、自动补前缀、打包压缩、自动优雅降级)。

前端开发面试题 — css篇的更多相关文章

  1. 前端开发面试题-CSS(转载)

    本文由 本文的原作者markyun 收集总结. 介绍一下标准的CSS的盒子模型?低版本IE的盒子模型有什么不同的? (1)有两种, IE 盒子模型.W3C 盒子模型: (2)盒模型: 内容(conte ...

  2. 前端开发面试题 — html篇

    正值跳槽的金三银四月,在四月的中旬之际,博主为大家整理了几篇前端面试题,希望不会太迟 1.Doctype作用?标准模式与兼容模式各有什么区别? (1)<!DOCTYPE> 声明位于HTML ...

  3. 【理论面试篇】收集整理来自网络上的一些常见的 经典前端、H5面试题 Web前端开发面试题

    ##2017.10.30收集 面试技巧 5.1 面试形式 1)        一般而言,小公司做笔试题:大公司面谈项目经验:做地图的一定考算法 2)        面试官喜欢什么样的人 ü  技术好. ...

  4. 前端开发面试题收集 JS

    前端开发面试题收集-JS篇 收集经典的前端开发面试题 setTimeout的时间定义为0有什么用? javascript引擎是单线程处理任务的,它把任务放在队列中,不会同步执行,必须在完成一个任务后才 ...

  5. 前端开发面试题总结之——JAVASCRIPT(一)

    ___________________________________________________________________________________ 相关知识点 数据类型.运算.对象 ...

  6. 前端开发面试题总结之——HTML

    ______________________________________________________________________________________________ 相关知识点 ...

  7. 前端开发面试题总结之——CSS3

    ____________________________________________________________________________________________ 相关知识点 布 ...

  8. 前端开发面试题总结之——JAVASCRIPT(二)

    ___________________________________________________________________________________ 相关知识点 数据类型.运算.对象 ...

  9. 前端开发面试题-HTML(转载)

    本文由 本文的原作者markyun 收集总结了一些前端面试题,初学者阅后也要用心钻研其中的原理,重要知识需要系统学习.透彻学习,形成自己的知识链.万不可投机取巧,临时抱佛脚只求面试侥幸混过关是错误的! ...

随机推荐

  1. 新手如何通过内存和NGK DeFi Baccarat进行组合投资?

    区块链市场在2020年迎来了大爆发,资本市场异常火热.无论是内存,还是DeFi,都无疑是这个火爆的区块链市场中的佼佼者.通过投资内存和DeFi,很多投资者都已经获取了非常可观的收益,尝到了资本市场带来 ...

  2. C++算法代码——Tuna

    这道题像个水题啊,可是在我做的这个OJ上就十几人做出来-- 题目来自:http://218.5.5.242:9018/JudgeOnline/problem.php?id=2084 题目描述 渔民抓住 ...

  3. 1047 Student List for Course ——PAT甲级真题

    1047 Student List for Course Zhejiang University has 40,000 students and provides 2,500 courses. Now ...

  4. 基于Docker Compose部署分布式MinIO集群

    一.概述 Minio 是一个基于Go语言的对象存储服务.它实现了大部分亚马逊S3云存储服务接口,可以看做是是S3的开源版本,非常适合于存储大容量非结构化的数据,例如图片.视频.日志文件.备份数据和容器 ...

  5. 看完我的笔记不懂也会懂----Node.js

    Node.js 学习 - 命令行窗口 - 进程与线程 - ECMAScript的缺点 - Node模块化 - Node中的全局对象 - 包 package - NPM包管理器 (Node Packag ...

  6. 用量子计算模拟器ProjectQ生成随机数,并用pytest进行单元测试与覆盖率测试

    技术背景 本文中主要包含有三个领域的知识点:随机数的应用.量子计算模拟产生随机数与基于pytest框架的单元测试与覆盖率测试,这里先简单分别介绍一下背景知识. 随机数的应用 在上一篇介绍量子态模拟采样 ...

  7. Linear Algebra From Data

    Linear Algebra Learning From Data 1.1 Multiplication Ax Using Columns of A 有关于矩阵乘法的理解深入 矩阵乘法理解为左侧有是一 ...

  8. IDEA中便捷内存数据库H2的最简使用方式

    在IDEA中有时候为了练习,需要使用到数据库,但如果自己工作或开发机子上本来没有安装数据库,也没有可用的远程数据库时,我们可以直接在IDEA环境上使用便捷式的内存数据库H2,关于H2更多知识就自己去找 ...

  9. rest framework renderers

    渲染器 前TemplateResponse实例可以被返回给客户端,它必须被渲染.渲染过程需要模板和上下文的中间表示,并把它变成能够提供给客户端的最后一个字节流. - Django文档 REST框架包含 ...

  10. 如何下载Image Properties Context Menu(图片)插件

    如何下载Image Properties Context Menu(图片)插件 可以通过:http://www.cnplugins.com/zhuanti/four-image-processing. ...