css使两个盒子并列_CSS常见面试题

65e48f1aeca48fe35c74ce579baf598a.gif 阅读本文约需要9分钟

大家好,我是你们的导师,经常看我朋友圈的同学应该知道,我每天会在微信上给大家免费提供以下服务!

1、长期为你提供最优质的学习资源!

2、给你解决技术问题!

3、每天在朋友圈里分享优质的技术文章!

4、每周1、3、5送纸质书籍免费送给大家,每年至少送书800本书!

5、为大家推荐靠谱的就业单位!

请注意!我上面说的5点全部都是免费的!全网你应该找不到第二家吧!

当然,大家在我私人微信上问我问题,仅限回答web前端、java相关的。

---------------------------

好了,接下来开始今天的技术分享!上次老师跟大家分享了Vue 之响应式系统的知识,今天跟大家分享下CSS常见面试题的知识。 

1 CSS常见面试题 1 介绍一下标准的CSS的盒子模型?与低版本IE的盒子模型有什么不同的? 标准盒子模型:宽度=内容的宽度(content)+ border + padding + margin 低版本IE盒子模型:宽度=内容宽度(content+border+padding)+ margin 2 box-sizing属性? 用来控制元素的盒子模型的解析模式,默认为content-box context-box:W3C的标准盒子模型,设置元素的 height/width 属性指的是content部分的高/宽 border-box:IE传统盒子模型。设置元素的height/width属性指的是border + padding + content部分的高/宽 3 CSS选择器有哪些?哪些属性可以继承? CSS选择符:id选择器(#myid)、类选择器(.myclassname)、标签选择器(div, h1, p)、相邻选择器(h1 + p)、子选择器(ul > li)、后代选择器(li a)、通配符选择器(*)、属性选择器(a[rel=”external”])、伪类选择器(a:hover, li:nth-child) 可继承的属性:font-size, font-family, color 不可继承的样式:border, padding, margin, width, height 优先级(就近原则):!important > [ id > class > tag ] !important 比内联优先级高 4 CSS优先级算法如何计算? 元素选择符:1 class选择符:10 id选择符:100 元素标签:1000 !important声明的样式优先级最高,如果冲突再进行计算。 如果优先级相同,则选择最后出现的样式。 继承得到的样式的优先级最低。 5 CSS3新增伪类有那些? p:f irst-of-type 选择属于其父元素的首个元素 p:last-of-type 选择属于其父元素的最后元素 p:only-of-type 选择属于其父元素唯一的元素 p:only-child 选择属于其父元素的唯一子元素 p:nth-child(2) 选择属于其父元素的第二个子元素 :enabled :disabled 表单控件的禁用状态。 :checked 单选框或复选框被选中。 6 如何居中div?如何居中一个浮动元素?如何让绝对定位的div居中? div:
border: 1px solid red;margin: 0 auto; height: 50px;width: 80px;
浮动元素的上下左右居中:
border: 1px solid red;float: left;position: absolute;width: 200px;height: 100px;left: 50%;top: 50%;margin: -50px 0 0 -100px;
绝对定位的左右居中:
border: 1px solid black;position: absolute;width: 200px;height: 100px;margin: 0 auto;left: 0;right: 0;
有更加优雅的居中方式就是用flexbox,我以后会做整理。 7 display有哪些值?说明他们的作用?
inline(默认)–内联none–隐藏block–块显示table–表格显示list-item–项目列表inline-block
8 position的值?
static(默认):按照正常文档流进行排列;relative(相对定位):不脱离文档流,参考自身静态位置通过 top, bottom, left, right 定位;absolute(绝对定位):参考距其最近一个不为static的父级元素通过top, bottom, left, right 定位;fixed(固定定位):所固定的参照对像是可视窗口。
9 CSS3有哪些新特性?
RGBA和透明度background-image background-origin(content-box/padding-box/border-box) background-size background-repeatword-wrap(对长的不可分割单词换行)word-wrap:break-word文字阴影:text-shadow:5px 5px 5px #FF0000;(水平阴影,垂直阴影,模糊距离,阴影颜色)font-face属性:定义自己的字体圆角(边框半径):border-radius 属性用于创建圆角边框图片:border-image: url(border.png) 30 30 round盒阴影:box-shadow: 10px 10px 5px #888888媒体查询:定义两套css,当浏览器的尺寸变化时会采用不同的属性
10 请解释一下CSS3的flexbox(弹性盒布局模型),以及适用场景? 该布局模型的目的是提供一种更加高效的方式来对容器中的条目进行布局、对齐和分配空间。在传统的布局方式中,block 布局是把块在垂直方向从上到下依次排列的;而 inline 布局则是在水平方向来排列。弹性盒布局并没有这样内在的方向限制,可以由开发人员自由操作。 试用场景:弹性布局适合于移动前端开发,在Android和ios上也完美支持。 11.什么是 BFC机制 BFC(Block Formatting Context),块级格式化上下文,是一个独立的渲染区域,让处于 BFC 内部的元素与外部的元素相互隔离,使内外元素的定位不会相互影响。
触发条件 (以下任意一条)float的值不为noneoverflow的值不为visibledisplay的值为table-cell、tabble-caption和inline-block之一position的值不为static或则releative中的任何一个
在IE下, Layout,可通过zoom:1 触发 BFC布局与普通文档流布局区别:

BFC布局规则:

浮动的元素会被父级计算高度(父级元素触发了BFC)非浮动元素不会覆盖浮动元素的位置(非浮动元素触发了BFC)margin不会传递给父级(父级触发BFC)属于同一个BFC的两个相邻元素上下margin会重叠普通文档流布局: 浮动的元素是不会被父级计算高度非浮动元素会覆盖浮动元素的位置margin会传递给父级元素两个相邻元素上下的margin会重叠

开发中的应用

阻止margin重叠可以包含浮动元素 —— 清除内部浮动(清除浮动的原理是两个 div都位于同一个 BFC 区域之中)自适应两栏布局可以阻止元素被浮动元素覆盖
12. CSS3中新增的选择器以及属性 这里只是列出来, 具体的使用,请查看我的关于css3新增选择器与属性文章

3dba177450ecf6e707f175f20067b2ae.png

5b9953a3efb0b68a61ea534092a84a30.png

6aa7266b54a8861a12baf117e9ff48af.png

bdd524734092193577c4156d7a3ad6fc.png

13. 居中布局 水平居中
  1. 行内元素: text-align:center

  2. 块级元素: margin:0 auto

  3. 绝对定位和移动: absolute + transform

  4. 绝对定位和负边距: absolute + margin

  5. flex布局: flex + justify-content:center

垂直居中
  1. 子元素为单行文本: line-height:height

  2. absolute + transform

  3. flex + align-items:center

  4. table: display:table-cell; vertical-align: middle

  5. 利用position和top和负margin

水平垂直居中

6110fe801852b3a61b6f919c263d7f3d.png

1. 已知元素宽高:绝对定位+margin:auto:
  div{      width: 200px;      height: 200px;      background: green;      position:absolute;      left:0;      top: 0;      bottom: 0;      right: 0;      margin: auto;  }
2. 已知元素宽高:  绝对定位+负margin
  div{      width: 200px;      height: 200px;      background: green;      position:absolute;      left:0;      top: 0;      bottom: 0;      right: 0;      margin: auto;  }
3. absolute+transform
  div{     width: 200px;     height: 200px;     background: green;     position:absolute;     left:50%;    /* 定位父级的50% */     top:50%;     transform: translate(-50%,-50%); /*自己的50% */   }
4.flex + justify-content + align-items
.box{   height:600px;   display:flex;   justify-content:center;  //子元素水平居中   align-items:center;      //子元素垂直居中     /* aa只要三句话就可以实现不定宽高水平垂直居中。*/    }  .box>div{    background: green;    width: 200px;    height: 200px;  }
14. 清除浮动有哪些方法, 各有什么优缺点 使用clear属性的空元素 在浮动元素后使用一个空元素如
或来进行清理。 优点: 简单, 写少量代码, 兼容性也好 缺点: 添加无语义html元素, 不利于代码语义化, 后期维护成本大 使用css的overflow属性 给浮动元素的容器添加overflow:hidden;或overflow:auto;可以清除浮动,另外在 IE6 中还需要触发 hasLayout ,例如为父元素设置容器宽高或设置zoom:1。在添加overflow属性后,浮动元素又回到了容器层,把容器高度撑起,达到了清理浮动的效果。 优点: 简单, 代码少, 浏览器支持好 缺点: 不能和position配合使用, 因为超出的尺寸会被隐藏overflow:hidden 使用CSS的:after伪元素 结合 :after 伪元素(注意这不是伪类,而是伪元素,代表一个元素之后最近的元素)和 IEhack ,可以完美兼容当前主流的各大浏览器,这里的 IEhack 指的是触发 hasLayout。给浮动元素的容器添加一个 clearfix的class,然后给这个class添加一个:after伪元素实现元素末尾添加一个看不见的块元素(Block element)清理浮动。通过CSS伪元素在容器的内部元素最后添加了一个看不见的空格"020"或点".",并且赋予clear属性来清除浮动。需要注意的是为了IE6和IE7浏览器,要给clearfix这个class添加一条zoom:1;触发haslayout。 优点: 浏览器支持好,不容易出现怪问题(目前:大型网站都有使用,如:腾迅,网易,新浪等等) 缺点: 代码多,要两句代码结合使用,才能让主流浏览器都支持 给父级元素设置高度 简单, 代码少,好掌握 缺点: 只适用于高度固定的布局 15. 用纯CSS创建一个三角形的原理是什么 之前写三角形, 都是直接记住代码,没有探究原因,我也是直到有一次面试时,面试大哥让我说说css创建三角形的原理,我就......回来就赶紧翻资料.接下来我就将当时我理解的过程列举出来: 1. 写一个我们最熟悉的 border应用
.box{  width:100px;  height:100px;  border: 3px solid;  border-color:#1b93fb #1bfb24 #efad48 #ef4848;}
效果如下:

0b599d5b361293ef661caeb4f35090d3.png

2. 接下来,我们将border值增大
.box{  width:100px;  height:100px;  border: 50px solid;  border-color:#1b93fb #1bfb24 #efad48 #ef4848;}

3bac378db04236fd06c4ea4c5730601e.png

很容易发现, border渲染并不是正方形, 而是梯形的. 3. 在增大border的基础下, 此时我们将盒子宽高变成0,会产生什么效果呢!
.box{  width:0px;  height:0px;  border: 50px solid;  border-color:#1b93fb #1bfb24 #efad48 #ef4848;}

ad761c656e4ccfbfc6227f0f95d0870c.png

四个三角形拼合成的矩形呈现在我们眼前,那如如果我们只想要一个三角形, 我们是不是可以设想将其他三个设为不可见; 4. 设置透明, 隐藏其中三个三角形
 .box{  width:0px;  height:0px;  border: 50px solid;  border-color:transparent transparent transparent #ef4848;}

98fed4ab9121fe3e813f3a6ffeee997f.png

三角形这样就出来, 有木有很简单, 当然我们也可以采用逆向思维来写这个效果, 就是先将所有边框设为透明, 然后需要哪边再对其设置颜色, 效果是一样的
.box{  width:0px;  height:0px;  border: 50px solid transparent;  border-left:50px solid #ef4848;}
这样给面试你的人讲,讲明白应该不是问题., 重点就是要理解border的应用 16. 实现三栏布局有哪些方法, 分别描述一下 三栏布局,顾名思义就是两边固定,中间自适应。三栏布局在开发十分常见,那么什么是三栏布局?即左右模块固定宽度,中间模块随浏览器变化自适应,想要完成的最终效果如下图所示:

9cb3155b843dc4ad5af157b9325b1199.png

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