对于面试咱们常常会要经历三面、四面或者更多,那这些面试都问啥呢?咱们在面试前是否能够准备些什么?css
ps:固然咱们在面试前呢,我须要最好是针对JD描述分析(不论是内推仍是招聘网站,咱们最好先看看公司的JD,即岗位职责和任职职责分析如,技术栈需求、业务需求)作到有的放矢(准备相应的技术栈、相应业务知识了解),在到简历中体现(毕竟面试官对咱们是不了解的,他们是针对咱们的简历和咱们在面试过程当中沟通在问咱们问题,这里咱们能够引导面试官问一些咱们准备好的一些技术问题了)html
咱们要传达面试官的能力素质和个性品质:前端
一、技术能力达标,可以完成团队的平常工做vue
(即便当咱们的技术跟公司的技术栈不匹配时,好比公司使用技术栈react,而咱们只会vue,那就没戏了吗?首先你要诚实回答,并谦虚的表达你的从新学习能力的心态,甚至能够适当的请教面试官一些问题,这都是面试官乐见的)html5
二、让人愿意与之相处react
(咱们在回答的问题时,要简洁,毕竟每个面试都是时间有限;体现本身的团队协做能力;当以为面试官问你的问题很简单的时候,也不要太自满,以为面试官不如你,挑衅什么的)css3
三、会在公司呆好久git
必定要重视基础和原理,要事先准备,要从自身的实际经历出发github
假设高度已知,请写出三栏布局,其中左栏、右栏宽度各位300px,中间自适应面试
在看正式答案以前,但愿你们能够先思考下这个问题的答案。你可否答出来,且可否在笔试中手写出来,写出来你能够写几种答案?具体答案看正式部分哦~
其实关于这个问题,网上已经有不少的答案,可是面试官仍是会常常会问这个问题?
、、、、、、、、、、、、、、、
一、对前端css基础的掌握
二、有没有对新知识了解
三、有没有深刻挖掘问题的能力、沟通理解能力
、、、、、、、、、、、、、、
这里说的五种答案(浮动布局、绝对布局、flexbox、表格布局、网格布局),并非说只有五种答案,好比咱们也可使用 calc计算函数来解决 ,且随着技术发展也可能还有其余的答案。只是目前这五种比较具备表明性。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>三栏布局</title>
<style> html * { padding: 0; margin: 0; } .layout { margin-top: 20px; } .layout article div { height: 100px; } .layout .left,.layout .right{ width:300px; } .layout .left{ background:red; } .layout .center{ background: green; } .layout .right{ background: yellow; } </style>
</head>
<body>
<!-- 浮动布局解决方案 开始-->
<section class="layout float">
<style> .layout.float .left{ float:left; } .layout.float .right{ float:right; } </style>
<article class="left-center-right">
<div class="left">左边部分</div>
<div class="right">右边部分</div>
<div class="center">中间部分</div>
</article>
</section>
<!-- 浮动布局解决方案 结束-->
</body>
</html>
复制代码
ps:注意:
<div class="left">左边部分</div>
<div class="right">右边部分</div>
<div class="center">中间部分</div>
复制代码
class为center的布局在最后;
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>三栏布局</title>
<style> html * { padding: 0; margin: 0; } .layout { margin-top: 20px; } .layout article div { height: 100px; } .layout .left,.layout .right{ width:300px; } .layout .left{ background:red; } .layout .center{ background: green; } .layout .right{ background: yellow; } </style>
</head>
<body>
<!-- 绝对定位解决方案 开始-->
<section class="layout absolute">
<style> .layout.absolute .left-center-right>div { position: absolute; } .layout.absolute .left { left: 0; } .layout.absolute .center { left: 300px; right:300px; } .layout.absolute .right { right: 0; } </style>
<article class="left-center-right">
<div class="left">左边部分</div>
<div class="center">中间部分</div>
<div class="right">右边部分</div>
</article>
</section>
<!-- 绝对定位局部解决方案 结束-->
</body>
</html>
复制代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>三栏布局</title>
<style> html * { padding: 0; margin: 0; } .layout { margin-top: 20px; } .layout article div { height: 100px; } .layout .left,.layout .right{ width:300px; } .layout .left{ background:red; } .layout .center{ background: green; } .layout .right{ background: yellow; } </style>
</head>
<body>
<!-- flexbox解决方案 开始-->
<section class="layout flexbox">
<style> .layout.flexbox .left-center-right { display: flex; } .layout.flexbox .center { flex: 1 } </style>
<article class="left-center-right">
<div class="left">左边部分</div>
<div class="center">中间部分</div>
<div class="right">右边部分</div>
</article>
</section>
<!-- flexbox解决方案 结束-->
</body>
</html>
复制代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>三栏布局</title>
<style> html * { padding: 0; margin: 0; } .layout { margin-top: 20px; } .layout article div { height: 100px; } .layout .left,.layout .right{ width:300px; } .layout .left{ background:red; } .layout .center{ background: green; } .layout .right{ background: yellow; } </style>
</head>
<body>
<!-- 表格布局解决方案 开始-->
<section class="layout table">
<style> .layout.table .left-center-right { display: table; width:100% } .layout.table .left-center-right>div { display: table-cell; } </style>
<article class="left-center-right">
<div class="left">左边部分</div>
<div class="center">中间部分</div>
<div class="right">右边部分</div>
</article>
</section>
<!-- 表格布局解决方案 结束-->
</body>
</html>
复制代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>三栏布局</title>
<style> html * { padding: 0; margin: 0; } .layout { margin-top: 20px; } .layout article div { height: 100px; } .layout .left,.layout .right{ width:300px; } .layout .left{ background:red; } .layout .center{ background: green; } .layout .right{ background: yellow; } </style>
</head>
<body>
<!-- 网格布局解决方案 开始-->
<section class="layout grid">
<style> .layout.grid .left-center-right { display: grid; width: 100%; grid-template-columns: 300px auto 300px; } </style>
<article class="left-center-right">
<div class="left">左边部分</div>
<div class="center">中间部分</div>
<div class="right">右边部分</div>
</article>
</section>
<!-- 网格布局解决方案 结束-->
</body>
</html>
复制代码
优势 | 缺点 | |
---|---|---|
浮动布局 | 比较简单,兼容性好 | 浮动元素脱离文档流,要作清除浮动,这个处理很差的话,会带来不少问题,好比父容器高度塌陷等 |
绝对定位布局 | 快捷,设置很方便,并且也不容易出问题 | 容器脱离了文档流,后代元素也脱离了文档流,高度未知的时候,会有问题,这就致使了这种方法的有效性和可以使用性是比较差的。 |
flexbox | css3里新出的一个,它就是为了解决上述两种方式的不足出现的,是比较完美的一个。目前移动端的布局也都是用flexbox. | IE10开始支持,可是IE10的是-ms 形式的 |
表格布局 | 兼容性很好,在flex布局不兼容的时候,能够尝试表格布局。当内容溢出时会自动撑开父元素。 | 没法设置栏边距;对seo不友好;当其中一个单元格高度超出的时候,两侧的单元格也是会跟着一块儿变高的,然而有时候这并非咱们想要的效果。 |
网格布局 | CSS新标准,建立网格布局最强大和最简单的工具,能够将页面分红具备简单属性的行和列 | 兼容性很差。IE10+上支持,并且也仅支持部分属性 |
一、浮动布局
二、绝对定位布局
三、flexbox
四、表格布局
五、网格布局
从上边五种布局的页面效果能够看出,浮动和绝对定位布局须要考虑高度的设定。表格、flexbox、网格没有设置高度时,根据内容高度呈现,且三栏高度统一 。
没有一种一劳永逸的方法解决三列布局的问题,咱们经过上边的五种答案的优缺点就能够看出。经过分析五种布局各自的优缺点,了解这些优缺点及适用场景,从而在不一样的应用场景中选择相应的布局方式。
好比你的项目时h5的,也须要适用移动端那明显flexbox就比较适用。
flex布局是比较适合一维布局, Grid 布局则是将容器划分红"行"和"列",产生单元格,而后指定"项目所在"的单元格,能够看做是二维布局。Grid 布局远比 Flex 布局强大。 可是须要考虑到grid的兼容性。
在前面小编有说过使用css3的calc函数也能够解决这三栏布局的问题,具体以下:
<!-- calc解决方案 开始-->
<section class="layout calc">
<style> .layout.calc .left-center-right { width: 100%; } .layout.calc .left-center-right>div{ float:left; } .layout.calc .center { width: calc(100% - 600px); } </style>
<article class="left-center-right">
<div class="left">左边部分</div>
<div class="center">中间部分</div>
<div class="right">右边部分</div>
</article>
</section>
<!-- calc解决方案 结束-->
复制代码
使用用法:calc(表达式)
calc() 的使用注意点: 运算符先后都须要保留一个空格,例如:width: calc(100% - 400px); 任何长度值均可以使用calc()函数进行计算; calc()函数支持 "+", "-", "*", "/" 运算; calc()函数使用标准的数学运算优先级规则;
兼容性:
具体代码可查看:github.com/lixiaoyanle…
1)是否使用html5语义化:section、artcle等熟练使用; 2)页面布局理解深入; 3)css基础知识; 4)代码书写规范、(类名的命名) 5)是否了解新知识
圣杯布局和双飞翼布局解决的问题是相同的,就是两边顶宽,中间自适应的三栏布局,中间栏要在放在文档流前面以优先渲染。
圣杯布局:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>圣杯模型</title>
<style> html * { padding: 0; margin: 0; } #bd{ padding:0 200px; } #bd>div{ float:left; height:100px; position: relative; } #center{ background: green; width:100%; } #left{ background:red; width: 200px; margin-left:-100%; right:200px; } #right{ background:yellow; width: 200px; margin-right:-200px; } </style>
</head>
<body>
<section>
<article id="bd">
<div id="center">中间部分</div>
<div id="left">左侧部分</div>
<div id="right">右侧部分</div>
</article>
</section>
</body>
</html>
复制代码
双飞翼布局:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>双飞翼布局</title>
<style> html * { padding: 0; margin: 0; } #bd>div { float: left; height: 100px; } #center { width: 100%; } /*给inside的div添加margin,把内容放到中间栏,其实整个背景仍是100%*/ #inside{ background: green; margin:0 200px; height: 100px; } #left { background: red; width: 200px; margin-left: -100%; } #right { background: yellow; width: 200px; margin-left: -200px; } </style>
</head>
<body>
<section>
<article id="bd">
<div id="center">
<div id="inside">中间部分</div>
</div>
<div id="left">左侧部分</div>
<div id="right">右侧部分</div>
</article>
</section>
</body>
</html>
复制代码
圣杯布局、双飞翼布局相同和不一样点:
相同点 | 不一样点 | |
---|---|---|
圣杯布局 | 一、解决的问题是同样的,就是两边顶宽,中间自适应的三栏布局,中间栏要在放在文档流前面以优先渲染;二、三栏所有float浮动,左右两栏加上负margin让其跟中间栏div并排,以造成三栏布局 | 为了中间div内容不被遮挡,将三栏布局的父级设置了左右padding-left和padding-right后,将左右两个div用相对布局position: relative并分别配合right和left属性,以便左右两栏div移动后不遮挡中间div |
双飞翼布局 | 同上 | 为了中间div内容不被遮挡,直接在中间div内部建立子div用于放置内容,在该子div里用margin-left和margin-right为左右两栏div留出位置。 |
圣杯布局、双飞翼布局优缺点:
优势 | 缺点 | |
---|---|---|
圣杯布局 | 结构简单,不须要添加多余dom节点 | 若是将浏览器无线放大时,「圣杯」将会「破碎」掉。如:当中间部分的宽小于左侧部分时就会发生布局混乱。 |
双飞翼布局 | 不会像圣杯布局那样变形、通用性强 | 多加了一层dom节点 |
圣杯布局与双飞翼布局的优势:利用布局,可优先渲染主要部分