CSS每每是咱们前端开发者不太看重的一环,并且如今重构岗也愈来愈少,不像前几年前端领域还分为js岗和重构岗。注重基础的面试官,在CSS基础回答不上时,印象分就会有所降低。下面整理一些常问到的CSS的知识点,欢迎指正,整理不易,点个赞再走吧。。。
首先咱们以一道面试题为考察点css
三列布局,其中一列宽度自适应,其余两列固定
首先咱们来看最终实现效果,对于下方几种实现方式,能够先本身试试,再往下看html
<style> * { margin: 0; padding: 0; } div { min-height: 100px; } h2, h4 { text-align: center; } .left, .right { width: 300px; background: rgba(0, 0, 0, 0.3); } .center { background: rgba(0, 0, 0, 0.2); } .layout { margin: 10px 0; } </style>
<div class="layout float"> <style media="screen"> .float .left { float: left; } .float .right { float: right; } </style> <section class="float-layout"> <div class="left"></div> <div class="right"></div> <div class="center"> <h4>浮动三栏布局</h4> 这是三栏布局的浮动解决方案; 这是三栏布局的浮动解决方案; 这是三栏布局的浮动解决方案; 这是三栏布局的浮动解决方案; 这是三栏布局的浮动解决方案; 这是三栏布局的浮动解决方案; </div> </section> </div>
<div class="layout absolute"> <style> .absolute div { position: absolute; } .absolute .left { left: 0; width: 300px; } .absolute .center { left: 300px; right: 300px; } .absolute .right { right: 0; width: 300px; } </style> <section class="absolute-layout"> <div class="left"></div> <div class="center"> <h4>绝对定位解决方案</h4> 这是三栏布局的浮动解决方案; 这是三栏布局的浮动解决方案; 这是三栏布局的浮动解决方案; 这是三栏布局的浮动解决方案; 这是三栏布局的浮动解决方案; 这是三栏布局的浮动解决方案; </div> <div class="right"></div> </section> </div>
<div class="layout flexbox"> <style> .flexbox .flex-layout { display: flex; } .flexbox .left { width: 300px; } .flexbox .center { flex: 1; } .flexbox .right { width: 300px; } </style> <section class="flex-layout"> <div class="left"></div> <div class="center"> <h4>flexbox解决方案</h4> 这是三栏布局的浮动解决方案; 这是三栏布局的浮动解决方案; 这是三栏布局的浮动解决方案; 这是三栏布局的浮动解决方案; 这是三栏布局的浮动解决方案; 这是三栏布局的浮动解决方案; </div> <div class="right"></div> </section> </div>
<div class="layout table"> <style> .layout.table .table-layout { width: 100%; height: 100px; display: table; } .layout.table .table-layout>div { display: table-cell; } </style> <section class="table-layout"> <div class="left"></div> <div class="center"> <h4>表格布局解决方案</h4> 这是三栏布局的浮动解决方案; 这是三栏布局的浮动解决方案; 这是三栏布局的浮动解决方案; 这是三栏布局的浮动解决方案; 这是三栏布局的浮动解决方案; 这是三栏布局的浮动解决方案; </div> <div class="right"></div> </section> </div>
<div class="layout grid"> <style> .grid .grid-layout { width: 100%; display: grid; grid-template-rows: 100px; grid-template-columns: 300px auto 300px; } .grid .left { width: 300px; } </style> <section class="grid-layout"> <div class="left"></div> <div class="center"> <h4>网格布局解决方案</h4> 这是三栏布局的浮动解决方案; 这是三栏布局的浮动解决方案; 这是三栏布局的浮动解决方案; 这是三栏布局的浮动解决方案; 这是三栏布局的浮动解决方案; 这是三栏布局的浮动解决方案; </div> <div class="right"></div> </section> </div>
还有许多类似的问题,好比水平垂直居中、品字布局的实现方式等,都是同一个原理,主要的考察点:前端
一、为何要进行reset?git
二、对于float、postion的理解github
三、对于flex伸缩盒的掌握web
四、对于不经常使用的table布局有没有掌握面试
五、对于兼容性很差的grid新型布局是有所了解,我以为这是一个加分项浏览器
各个浏览器的默认展现样式不一致,CSS reset的做用是让各个浏览器的CSS样式有一个统一的基准。
例如暴力的dom
* { margin: 0; padding: 0; }
后来咱们也出现了reset.css
和Normalize.css比较官方的解决方式,固然我比较推荐Normalize.css。ide
通常咱们会有两种解决方法:
BFC是Web页面的可视化CSS渲染的一部分,是块盒子的布局过程发生的区域,也是浮动元素与其余元素交互的区域,也就是说它是一个 独立渲染的区域,它规定了内部的Block-level Box去如何进行布局,与外部无关。好比 清除浮动,外边距塌陷等都是能够经过BFC来进行解决。
关于定义MDN说的比较清楚了。 BFC连接
下列方式会建立块格式化上下文:
column-span 为 all 的元素始终会建立一个新的BFC,即便该元素没有包裹在一个多列容器中(标准变动,Chrome bug)。
position的面试点应该就是在absolute的理解吧,position的定位是相对于最近的非static定位祖先元素的便宜,强调一下是非static,而不是只有relative
该关键字指定元素使用正常的布局行为,即元素在文档常规流中当前的布局位置。此时 top, right, bottom, left 和 z-index 属性无效。
该关键字下,元素先放置在未添加定位时的位置,再在不改变页面布局的前提下调整元素位置(所以会在此元素未添加定位时所在位置留下空白)。position:relative 对 table-*-group, table-row, table-column, table-cell, table-caption 元素无效。
元素会被移出正常文档流,并不为元素预留空间,经过指定元素相对于最近的非 static 定位祖先元素的偏移,来肯定元素位置。绝对定位的元素能够设置外边距(margins),且不会与其余边距合并。
元素会被移出正常文档流,并不为元素预留空间,而是经过指定元素相对于屏幕视口(viewport)的位置来指定元素位置。元素的位置在屏幕滚动时不会改变。打印时,元素会出如今的每页的固定位置。fixed 属性会建立新的层叠上下文。当元素祖先的 transform, perspective 或 filter 属性非 none 时,容器由视口改成该祖先。
元素根据正常文档流进行定位,而后相对它的最近滚动祖先(nearest scrolling ancestor)和 containing block (最近块级祖先 nearest block-level ancestor),包括table-related元素,基于top, right, bottom, 和 left的值进行偏移。偏移值不会影响任何其余元素的位置。
盒子模型包括content、padding、border、margin这几块内容
<div class="box"> <style> .box div { width: 200px; margin: 10px auto; } .content-box { box-sizing: content-box; width: 100%; border: solid rgba(0, 0, 0, 0.2) 10px; padding: 5px; } .border-box { box-sizing: border-box; width: 100%; border: solid rgba(0, 0, 0, 0.3) 10px; padding: 5px; } </style> <h4>盒子模型</h4> <div class="border-box"></div> <div class="content-box"></div> </div>
伸缩盒可让响应式设计,表单的对齐,固定布局等能够很简单的实现
用法:
{ display:flex; flex-direction: row | row-reverse | column | column-reverse; 排列方向 flex-wrap: nowrap | wrap | wrap-reverse; align-content: flex-start | flex-end | center | space-between | space-around | stretch; 多根轴线的对齐方式。若是项目只有一根轴线,该属性不起做用 align-item: center; 垂直方向对齐方式 justify-content: center; 水平方向对齐方式 }
想深刻了解的同窗能够看看
flex布局对性能的影响主要体如今哪方面?
以上是我我的理解这个题目的考察点,下面还有部分常问的CSS知识
浏览器经过优先级来判断哪些属性值与一个元素最为相关,从而在该元素上应用这些属性值。优先级是基于不一样种类选择器组成的匹配规则。优先级就是分配给指定的 CSS 声明的一个权重,它由 匹配的选择器中的 每一种选择器类型的 数值 决定。
优先级规则
<div style="color: red"> <div style="color: blue"> <div class="son"></div> // blue </div> </div>
<div style="color: red"> <div class="son" style="color: blue"></div> // blue </div>
<div class="content-class" id="content-id" style="color: black"></div> // black #content-id { color: red; } .content-class { color: blue; } div { color: grey; }
<div id="con-id"> <span class="con-span"></span> // red </div> // CSS #con-id span { color: red; // 值为100 + 1 } div .con-span { color: blue; // 值为 1 + 10 }
由于习惯于父子dom的编写会换行,并且换行符会占用必定的宽度,因此致使元素之间会有间隙
解决:
<div class="box parent"> <div class="children"></div><!-- --><div class="children"></div><!-- --><div class="children"></div> </div>
三角形的原理是由于border并非和咱们盒模型同样是一个矩形,当设置一个div的border都是5px时,每条border都是一个梯形。
<div class="border"></div> <style> .border{ width:100px; height: 100px; border: 40px solid; border-color: #ff0000 #0000ff #ff0000 #0000ff; margin: 0 auto; } </style>
当咱们把height和width都设置为0
最终咱们就能够设置一些border-color: transparent;达到这个效果
<div class="border"></div> <style> .border{ width: 0; height: 0; border: 40px solid transparent; border-bottom: 80px solid #ff0000; } </style>
最后,但愿你们都可以找到本身满意的工做。关注个人公众号:前端30K,后续会持续更新。。。