10个关于css高频面试题(第二篇)

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


1. 写一个我们最熟悉的 border应用 [更多资料加V:2417268862(免费)]

之前写三角形, 都是直接记住代码,没有探究原因,我也是直到有一次面试时,面试大哥让我说说css创建三角形的原理,我就......回来就赶紧翻资料.接下来我就将当时我理解的过程列举出来:


.box{

        width:100px;

        height:100px;

        border:3px solid;

        border-color:#1b93fb #1bfb24 #efad48 #ef4848;

}


效果如下:


2. 接下来,我们将border值增大

.box{

        width:100px;

        height:100px;

        border:50px solid;

        border-color:#1b93fb #1bfb24 #efad48 #ef4848;

}

效果如下:

很容易发现, border渲染并不是正方形, 而是梯形的.


3. 在增大border的基础下, 此时我们将盒子宽高变成0,会产生什么效果呢!

.box{

        width:0px;

        height:0px;

        border:50px solid;

        border-color:#1b93fb #1bfb24 #efad48 #ef4848;

}

效果如下:


四个三角形拼合成的矩形呈现在我们眼前,那如如果我们只想要一个三角形, 我们是不是可以设想将其他三个设为不可见;


4. 设置透明, 隐藏其中三个三角形(时间紧迫,有些符号没加上,见谅)

.box{

        width:0px;

        height:0px;

        border:50px solid;

        border-color:transparent transparent transparent #ef4848;

}


三角形这样就出来, 有木有很简单, 当然我们也可以采用逆向思维来写这个效果, 就是先将所有边框设为透明, 然后需要哪边再对其设置颜色, 效果是一样的

.box{

        width:0px;

        height:0px;

        border:50px solid transparent;

        border-left:50px solid #ef4848;

}

这样给面试你的人讲,讲明白应该不是问题., 重点就是要理解border的应用



2. 实现三栏布局有哪些方法, 分别描述一下

三栏布局,顾名思义就是两边固定,中间自适应。三栏布局在开发十分常见,那么什么是三栏布局?即左右模块固定宽度,中间模块随浏览器变化自适应,想要完成的最终效果如下图所示:


下面列出四种实现方式, 在开发中可以根据实际需求选择适合自己的方法进行编码:

Flex 布局



.container{

          display:flex;

          justify-content: center;

          height:200px;

          background: #eee;

}

.left {

        width:200px;

        background-color: red;

        height:100%;

}

.main {

            background-color: yellow;

            flex:1;

}

.right {

               width:200px;

               background-color: green;

}

</style>

<div class=container>

<div class=left></div>

<div class=main></div>

<div class=right></div>

</div>

简单实用,现在比较流行的方案,但是需要考虑浏览器的兼容性。



绝对定位布局


<style>

.container {

          position: relative;

          background:#eee;

        height:200px;

}

.main {

        height:200px;

        margin:0120px;

        background-color: yellow;

}

.left {

          position: absolute;

            width:100px;

            height:200px;

            left:0;

            top:0;

          background-color: red;

}

.right {

          position: absolute;

        width:100px;

            height:200px;

          background-color: green;

        right:0;

        top:0;

}

</style>

<div class=container>

<div class=left></div>
<div class=main></div>
<div class=right></div>

</div>

这种方案也简单实用, 并且可以将 <div class="main"></div>元素放到第一位,使得主要内容优先加载!


双飞翼布局


<style>

.content {

          float: left;

        width:100%;

}

.main {

            height:200px;

            margin-left:110px;

            margin-right:220px;

          background-color: yellow;

}

.left {

              float: left;

             height:200px;

             width:100px;

             margin-left:-100%;

             background-color: red;

}

.right {

        width:200px;

        height:200px;

          float: right;

        margin-left:-200px;

          background-color: green;

}

</style>

<div class=container>

<div class=left></div>

<div class=main></div>

<div class=right></div>

</div>

圣杯布局

<style>

.container {

        margin-left:120px;

        margin-right:220px;

}

.main {

          float: left;

        width:100%;

        height:300px;

          background-color: yellow;

}

.left {

          float: left;

        width:100px;

        height:300px;

        margin-left:-100%;

          position: relative;

left:-120px;

      background-color: blue;

}

.right {

          float: left;

        width:200px;

        height:300px;

        margin-left:-200px;

          position: relative;

        right:-220px;

          background-color: green;

}

</style>

<div class=container>

<div class=left></div>

<div class=main></div>

<div class=right></div>

</div>

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

3. css3实现0.5px的细线

<style>

.line {

        position: relative;

}

.line:after {

        content:"";

        position: absolute;

        left:0;

        top:0;

        width:100%;

        height:1px;

        background-color: #000000;

        -webkit-transform: scaleY(.5);

        transform: scaleY(.5);

}

</style>

<div class=line></div>

4. 开发中为什么要初始化css样式

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

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

尽量将样式写在单独的css文件里面,在head元素中引用 将代码写成单独的css文件有几点好处:

1.     内容和样式分离,易于管理和维护

2.    减少页面体积

3.     css文件可以被缓存、重用,维护成本降低

不使用@import

避免使用复杂的选择器,层级越少越好 建议选择器的嵌套最好不要超过三层,比如:

精简页面的样式文件,去掉不用的样式

利用CSS继承减少代码量

避免!important,可以选择其他选择器

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容