前端面试题总汇(持续更新中)
css
display:none; 和visibility:hidden;的区别是什么?
- visibility:hidden 隐藏元素,但在网页中仍然占有位置 display:none 元素的显示设置为无,在网页中没有位置了
- visibility:hiden 的元素仍然还具有宽度与高度 display:none 元素则宽度与高度都没有了
BFC是什么意思,解决的是什么问题,如何触发BFC?
bfc称为块级格式化上下文,是一个独立渲染区域。规定了内部box如何布局,并且与这个区域外部毫不相干。
解决的问题是:避免垂直外边距的重叠,以及父级元素高度塌陷的问题
触发:float的值不是none;position的值不是static或者relative;display的值是inline-block、block、table-cell、flex、table-caption或者inline-flex;overflow的值不是visible。
CSS的选择器权重以及比较顺序?
内嵌样式>内部样式>外部样式>导入式
!important > 内嵌 1000 >Id 100 > class 10 > tag=伪元素 1 > ( * + > ~) 0
css盒模型、css如何设置两个盒模型 ? ❤
css盒模型分为: W3C(标准盒模型):
width+padding+border+margin
IE(怪异盒模型):
内容区:(width+padding+border)
内容区+padding
标准盒的设置 box-sizing:content-box
怪异盒的设置 box-sizing:border-box
如何水平垂直居中一个元素? ❤
1.将元素设置为行内块元素,display:inline-block
父级元素设置 左右居中 text-align:center
子元素设置 上下居中 line-height:center
- display:flex
justify-content: center;
align-items: center;
- 是否该元素是否存在宽高,如果有宽高 定位:postion:absolute-margin 减去自身宽度高度的一半
- 如果不存在宽度高度,则postion:absolute+transform: translate(-50%, -50%);
- 可以使用 网格布局
css可以继承的属性有哪些?
(1)字体系列属性 font、font-family、font-weight、font-size、font-style、font-variant、font-stretch、font-size-adjust
(2)文本系列属性 text-indent、text-align、text-shadow、line-height、word-spacing、letter-spacing、 text-transform、direction、color
(3)表格布局属性 caption-sideborder-collapseempty-cells
(4)列表属性 list-style-type、list-style-image、list-style-position、list-style
(5)光标属性 cursor
(6)元素可见性 visibility
css新增的伪类有哪些?
nth-child(n) 父元素下面第几个元素
nth-last-child(n) 父元素下面第几个元素(从后面查找起)
last-child 父元素下的最后一个元素
only-child 父元素下的唯一的元素 如果父元素下面只有一个元素
elem:nth-of-type(n)选中父元素下第n个elem类型元素,n可以接受具体的数值,也可以接受函数
elem:first-of-type选中父元素下第一个elem类型元素
elem:last-of-type选中父元素下最后一个elem类型元素
elem:only-of-type如果父元素下的子元素只有一个elem类型元素,则选中该元素
elem:empty选中不包含子元素和内容的elem类型元素
elem:target选择当前活动的elem元素
:enabled控制表单控件的禁用状态
:disabled控制表单控件的禁用状态
:checked单选框或复选框被选中
有一个高度自适应的 div,里面有两个 div,一个高度 100px,希望另一个填满剩下的高度?
- 使用弹性盒布局 display:flex 给第一个设置高度,第二个盒子 flex:1
- 使用定位来解决 外层盒子设置为 position:relative 里面需要填充剩下宽度的盒子设置 position:absolute top:100;left:0;right:0;bottom:0;
常见的元素隐藏方式?
display:none 元素不会在页面中占据位置,也不会响应绑定的监听事件
visibility:hidden 元素在页面中仍占据空间,但是不会响应绑定的监听事件
opacity:0 元素在页面中仍占据空间,可以响应绑定的监听事件
z-index 负值,来使其他元素遮盖住该元素,以此来实现隐藏
transform:scale(0,0)来将元素缩放为 0,以此来实现元素的隐藏。这种方法下,元素仍在页面中占据位置,但是不会响应绑定的监听事件
绝对定位将元素移除可视区域内,以此来实现元素的隐藏
列举一些CSS框架
Bootstrap Layui ElementUI antd
link与import的区别
-
link是一个标签而import是作为一个方法
-
link没有兼容性的问题,而import则会有兼容性问题
-
link是控制dom元素,因此能够通过js来修改样式,而import则是不能够进行修改样式
-
link会同时加载html与css ,而import先加载html后加载css
父级元素没有设置高度,造成父级元素高度塌陷问题?
-
给父级元素设置一个高度
-
在子元素后面添加一个空div.清除子级元素浮动 clear:both
-
给子元素添加一个伪类 :after{content:''}
-
使用BFC overflow:hidden
position的值分别是相对于哪个位置定位的?
position:static 静态 position: relative 相对定位 相对自己本身的位置 position: absolute 绝对定位 父级没有设置相对定位,则是针对与浏览器设置, 父级有设置相对定位,则是针对父级元素设置 position:fixed 固定定位 针对与浏览器 position:sticky 黏性定位的元素
图片下方有3px留白区域如何去掉?
- 改变元素类型 display:block
- 改变图片垂直方向上对齐方式,不再是基线对齐 baseline vertical-align只对行内与行内块元素有效
css3新增的属性有哪些?
- border-radius 圆角边框
- box-shadow css边框阴影
- border-image css边框图片
- background-size 背景尺寸
- text-shadow 文本阴影
- transform :scale() 缩放 translate()移动 rotate() 旋转 skew() 倾斜
css单位
- px 绝对单位
- em 相对单位 基准点为父节点字体的大小,如果自定义了font-size 按自身的来算,整个页面的em并不是一个固定的单位
- rem:相对单位,相对根节点html的font-size大小来计算
- vw: 视窗宽度,1vw等于视窗宽度的1%
- vh: 视窗高度,1vh等于视窗宽度的1%
- vmin:以宽和高之间最短的一段为基准 ,如果宽》高,那么1vmin 等于高的1%
- vmax:以宽和高之间最高的一段为基准 ,如果宽》高,那么1vmin 等于宽的1%
- %:百分比
什么是弹性布局?
解决某元素中“子元素”的布局方式,为布局提供最大的灵活性
设置为弹性盒后,元素的float clear 依旧vertical-align 属性失效
display:flex设置盒子为弹性盒,里面的子盒子的样式会变成行内块样式
- flex-direction:row 默认 row-reverse 行反转 column 列 column-reverse 列反转
- justify-content:flex-start 默认 flex-end 末端 center 居中对齐 space-between 两端对齐,中间自动分配 space-around 自动分配距离
- align-items:stretch 拉伸 flex-start flex-end center
- flex-wrap:nowrap 不换行 warp 换行
- align-content:flex-start flex-end center space-between space-around strech 给子元素设置,给子元素添加
- align-self:auto 默认值 stretch flex-end center flex-start
- order:排序优先级,数字越大越往后排,默认为0,支持负数
- flex-grow :0 默认为0, 占剩余空间,等于flex:1
- flex-shrink:1 默认值, 压缩 不压缩:0
- flex-basis 项目长度
flex 为 flex-grow flex-shrink flex-basis 的简写形式
常见的页面布局
- 静态布局
- 流式布局又称百分比布局,随着屏幕的改变,页面的布局没有发生大的变化,可以进行适配调整
- 弹性布局 是css3引入强大的布局方式
- 响应式布局 采用自适应布局和流式布局的综合方式,利用媒体查询可以检测到屏幕的尺寸,并设置不同的css样式,就可以实现响应式的布局
css预处理器
sass,less,stylus
画三角形
div{
width:0;
height:0;
border-top:50px solid transparent;
border-left:50px solid transparent;
border-right:50px solid transparent;
border-bottom:5px solid red;
}
js面试题
JavaScript有哪些数据类型,它们的区别?❤
分为基本数据类型与复杂数据类型 基本数据类型有:String number boolean undefined null
复杂数据类型有:Array Object 正则表达式 Function 等
基本数据类型的存储数据以及变量都在栈内存中完成的,而复杂数据类型在栈内存中存储地址以及变量,数据都是存储在堆内存中的
检测数据类型的方式有哪些?
- typeof 基本数据类型的检验
- instanceof 用来检测对象的类型
- constructor 用来判断数组类型
- Object.prototype.toString.call() 万能检测法
- isArray 用来检测数组
null与undefined 的区别?
首先 Undefined 和 Null 都是基本数据类型,这两个基本数据类型分别都只有一个值,就是 undefined 和 null。
undefined 代表的含义是未定义,null 代表的含义是空对象。一般变量声明了但还没有定义的时候会返回 undefined,null主要用于赋值给一些可能会返回对象的变量,作为初始化。
undefined 在 JavaScript 中不是一个保留字,这意味着可以使用 undefined 来作为一个变量名,但是这样的做法是非常危险的,它会影响对 undefined 值的判断。我们可以通过一些方法获得安全的 undefined 值,比如说 void 0。
当对这两种类型使用 typeof 进行判断时,Null 类型化会返回 “object”,这是一个历史遗留的问题。当使用双等号对两种类型的值进行比较时会返回 true,使用三个等号时会返回 false。
typeof NaN 的结果是什么?
结果是number NAN 不是一个数字,代表一个非数字的数值类型,一般是其他数据类型转换成数字类型的时候使用 isNAN 专门为检测NaN诞生的,返回值为布尔值
其他数据类型转数值的方法
- 采用Number进行转换 纯数字的字符串,使用Number可以转换成一个数值类型,不是纯数字转换,包含字母、特殊符号转换最终结果nan
- parseInt 从第一位开始匹配,如果是数字就保留,不是数字继续往后找,找到不是数字就停止,返回前面匹配的数字内容(无法识别小数点)
- parseFloat 能够识别小数点