CSS常见面试题

CSS面试题

1. 介绍一下标准的css的盒子模型?低版本IE的盒子模型有什么不同
标准模型由四部分组成:

内容区域: 可以放置元素的区域如文本,图像等,一般设置宽高指的是这个内容的宽高
内边距的区域:内容与边框之间的距离
边框区域: 边框
外边框区域:由外边框限制,用空白区域扩展边框区域,开分开相邻的元素
模型区分:

标准表型指的是设置box-sizing为content-box的盒子模型,一般width,height指的是content的宽高。IE盒模型指的是box-sizing为border-box的盒子。宽高的计算是content+padding+border;

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

id选择器(#myid)
类选择器(.myclassName)
标签选择器(div,h1,p)
子代选择器(ul>li)
后代选择器(li a)
通配符选择器(*)
属性选择器(a[rel=“external”])
伪类选择器(a:hover,li:nth-child)
可继承的样式: font-size font-family color
不可继承的样式: border padding margin height width

3. css优先级如何计算?

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

同权重: 内联样式(标签内部)> 嵌入样式表(当前文件中)>外部样式(外部文件中)
!important >id >class >tag
!important 比内联优先级高

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

block 块类型。默认宽度为父元素宽度,可设置宽高,换行显示
none 元素不显示,并从文档流中移除
inline 行内元素,默认宽度为内容宽度,不可设置宽高,同行显示
inline-block 默认宽度为内容宽度,可以设置宽高,同行显示
list-item 像块类型元素一样,可以设置宽高,同行显示
table 此元素会作为会计表格来显示
inherit 规定应该从父元素继承display属性的值
5. position的值releave和absolute定位远点是?
absolute 生成绝对定位元素,相对与值部位static的第一个父元素进行定位
fixed 生成绝对的元素,相对于浏览器窗口进行定位
relative 生成相对定位的元素,相对于其正常位置进行定位
static 默认值。没有定位,元素出现在正常出现的流中
inherit 规定从父元素继承position属性的值

6. css有哪些特性?

过渡
transition-property:width
transition-duration:1s
transition-timing-function:linear
transition-delay:2s

动画
animation:动画名称,一个周期花费时间,云顶曲线(默认ease),动画延迟(默认0),动画播放次数(默认1),是否反向播放动画(默认normal),是否暂停动画(默认running)

形状转换
transform: 使用于2D或3D转换的元素
transform-origin: 装换元素的位置(围绕哪个点进行装换).默认(x,y,z);
选择器

阴影
box-shadow: 水平阴影的位置 垂直阴影的位置 模糊距离 阴影的大小 阴影的颜色 阴影开始的方向(默认是从里向外,设置inset就是从外往里)

边框图片
border-image: 设置图片路径 设置边框背景图的分割方式 设置或检索对象的边框厚度 设置或检索对象的边框背景图向外扩展 设置边框图片的平铺方式

边框圆角
border-radius: n1 n2 n3 n4;
/* n1-n4 四个值得顺序是左上角,右上角,右下角,左下角 */
反射(倒影)
box-reflect: 方向[above-上|below-下|right-右|left-左],偏移量,遮罩图片

文字
换行 word-break:normal(默认使用浏览器默认的换行规则)|break-all(允许在单词内换行)|keep-all(只能在半角空格或连字符处换行)

超出省略号

overflow: hidden;
white-space: nowrap;
text-overflow:ellipsis;

多行省略号
overflow:hiden;
text-overflow:ellipsis;//用省略号"…"隐藏超出范围的文本
display:-webkit-box; //将对象作为弹性伸缩盒子模型显示
-webkit-line-clamp:2; //用来限制在一个块元素显示的文本的行数
-webkit-box-orient:vertical;//设置弹性盒对象的子元素的排列方式

文字阴影
text-shadow: 水平阴影 垂直阴影 模糊阴影 阴影颜色

颜色
rgba(rgb颜色值,a为透明度)

渐变
线性渐变和径向渐变

filter(滤镜)
filter: 滤镜效果(透明度)

弹性布局
弹性布局就是flex布局

栅格布局
栅格化布局就是grid

盒模型
border-box 边框和内边距包含在元素的宽高之内
content-box 边框和内边距不包含在元素的宽高之内

7. 请解释一下css3的flex(弹性盒布局模型)以及使用场景

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

8. 经常遇到的浏览器的兼容性问题有哪些,原因,解决方法是什么

png24位的图片在Ie6浏览器上出现背景。解决方案是做成png8
浏览器默认的margin和padding不同。解决方案是假一个全局的*{margin:0;padding:0}来统一
IE6双边距bug;矿属性变迁float后,又有横向的margin情况下,在Ie6显示margin比设置的大。解决方案是在float的标签控制中加入display:inline;将其妆花为行内渐进识别的方式,从总体中逐步排除局部。
设置较小高度标签(一般小于10px),在IE6,IE7中高度超出自己设置高度。解决方法:给超出高度的标签设置overflow:hidden;或者设置行高line-hieght小于你设置的高度
chrome中文界面默认或将小于12px的文本强制按照12px的文本强制按照12px显示,可通过加入css属性 -webkit-text-size-adjust:none 解决

移动端

1px边框问题。解决方案采用微元素模拟的方式

 .scale{
  position: relative;
  border:none;
 }
.scale:after{
  content: '';
  position: absolute;
  bottom: 0;
  background: #000;
  width: 100%;
  height: 1px;
  -webkit-transform: scaleY(0.5);
  transform: scaleY(0.5);
  -webkit-transform-origin: 0 0;
  transform-origin: 0 0;
}

点透问题
在安卓某些版本触发两次点击问题。解决方案:引入fastclick处理点透问题
安卓部分版本input里的placeholder位置偏上。解决方案:把input的line-height设为normal
ios的body位置overflow:hidden后仍然可以滚动。解决方案:一般在所有元素最外层再包一大盒子.wrapper

 .wrapper{
   position:relative;
   overflow:hidden;
 }

ios滚动卡顿
解决方案:在滚动的容器上加上webkit-over-flow-scrolling:touch;
9. 请解释一下为什么需要清浮动?清浮动的方式
清浮动是为了清除使用浮动元素产生的影响。浮动的元素,高度会塌陷,而高度的塌陷使页面后面的布局不能正常显示

父级div定义height
在浮动元素后面添加class为clear的空div元素,给这个div设置样式.clear{clear:both}
给父容器添加overflow:hidden或者auto样式
给父容器添加clearfix的class,用伪类clearfix:after;来这个样式。清除浮动

.clearfix{
    zoom:1;
}
.clear:after{
    content:'.';
    height:0;
    clear:both;
    display:block;
    visibility:hidden;
}

10. margin和padding分别适合什么场景使用?

margin是用来隔开元素与元素的间距;padding是用来隔开元素与内容的间隔。margin是用来布局分开元素,使元素与元素互不相干;padding用于元素与内容之间的间隔,让内容与元素之间有一段间距

11.什么是伪类,什么是伪元素,他们的区别?
伪类的受体是文档树中已有的元素,而伪元素则创建了一个DOM外的元素
伪类用于添加元素的特殊效果,而伪元素则是添加元素的内容
伪类使用的一个冒号,为元素使用两个冒号
伪类更常用一些简单的动画或者交互的样式,例如滑入滑出,而为伪元素更常用语字体图标,清除浮动等
12. 什么是外边距合并
外边距合并指的是,当两个垂直外边距相遇时,他们将形成一个外边距。合并后的外边距的高度等于两个发生合并的外边距的高度中较大者

13. 实现水平垂直居中

示例:

<div class="md-warp">
    <span class="md-main"></span>
</div>
.md-warp{
    width: 400px;
    height: 300px;
    max-width: 100%;
    border: 1px solid #000;
}
.md-main{
    display: block;
    width: 100px;
    height: 100px;
    background: #f00;
}

水平居中

margin法

需要满足三个条件
元素定宽
元素为块级元素或行内元素设置display:block
元素的margin:left或者margin-right都必须设置auto
三个条件缺一不可

.md-main{
    margin: 0 auto
}

定位法

元素定宽
元素绝对定位,并设置left:50%;
+元素负做边距margin-left为宽度的一半

.md-wrap{
    position:relative;
}
.md-main{
    position:absolute;
    left:50%;
    margin-left:-50px
}

有些时候元素宽度不是固定的,依然可以使用定位法实现水平居中用到css3中的transform属性中的translate

.md-warp{
    position: relative;
}
// 注意此时md-main不设置width为100px
.md-main{
    position: absolute;
    left: 50%;
    -webkit-transform: translate(-50%,0);
    -ms-transform: translate(-50%,0);
    -o-transform: translate(-50%,0);
    transform: translate(-50%,0);
}

文字水平居中

直接使用text-align:center即可

垂直居中

定位法

和水平居中类似,只是把left:50%换成top:50%,副边距和transform属性进行对应更改即可

优点:能在各个浏览器下工作,结构简单明了,不需要增加额外的标签

 .md-warp{
    position: relative;
}
.md-main{
    position: absolute;
    /* 核心 */
    top: 50%;
    margin-top: -50px;
}

不确定高度的时候

.md-warp{
    position: relative;
}
.md-main{
    position: absolute;
    top: 50%;
    // 注意此时md-main不设置height为100px
    -webkit-transform: translate(0,-50%);
    -ms-transform: translate(0,-50%);
    -o-transform: translate(0,-50%);
    transform: translate(0,-50%);
}

单行文本垂直居中

需要满足两个条件:

元素内容是单行,并且其高度是固定不变的
将其line-height设置成height的值一样

div{
    width: 400px;
    height: 300px;
    border: 1px solid #000;
}
span{
    line-height: 300px;
}

视窗单位的解决办法

让元素在视窗中居中,使用vh实现

.md-warp{
    position: relative;
}
.md-main{
    position: absolute;
    margin: 50vh auto 0;
    transform: translateY(-50%);
}

Flexbox的解决方案

完成这项工作只需要两个样式,在需要水平垂直居中的父元素中设置display:flex和在水平存执居中的元素设置margin:auto

.md-wrap{
    display:flex
}
.md-main{
    display:auto
}

Flexbox的实现文本的水平垂直居中同样很简单

 .md-warp{
    display:flex;
}
.md-main{
    display: flex;
  align-items: center;
  justify-content: center;
    margin: auto;
}

绝对垂直居中

.md-wrap{
    position: relative;
}
.md-main{
    position:absolute;
    top:0'
    right:0
    bottom:0;
    left:0;
    margin:auto;
}

最好不要使用绝对定位,因为他对整体的布局影响相当的大。

<think>好的,我现在要帮用户整理前端开发CSS见的面试题。首先,我需要回忆一下自己学过的CSS知识,以及见的面试问题。可能用户正在准备面试,需要全面且有条理的内容。我需要分门别类,把问题组织得清晰易懂,方便用户复习。 首先,见的CSS试题包括盒模型、布局方式、选择器、优先级、响应式设计、Flexbox和Grid、BFC、居中方法、动画、预处理器等。我应该每个类别列举几个典型问题,并给出简要的解答,但用户可能需要太详细的解释,而是需要关键点提示,方便他们回忆或深入查找资料。 比如盒模型方面,可能会问标准盒模型和IE盒模型的区别。这需要解释content-box和border-box的区别。然后布局方面,传统布局、Flexbox和Grid的区别及应用场景。还有清除浮动的方法,这也是经典问题,可能需要提到clearfix技巧或者使用overflow属性。 选择器部分,见的有类选择器、ID选择器、属性选择器等,以及它们的优先级计算,比如内联样式、ID、类、元素选择器的权重。响应式设计可能会问媒体查询的使用,或者移动端适配的方案,比如viewport设置或者rem布局。 Flexbox和Grid是现在流行的布局方式,需要解释容器和项目的属性,比如justify-content、align-items,以及Grid的网格布局。BFC(块级格式化上下文)的问题通会问如何触发BFC以及它的作用,比如清除浮动、防止外边距重叠等。 居中问题,水平垂直居中的多种实现方式,比如Flexbox、绝对定位+transform、Grid等。动画方面,关键帧动画和过渡的区别,如何实现渐变效果。预处理器如Sass/Less的区别,变量、嵌套、混入等功能的用法。 另外,还有一些其他问题,比如CSS3新特性(阴影、渐变、过渡等),伪类和伪元素的区别,CSS优化方法(如减少重排重绘、压缩代码),CSS模块化的方案(如CSS Modules、BEM命名规范)等。 我需要确保每个问题都是面试中高频出现的,同时答案要准确,避免错误。比如在盒模型中,标准盒模型的宽度是content,而IE盒模型包括border和padding。在优先级计算时,内联样式权重大于ID选择器。BFC的触发方式包括overflow: hidden、float为none、display: inline-block等。 可能还需要注意一些容易混淆的概念,比如Flexbox的一维布局和Grid的二维布局区别,伪类(如:hover)和伪元素(如::before)的同用法。在响应式设计中,媒体查询的断点设置,以及移动端适配的rem和vw/vh单位的应用。 另外,用户可能想知道实际应用中的问题,比如如何解决样式冲突、CSS性能优化技巧、如何实现特定布局(圣杯布局、双飞翼布局)等。虽然这些可能部分属于布局问题,但可以作为扩展内容。 最后,我需要组织这些内容,分点列出问题和答案,结构清晰,便于用户快速浏览和记忆。可能需要使用标题和子标题来划分同的主题,但根据用户的要求,回答应使用中文,并且按照用户给出的系统级指令,数学公式需要用正确格式,但CSS问题中可能较少涉及数学公式,过如果有的话需要正确应用LaTeX。 检查是否有遗漏的重要主题,比如CSS Sprites雪碧图的作用(减少HTTP请求),CSS变量(自定义属性)的使用,以及现代CSS特性如CSS Houdini的概念。另外,可能会有关于CSS框架的问题,如Bootstrap的使用经验,但可能属于加分项而非基础。 总结下来,我需要整理大约10个左右的见主题,每个主题下列出1-2个典型问题,并给出简明扼要的答案要点。确保覆盖全面,重点突出,语言简洁准确,符合面试准备的需求。</think>以下是前端开发中见的CSS试题及核心知识点整理,按主题分类便于系统复习: --- ### 一、盒模型 **问题1:标准盒模型与IE盒模型区别?** - **标准盒模型** (`box-sizing: content-box`): `width/height` = 内容区域(content)的尺寸。 - **IE盒模型** (`box-sizing: border-box`): `width/height` = 内容 + 内边距(padding) + 边框(border)的总和。 --- ### 二、布局方式 **问题2:如何实现元素水平垂直居中?** - **Flexbox**: ```css .parent { display: flex; justify-content: center; align-items: center; } ``` - **绝对定位 + Transform**: ```css .child { position: absolute; left: 50%; top: 50%; transform: translate(-50%, -50%); } ``` --- ### 三、选择器与优先级 **问题3CSS选择器优先级规则?** 优先级由高到低: 1. `!important` 2. 内联样式(如`style="color: red;"`) 3. ID选择器(`#id`) 4. 类/伪类/属性选择器(`.class`, `:hover`, `[type="text"]`) 5. 元素/伪元素选择器(`div`, `::before`) 6. 通配符(`*`) --- ### 四、浮动与清除浮动 **问题4:如何清除浮动?** - **Clearfix Hack**: ```css .clearfix::after { content: ""; display: block; clear: both; } ``` - **父元素设置** `overflow: auto` 或 `overflow: hidden`。 --- ### 五、Flexbox与Grid **问题5:Flexbox与CSS Grid的区别?** - **Flexbox**: 一维布局(行或列),适合组件内元素排列。 - **Grid**: 二维布局(行+列),适合整体页面结构。 --- ### 六、BFC(块级格式化上下文) **问题6:BFC的作用及触发方式?** - **作用**: 隔离外部元素,避免外边距重叠、清除浮动。 - **触发方式**: `overflow: hidden`、`float: left/right`、`display: inline-block`、`position: absolute/fixed`。 --- ### 七、响应式设计 **问题7:如何实现移动端适配?** - **Viewport设置**: ```html <meta name="viewport" content="width=device-width, initial-scale=1"> ``` - **媒体查询(Media Queries)**: ```css @media (max-width: 768px) { ... } ``` - **REM布局**: 基于根元素字体大小(如`1rem = 16px`)动态调整。 --- ### 八、动画与过渡 **问题8:CSS动画与过渡的区别?** - **过渡(Transition)**: 属性变化时平滑过渡(如`:hover`触发)。 - **动画(Animation)**: 通过`@keyframes`定义复杂动画,可循环或延迟执行。 --- ### 九、预处理器 **问题9:Sass/Less的优点?** - 支持变量、嵌套、混入(Mixin)、函数等特性。 - 模块化开发,提升代码复用性。 --- ### 十、性能优化 **问题10:如何减少CSS重排(Reflow)?** - 避免频繁操作DOM样式。 - 使用`transform`和`opacity`实现动画(触发GPU加速)。 - 将复杂元素设置为`position: absolute/fixed`,脱离文档流。 --- ### 高频扩展问题 1. **伪类 vs 伪元素**: - 伪类(如`:hover`)表示元素状态。 - 伪元素(如`::before`)创建虚拟元素。 2. **CSS Sprites**: 合并小图标减少HTTP请求。 3. **CSS变量**: 使用`--var-name`定义,`var(--var-name)`调用。 --- 掌握以上内容可覆盖80%的CSS面试考点,建议结合实际代码练习加深理解!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值