CSS前端面试题整合

CSS3新特性
  • 支持rgba和透明度
  • 支持媒体查询
  • 支持自定义字体 对长的不可分割单词换行word-wrap:break-word;
  • 文字阴影text-shadow: 5px 5px 5px #ff0000;
  • 盒阴影box-shadow: 10px 10px 5px #888888
  • 支持圆角border-radius: 50%;
  • 边框图片border-image: url(border.png) 30 30 round
  • 新增伪类
  p:first-of-type 选择属于其父元素的首个 <p> 元素的每个 <p> 元素。
    p:last-of-type  选择属于其父元素的最后 <p> 元素的每个 <p> 元素。
    p:only-of-type  选择属于其父元素唯一的 <p> 元素的每个 <p> 元素。
    p:only-child    选择属于其父元素的唯一子元素的每个 <p> 元素。
    p:nth-child(2)  选择属于其父元素的第二个子元素的每个 <p> 元素。
    :enabled、:disabled 控制表单控件的禁用状态。
    :checked,单选框或复选框被选中。
水平垂直居中方法
/* 公共代码 */
<div class="wp">
    <div class="box size">123123</div>
</div>
/* 公共代码 */
.wp {border: 1px solid red;width: 300px;height: 300px;}
.box {background: green;}
.size{width: 100px;height: 100px;}

1)flex方法

<div class="wp">
    <div class="box">123123</div>
</div>
.wp {
    display: flex;
    justify-content: center;
    align-items: center;
}

2)absolute + 负margin

.wp {
    position: relative;
}
.box {
    position: absolute;;
    top: 50%;
    left: 50%;
    margin-left: -50px;
    margin-top: -50px;
}

5)absolute + margin auto

/* 定位代码 */
.wp {
    position: relative;
}
.box {
    position: absolute;;
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
    margin: auto;
}

)absolute + calc
要求居中元素的宽高必须固定,css3带来了计算属性,既然top的百分比是基于元素的左上角,那么在减去宽度的一半就好了。

/* 定位代码 */
.wp {
    position: relative;
}
.box {
    position: absolute;;
    top: calc(50% - 50px);
    left: calc(50% - 50px);
}

2)absolute + transform

<div class="wp">
    <div class="box">123123</div>
</div>
/* 绝对定位,但这个方法不需要子元素固定宽高,所以不再需要size类了 */
.wp {
    position: relative;
}
.box {
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
}

2)grid

<div class="wp">
    <div class="box">123123</div>
</div>
.wp {
    display: grid;
}
.box {
    align-self: center;
    justify-self: center;
}
复制代码代码量也很少,但兼容性不如flex,不推荐使用

3)css-table

<div class="wp">
    <div class="box">123123</div>
</div>
下面通过css属性,可以让div显示的和table一样
.wp {
    display: table-cell;
    text-align: center;
    vertical-align: middle;
}
.box {
    display: inline-block;
}
复制代码这种方法和table一样的原理,但却没有那么多冗余代码,兼容性也还不错

4)

lineheight
利用行内元素居中属性也可以做到水平垂直居中

<div class="wp">
    <div class="box">123123</div>
</div>
/* 定位代码 */
.wp {
    line-height: 300px;
    text-align: center;
    font-size: 0px;
}
.box {
    font-size: 16px;
    display: inline-block;
    vertical-align: middle;
    line-height: initial;
    text-align: left; /* 修正文字 */
}
CSS中类(classes)和ID的区别
  1. 语法不同,#idname, .classname 。
  2. 影响元素不同,#idname作用单个元素,.classname作用所有元素。
  3. 选择器权重不同,#idname权值高于.classname。

优先级为:
!important > id > class > tag
important 比 内联优先级高

请解释*{ box-sizing: border-box }的作用,并且说明使用它有什么好处?

box-sizing的值有2种,一个是content-box,一个是border-box,
content-box仅仅包含content。
border-box的width会将content, padding和border包含在内,例如width:100%指的是包含了content,padding和border的宽度,布局时更好控制。

扫描二维码关注公众号,回复: 10827248 查看本文章
请问在确定样式的过程中优先级是如何决定的(请举例)?如何使用此系统?。

优先级由高到低
!important 不建议的实践
行内样式
ID选择器 #foo
类选择器.foo,属性选择器[type=“radio”],伪类:hover
类型选择器p,span,伪元素::before

请问为何要使用translate()而非absolute position,或反之的理由?为什么?

translate()涉及到的是合成器线程,与主线程是相互独立的,所以会比较快。
而absolute positioning涉及到的是主线程,会导致主线程负责的布局重绘和js执行,所以会比较慢。使用CSS3动画代替JS动画的
好处是:

  1. 不占用JS主线程;
  2. 可以利用硬件加速;
  3. 浏览器可对动画做优化(元素不可见时不动画,减少对FPS的影响)。

坏处是:
  浏览器对渲染的批量异步化处理让动画难以控制,此时可以用
cookie、session、sessionStorage、localStorage 之间的区别及应用场景
cookie 存储量小、安全性差、数据操作接口不友好,而 webStorage 存储量较大、安全性较高、数据接口友好。
若要持久的存储方式,推荐使用 localStorage
若要一次性会话的存储,推荐使用 sessionStorage

CSS中可以通过哪些属性定义,使得一个DOM元素不显示在浏览器可视范围内?

最基本的:

  • 设置display属性为none,
  • 设置visibility属性为hidden

技巧性:

  • 设置宽高为0,
  • 设置透明度为0,
  • 设置z-index位置在-1000
什么是Css Hack?ie6,7,8的hack分别是什么?

针对不同的浏览器写不同的CSS code的过程,就是CSS hack。

请用Css写一个简单的幻灯片效果页面

知道是要用css3。使用animation动画实现一个简单的幻灯片效果。

rgba()和opacity的透明效果有什么不同?

rgba()和opacity都能实现透明效果,但最大的不同是opacity作用于元素,以及元素内的所有内容的透明度,
而rgba()只作用于元素的颜色或其背景色。(设置rgba透明的元素的子元素不会继承透明效果!)

css中可以让文字在垂直和水平方向上重叠的两个属性是什么?

垂直方向:line-height
水平方向:letter-spacing
那么问题来了,关于letter-spacing的妙用知道有哪些么?
答案:可以用于消除inline-block元素间的换行符空格间隙问题。

px和em的区别。

px和em都是长度单位。

区别:

  • px的值是固定的,指定是多少就是多少,计算比较容易。
  • em得值不是固定的,并且em会继承父级元素的字体大小。

浏览器的默认字体高都是16px。所以未经调整的浏览器都符合: 1em=16px。那么12px=0.75em, 10px=0.625em。

Sass、LESS是什么?大家为什么要使用他们?

是CSS预处理器。他是CSS上的一种抽象层。他们是一种特殊的语法/语言编译成CSS。
例如Less是一种动态样式语言. 将CSS赋予了动态语言的特性,如变量,继承,运算, 函数. LESS 既可以在客户端上运行 (支持IE 6+, Webkit, Firefox),也可一在服务端运行 (借助 Node.js)。
为什么要使用它们?

  1. 结构清晰,便于扩展。
  2. 可以轻松实现多重继承。
  3. 完全兼容 CSS 代码,可以方便地应用到老项目中。
display:none与visibility:hidden的区别是什么?

display : 隐藏对应的元素但不挤占该元素原来的空间。(回流+重绘)
visibility: 隐藏对应的元素并且挤占该元素原来的空间。(重绘)
即是,使用CSS display:none属性后,HTML元素(对象)的宽度、高度等各种属性值都将“丢失”;而使用visibility:hidden属性后,HTML元素(对象)仅仅是在视觉上看不见(完全透明),而它所占据的空间位置仍然存在。

CSS中link和@import的区别是:
  • Link属于html标签
  • @import是CSS中提供的

在页面加载的时候,link会同时被加载,而@import引用的CSS会在页面加载完成后才会加载引用的CSS;
@import只有在ie5以上才可以被识别,而link是html标签,不存在浏览器兼容性问题
Link引入样式的权重大于@import的引用(@import是将引用的样式导入到当前的页面中)

为什么要初始化样式?

由于浏览器兼容的问题,不同的浏览器对标签的默认样式值不同,若不初始化会造成不同浏览器之间的显示差异,但是初始化CSS会对搜索引擎优化造成小影响。

BFC是什么?

BFC(块级格式化上下文),一个创建了新的BFC的盒子是独立布局的,盒子内元素的布局不会影响盒子外面的元素。在同一个BFC中的两个相邻的盒子在垂直方向发生margin重叠的问题
BFC是指浏览器中创建了一个独立的渲染区域,该区域内所有元素的布局不会影响到区域外元素的布局,这个渲染区域只对块级元素起作用。那些元素会生成BFC:

  • 根元素
  • float不为none的元素
  • position为fixed和absolute的元素
  • display为inline-block、table-cell、table-caption,flex,inline-flex的元素
  • overflow不为visible的元素
transition和animation的区别

Animation和transition大部分属性是相同的,他们都是随时间改变元素的属性值。
主要区别:

  • transition需要触发一个事件才能改变属性
  • animation不需要触发任何事件的情况下才会随时间改变属性值,并且transition为2帧,从from …
    to,而animation可以一帧一帧的。
CSS 有哪些样式可以给子元素继承!

可继承的:font-size,font-weight,line-height,color,cursor等
不可继承的一般是会改变盒子模型的:display,margin、border、padding、height等

清除浮动方法
  1. 添加空div,使用clear: both; 缺点:进行清除浮动;会添加很多无意义的空标签,有违结构与表现的分离,在后期维护中将是噩梦;
  2. 父元素使用overflow: hidden; 缺点:不能配合position一起使用,超出的部分会被隐藏;
  3. 父元素使用overflow:auto;缺点:超出部分会出现滚动条;
  4. 父级定义高度
  5. 推荐使用的方法:父级div定义伪类:after和zoom
为什么要清除浮动

浮动元素碰到包含它的边框或者浮动元素的边框停留。由于浮动元素不在文档流中,所以文档流的块框表现得就像浮动框不存在一样。浮动元素会漂浮在文档流的块框上。
浮动带来的问题:

  • 父元素的高度无法被撑开,影响与父元素同级的元素 与浮动元素同级的非浮动元素(内联元素)会跟随其后若非第一个元素浮动,则该元素之前的元素也需要浮动,否则会影响页面显示的结构。
如何水平居中一个浮动元素?
#test {
  position: absolute;
  width: 100px;
  height: 100px;
  background-color: green;
  <!-- 三行代码缺一不可 -->
  margin: 0 auto;
  left: 0;
  right: 0;
}
利用CSS画三角形
#triangle {
    width: 0;
    height: 0;
    border-top: 40px solid transparent;
    border-left: 40px solid transparent;
    border-right: 40px solid transparent;
    border-bottom: 40px solid greenyellow;
  }
  <div id="triangle"><div>
发布了25 篇原创文章 · 获赞 13 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/zerogf/article/details/105542014