css面试题

66 阅读5分钟

1.CSS3新特性

  • CSS3实现圆角(border-radius),阴影(box-shadow),
  • 对文字加特效(text-shadow、),线性渐变(gradient),旋转(transform)
  • transform:rotate(9deg) scale(0.85,0.90) translate(0px,-30px) skew(-9deg,0deg);// 旋转,缩放,定位,倾斜
  • 增加了更多的CSS选择器 多背景 rgba
  • 在CSS3中唯一引入的伪元素是 ::selection.
  • 媒体查询,多栏布局
  • border-image

2.设置元素浮动后,该元素的display值是多少?

自动变成 display:block;

absolutefloat都会隐式改变display;

3.清除浮动的方法

  • 直接给父盒子设置宽高
  • 设置overflow:hidden,触发BFC
  • 在父盒子底部添加一个空盒子,给空盒子设置clear:both
  • 使用伪元素,给它设置clear:both

4.实现居中

  • 子绝父相,给子盒子一个top、left都50%。已知宽高情况下,减去自身尺寸的一半。在不知宽高的情况下,使用transform的translate复位50%。
  • 使用flex。给父盒子justify-content:center;align-item:center
  • 子绝父相,margin设为0,边界值也设为0,将元素挤到中间
  • 使用tablecell

5.新增伪类

  • p:first-of-type 选择属于其父元素的首个 元素的每个 元素。
  • p:last-of-type 选择属于其父元素的最后 元素的每个 元素。
  • p:only-of-type 选择属于其父元素唯一的 元素的每个 元素。
  • p:only-child 选择属于其父元素的唯一子元素的每个 `` 元素。
  • p:nth-child(2) 选择属于其父元素的第二个子元素的每个 `` 元素。
  • :enabled、:disabled 控制表单控件的禁用状态。
  • :checked,单选框或复选框被选中。
  • :after 在元素之前添加内容,也可以用来做清除浮动。
  • :before 在元素之后添加内容
  • :enabled
  • :disabled 控制表单控件的禁用状态。
  • :checked 单选框或复选框被选中。

6.伪类和伪元素

  • 单冒号为伪类 类似类
  • 双冒号为伪元素 类似元素

7.三栏布局,中间自适应

1、绝对定位法

左右两栏采用绝对定位,分别固定于页面的左右两侧,

中间的主体栏用左右margin值撑开距离。于是实现了三栏自适应布局。

2、自身浮动法

此方法代码最简单。应用了标签浮动跟随的特性。左栏左浮动,右栏右浮动,主体直接放后面,就实现了自适应。

3、margin负值法

当元素使用margin-left移动到最左边界时,继续移动的话,元素就会去到上一层的有边界

1.双飞翼布局(最优)

这里面left直接给margin-left: -100%就能到想要的位置,为什么呢?因为要注意一点,在这里,left父级盒子是宽度100%的,

不再是圣杯布局里面的留出来左右padding值的父级自适应宽度的盒子,这里面使用content盒子的左右margin值留出来的定宽,

所以直接就能把left盒子定到想要的位置

那么同理,right盒子也是因为这样,所以直接margin-left: -200px正好贴到父级盒子最右边,就能到想要的位置了。

<div class="main">
    <div class="content-wrapper">
        <div class="content">content</div>   //双层结构,保证中间内容的优先显示
    </div>
    <aside class="left">left</aside>
    <aside class="right">right</aside>
</div>
<style>
    .left,
.right {
  float: left;
  height: 400px;
  line-height: 400px;
}

.content-wrapper {
  width: 100%;
  float: left;
}

.content {
  margin: 0 200px 0 150px;
  background-color: #f5c531;
  height: 400px;
  line-height: 400px;
}

.left {
  width: 150px;
  background-color: #a0c263;
  margin-left: -100%;
}

.right {
  background-color: #a0c263;
  width: 200px;
  margin-left: -200px;
}
</style>

2.圣杯布局

与双飞翼比,基本思路相似,但是缺少双层结构

3.BFC三栏

让左右两边浮动,中间使用overflow:hidden触发BFC模式,

形成独立渲染区域,不会被浮动元素覆盖

4.流体布局

左右模块各自向左右浮动,并设置中间模块的 margin 值使中间模块宽度自适应。

缺点就是主要内容无法最先加载,当页面内容较多时会影响用户体验。

8.响应式设计

面对不同分辨率设备灵活性强

能够快捷解决多设备显示适应问题

缺点:

兼容性比较差

  • Meta标签

可以使用meta标签的viewport属性来设置。下面的代码告诉浏览器使用设备屏幕宽度作为内容的宽度,并且忽视初始的宽度设置。这段代码写在head里面

<meta name="viewport" content="width=device-width, initial-scale=1.0">
  • media

通过监听屏幕实际尺寸,来达到不同的显示效果

@media screen and (max-width: 300px) {
    body {
        background-color:lightblue;
    }
}

9.CSS中的权重优先级

  • 内联—-1000
  • id—-100
  • 类—-10
  • 标签/伪类—-1
  • 通配符(*)—-0

优先级就近原则,同权重情况下样式定义最近者为准;

10.base64的优缺点

优点:

能够减小大图片的尺寸,同时还能够减少HTTP请求数量;HTTP请求是非常耗费服务器资源的;

缺点:

如果图片比较小,那么base64编码后的字符串会比图片本身还大

11.inline-block边距问题,有4px的边距,怎么解决?

主要是会多一个空格位置

去掉标签之间的空格;或者用注释也可以

font-size来解决、父级添加font-size:0;然后本身再把font-size恢复下即可;

12.两种盒子模型

  • 标准盒模型

​ 在标准的盒子模型中,width指content部分的宽度

  • IE盒模型

    在IE盒子模型中,width表示content+padding+border这三个部分的宽度

13.BFC

块格式化上下文, BFC 的元素可以看作是隔离了的独立容器,容器里面的元素不会在布局上影响到外面的元素

触发

  • 1、浮动元素,float 除 none 以外的值
  • 2、绝对定位元素,position(absolute,fixed)
  • 3、display 为以下其中之一的值 inline-blocks,table-cells,table-captions
  • 4、overflow 除了 visible 以外的值(hidden,auto,scroll)

用处

  • 可以阻止边距折叠
  • 可以包含内部元素的浮动
  • 可以阻止元素被浮动覆盖