CSS中常考面试题2

1、盒子水平垂直居中方法(常见)

参考答案

四种方式:

利用绝对定位,先将元素的左上角通过top:50%和left:50%定位到页面的中心,然后再通过translate来调整元素的中心点到页面的中心。

.div {
    position: absolute;
    width: 200px;
    height: 200px;
    background: salmon;
    left: 50%;
    top: 50%;
    transform: translate(-50%, -50%);
}

利用绝对定位,设置四个方向的值都为0,并将margin设置为auto,由于宽高固定,因此对应方向实现平分,可以实现水平和垂直方向上的居中。该方法适用于盒子有宽高的情况。

.div {
    position: absolute;
    width: 200px;
    height: 200px;
    left: 0;
    right: 0;
    top: 0;
    bottom: 0;
    margin: auto;
}

利用绝对定位,先将元素的左上角通过top:50%和left:50%定位到页面的中心,然后再通过margin负值来调整元素的中心点到页面的中心。该方法适用于盒子宽高已知的情况。

.div {
    position: absolute;
    width: 200px;
    height: 200px;
    left: 50%;
    top: 50%;
    margin-left: calc(-200px / 2);
    margin-top: calc(-200px / 2);
}

使用flex布局,通过align-items:center和justify-content:center设置容器的垂直和水平方向上为居中对齐,然后它的子元素也可以实现垂直和水平的居中。

.div {
    width: 100%;
    height: 100%;
    display: flex;
    justify-content: center;
    align-items: center;
}


2. 圣杯布局、双飞翼

参考答案

区别:圣杯布局给中间div分别设置左右内边距后,将左右两个div进行定位并设置right和left属性,以便不遮挡中间div;双飞翼布局直接在中间div内部创建子div用于放置内容,在该子div里分别设置左右外边距为左右两栏div留出位置。

圣杯布局:左右两边固定,中间自适应的布局方式,效果图如下:

image.png

作用:

圣杯布局和双飞翼布局解决的问题是相同的,就是两边顶宽,中间自适应的三栏布局,中间栏要在放在文档流前面以优先渲染。

区别:

圣杯布局和双飞翼布局解决问题的方案在前一半是相同的,也就是三栏全部float浮动,但左右两栏加上负margin让其跟中间栏div并排,以形成三栏布局。

不同在于解决”中间栏div内容不被遮挡“问题的思路不一样:

1、圣杯布局,为了中间div内容不被遮挡,将中间div设置了左右padding-left和padding-right后,将左右两个div用相对布局position: relative并分别配合right和left属性,以便左右两栏div移动后不遮挡中间div。

2、双飞翼布局,为了中间div内容不被遮挡,直接在中间div内部创建子div用于放置内容,在该子div里用margin-left和margin-right为左右两栏div留出位置。


圣杯布局代码:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title>圣杯布局</title>
    <style>
        #bd {
            padding: 0 200px 0 180px;
            height: 100px;
        }
        #middle {
            float: left;
            width: 100%;
            height: 500px;
            background: blue;
        }
        #left {
            float: left;
            width: 180px;
            height: 500px;
            margin-left: -100%;
            background: #0c9;
            position: relative;
            left: -180px;
        }
        #right {
            float: left;
            width: 200px;
            height: 500px;
            margin-left: -200px;
            background: #0c9;
            position: relative;
            left: 200px;
        }
    </style>
</head>
<body>
<div id="bd">
        <div id="middle">middle</div>
        <div id="left">left</div>
        <div id="right">right</div>
    </div>
</body>
</html>

双飞翼布局

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>双飞翼布局</title>
    <style>
        .out,.left,.right{
            float: left;
            height: 200px;
        }
        .out{
            width: 100%;
            background-color: #eee;
        }   
        .main {
            background-color: pink;
            margin: 0 200px;
            height: 200px;
        }
        .left {
            width: 200px;
            background-color: skyblue;
            margin-left: -100%;
        }
        .right {
            width: 200px;
            background-color: skyblue;
            margin-left: -200px;
        }
    </style>
</head>
<body>
    <div>
        <div>main</div>
    </div>
    <div>left</div>
    <div>right</div>
</body>
</html>

后我们来总结一下,双飞翼布局其实和圣杯布局的精髓是一样的,都是通过设置负margin来实现元素的排布。


不同的就是html结构,双飞翼是在middle元素内部又设置了一个milddle-inner并设置它的左右margin,而非圣杯布局的padding,来排除两边元素的覆盖。

双飞翼布局可以多了一个html结构,但是可以不用设置left,right元素的定位。


3. 请列举几种隐藏元素的方法

参考答案

visibility: hidden;这个属性只是简单的隐藏某个元素,但是元素占用的空间仍然存在

opacity: 0; CSS3属性,设置0可以使一个元素完全透明,但不会改变页面布局,并且,如果该元素已经绑定一些事件,如click事件,那么点击该区域,也能触发点击事件的

display: none;元素会变得不可见,并且不会再占用元素位置。会改变页面布局。

transform: scale(0);将一个元素设置为缩放无限小,元素将不可见,元素原来所在的位置将被保留。


4. 回流和重绘 (常见)

回流:当DOM的变化影响了元素的几何信息(DOM对象的位置和尺寸大小),浏览器需要重新计算元素的几何属性,将其安放在界面中的正确位置,这个过程叫做回流(重排)

重绘:当一个元素的外观发生改变,但没有改变布局,重新把元素外观绘制出来的过程,叫做重绘

触发:改变元素的color、background、box-shadow等属性


5. 浏览器渲染机制

参考答案

网页的生成过程,大致可以分成五步

HTML 代码转化成 DOM

CSS 代码转化成 CSSOM(CSS Object Model)

结合 DOM 和 CSSOM,生成一棵渲染树(包含每个节点的视觉信息)

生成布局(layout),即将所有渲染树的所有节点进行平面合成

将布局绘制(paint)在屏幕上

这五步里面,第一步到第三步都非常快,耗时的是第四步和第五步。

"生成布局"(flow)和"绘制"(paint)这两步,合称为"渲染"(render)

如下图:


6. html5有什么新特性?语义化有什么优点?

参考答案

html5新特性:

音频video 视频 audio、画布canvas、H5存储localStorage sessionStorage

语义化标签 : header nav main article section aside footer

语义化意味着顾名思义,HTML5的语义化指的是合理正确的使用语义化的标签来创建页面结构 如 header,footer,nav,从标签上即可以直观的知道这个标签的作用,而不是滥用div。


语义化的优点有:

代码结构清晰,易于阅读,利于开发和维护

方便其他设备解析(如屏幕阅读器)根据语义渲染网页。

有利于搜索引擎优化(SEO)


7. 什么是css盒子模型?

参考答案

CSS 盒模型本质上是一个盒子,盒子包裹着HTML 元素,盒子由四个属性组成,从内到外分别是:content 内容、padding 内填充、border 边框、外边距 margin


两种盒模型的区别

标准盒模型:

width = content-width

height = content-height


怪异盒模型:

width = content-width + padding-width + border-width

height = content-height + padding-height + border-height


如何在CSS 设置这两个模型

标准盒模型:

box-sizing: content-box

怪异盒模型:

box-sizing: border-box


8.请描述一下 cookies、sessionStorage和localstorage区别(常见)

参考答案

相同点:都存储在客户端

不同点:

1.存储大小

· cookie数据大小不能超过4k。

· sessionStorage和localStorage 虽然也有存储大小的限制,但比cookie大得多,可以达到5M或更大。


2.有效时间

· localStorage    存储持久数据,浏览器关闭后数据不丢失除非主动删除数据;

· sessionStorage  数据在当前浏览器窗口关闭后自动删除。

· cookie          设置的cookie过期时间之前一直有效,即使窗口或浏览器关闭


3. 数据与服务器之间的交互方式

· cookie的数据会自动的传递到服务器,服务器端也可以写cookie到客户端

· sessionStorage和localStorage不会自动把数据发给服务器,仅在本地保存。


9. CSS中标签的优先级是怎么样的?

参考答案

!important > 内联 > ID 选择器 > 类选择器 > 标签选择器。


每个选择器都有权值,权值越大越优先

继承的样式优先级低于自身指定样式

权值相同时,靠近元素的样式优先级高 顺序为内联样式表(标签内部)> 内部样式表(当前文件中)> 外部样式表(外部文件中)


10.  BFC是什么?

参考答案

总结:BFC就是块级格式化上下文,让元素成为一个独立的空间 不受外界影响也不影响外面布局

BFC概念 也叫【块级格式化上下文】,简单来说,BFC 是一个完全独立的空间(布局环境),让空间里的子元素不会影响到外面的布局。

BFC是CSS布局的一个概念,是一个环境,里面的元素不会影响外面的元素。


BFC的布局规则

内部的Box会在垂直方向,一个接一个地放置。

Box垂直方向的距离由margin决定。属于同一个BFC的两个相邻Box的margin会发生重叠。

每个盒子(块盒与行盒)的margin box的左边,与包含块border box的左边相接触(对于从左往右的格式化,否则相反)。即使存在浮动也是如此。

BFC的区域不会与float box重叠。

BFC就是页面上的一个隔离的独立容器,容器里面的子元素不会影响到外面的元素。反之也如此。

计算BFC的高度时,浮动元素也参与计算


11、如何创建BFC?

参考答案

1、float的值不是none。

2、position的值不是static或者relative。

3、display的值是inline-block、table-cell、flex、table-caption或者inline-flex

4、overflow的值不是visible


12、BFC有什么作用 (解决了什么问题)?

参考答案

阻止margin重叠

可以包含浮动元素 —— 清除内部浮动

自适应两栏布局

可以阻止元素被浮动元素覆盖


11. CSS3的新特性 (或者问介绍一下css3)

参考答案

简单概括如下表:

image.png


留言

发布留言

需要购买本课才能留言哦~

{{ item.createtime | dateStr }}