前端知识点-混合

问题:

  • 轮播图原理?如何实现无缝滚动?
    给定一个块盒,假设里面有5张图片,设定显示宽度为一张图片,其余隐藏,通过修改图片的margin-left的值,来实现图片轮播;无缝滚动时,将最后一张图片与第一张图片设置为一样的来实现;

  • 说说事件委托?
    js中的事件流:冒泡和捕获
    冒泡: 当下级节点触发某个事件时,该事件会由下向上逐级触发上级节点的同类事件(由下而上);
    捕获: 当上级节点触发某个事件时,该事件会自上而下逐级出发下级节点的同类事件(自上而下);
    事件委托原理:基于js事件流产生的,利用事件冒泡,将事件加在父元素或者祖先元素上,触发该事件。
    好处:减少页面绑定事件数目,提高页面性能;可以灵活处理子节点动态变化的场景,子节点变化时事件不用重新绑定。

  • CSS盒模型?
    CSS核盒模型本质上是一个盒子,用于包裹HTML元素,盒子包含4个属性,由外到内分别为包括margin,border,padding,content。
    margin:清除外边框的区域,外边距是透明的;
    border:围绕在内边距和内容外的边框;
    padding:清除内容周围的区域,内边距是透明的;
    content:盒子的内容,显示文本和图像;
    盒模型允许在其他元素和周围元素边框之间放置元素;
    盒模型有2种,IE盒模型,标准盒模型;(宽度和高度的计算方式不同
    IE盒模型(怪异盒模型):box-sizing: border-box:一个块的宽度为width+margin,其中包含了content,border,padding区域。
    W3C盒模型(标准盒模型):box-sizing: content-box:一个块的总宽度包含content, padding,margin,border区域。
    在文档首部未定义DOCTYPE时,会触发怪异模式!!!

  • 如何给行内元素添加宽度?
    display:block/inline-block/flex/inline-flex;
    position:absolute/fixed;
    float:left/right;
    其中position和float的原理是将行内元素修改为display:block;

  • 说说inline-block的空白空隙产生原因,以及如何消除?
    产生原因:元素作为行内元素排版时,元素之间的空白符(空格、回车、换行等)都会被浏览器处理,由white-space处理方式(默认normal,合并多余空白),会把html中的回车换行转换成一个空白符,所以元素之间就出现了空隙(这些元素之间的间距会随着字体的大小变化而变化)。
    消除:将上一个元素的闭合标签与下一个元素的开始标签写在同一行;父元素font-size设置为0,子元素单独再设置字体大小;设置margin-right为负值;inline-block元素添加float或者flex;设置字符间距或单词间距(给父元素设置letter-spacing或者word-spacing的负值,子元素调整为0);

  • 说说BFC?
    BFC(块级格式化上下文):是一个独立的渲染区域, 它规定了内部的块级盒子如何布局,同时与这个区域外部不相关。
    BFC布局规则:
    内部的盒子会在垂直方向,一个接一个放置;
    盒子垂直方向的距离,由margin决定。属于同一个BFC的两个相邻盒子的margin会发生重叠
    BFC的区域不会与float 元素重叠;
    BFC就是页面上的一个隔离的独立容器,容器里面的子元素不会影响到外面的元素。反之也如此。
    计算BFC的高度时,浮动元素也参与计算
    会触发BFC:
    根元素或包含根元素的其他;
    float属性不为none的其他;
    overflow不为visible的其他;
    position为absolute或fixed;
    display为inline-block时;

  • CSS选择器有哪些,说说选择器的权重?
    类型选择器(如-> h1标签选择器,如-> ::after伪元素选择器)
    类选择器(如-> .test, 属性选择器如-> [type="radio"],伪类如->:hover)
    ID选择器(如-> #test)
    通配符选择器(*),关系选择器(+,>,~,'_',||),否定伪类选择器(:not()),这几种对优先级没有影响;
  • 优先级*
    分配给指定CSS声明的一个权重,由匹配的选择器的每一种选择器类型数值来决定。当同一个元素有多个声明时,优先级才有意义。
    内联样式会覆盖外部样式表的样式;!important例外,此声明会覆盖其他任何声明;
  • 规则:**
    内联:1000>ID选择器:100>类和伪类:10>元素选择器:1>通配符
    :0
    继承的样式没有优先级;若选择器优先级一样,使用靠后的;
    伪类:4个优先级一样,爱恨法则。

  • 如何让一个元素消失?
    display:none;不占据空间,不能冒泡,后代元素不渲染,会改变页面布局,理解成在页面中删掉该元素;
    visibility:hidden;占据空间,简单隐藏;但是不改变页面布局,不会触发绑定事件;
    overflow:hidden,;隐藏溢出元素;
    opacity:0;元素变透明,不改变布局,绑定事件仍然有效,也可以被transition和animate;
    position:absolute;采用margin负值。脱标;
    z-index图层遮盖;
    也可以直接width:0,height:0;但是不能隐藏文字;
    针对文字隐藏:font-size:0;
    transform:scale(0),讲一个元素无限缩小至不可见,位置保留; fliter:blur(0),模糊度设置为0;

  • 对于原型、原型链的理解?

  • 数组的map,filter,reduce方法区别?
    map():对数组的每个元素都遍历一次,同时返回一个新的值(返回的数据长度和原始数据长度一样),不改变原始数组;
    filter():它的回调函数必须返回一个boolean值;当返回true时,函数内部会自动将这次调用的n加入到新的数组中,返回false时,函数内部会自动过滤到这次的n;
    reduce():对数组中所有的内容进行汇总;
    需要一个数据-用map;需要一个结果-用reduce;需要过滤一个结果-用filter。

  • 说说回调函数?

  • 说说回调地域?
  • 介绍一下promise?

  • call,apply,bind的区别?
    调用对象的一个方法,用于改变this指向;
    call和apply:第一个参数均为指代的对象,第二个参数不同。call可以接收多个参数,后面可以为一串参数列表;apply只能接收两个参数,第二个是数组对象;若第一个参数为null,则this指向的是window对象。
    bind: 返回的是一个修改后的函数,需要进行调用。bind可以有多个参数,但是参数是按照形参的顺序进行的。
    总结:call和apply是改变上下文的this并立即执行这个函数,bind方法可以让对应的函数在合适的时候调用,在执行时候也可以添加参数。

  • 说说position属性?
    position:规定元素的定位类型。
    absolute: 绝对定位,相对于static定位以外的最近一个父元素进行定位,脱标,不占据空间;若没有已经定位的父元素,它相对于定位。它的定位会和其他元素重叠。
    relative:相对定位,相对其正常位置进行定位,元素仍占据原来的空间;可以通过设置垂直或水平位置,让这个元素相对于它的起点进行移动。
    fixed:生成绝对定位的元素,相对于浏览器窗口进行定位;
    static:无定位,元素出现在正常的流中;
    inherit:规定应该从父元素继承position属性的值;
    sticky:相对定位+固定定位的混合,元素在跨越特定阈值前为相对定位,之后为固定定位;

  • 说说let和var的区别?
    ES6可以使用let定义块级作用域;let配合for循环的应用,不会受到外面循环体的影响,不会受到变量污染;let没有变量提升和暂时性死区;let变量不能重复声明;
    总结:ES6新增了let命令,用来声明局部变量,用法类似于var,但所声明的变量只在let命令所在的代码块内有效,而且有暂时性死区的约束。

  • 暂时性死区

  • 说说作用域链和作用域?

  • v-if和v-show的区别?
    同:根据表达式的真假,切换元素的显示和隐藏;
    异:v-show是修改元素的display属性实现,指令后的内容会解析为布尔值;v-if是操纵元素的DOM树,值为false时会将元素从dom树中移除。

  • 如何画一条0.5px的线?

1.采用meta viewport的方式
<meta name="viewport" content="width=device-width, initial-scale=0.5,minimum-scale=0.5,maximum-scale=0.5" />
缩放至原来的0.5倍,则1px会变成0.5px;但viewport针对于移动端,在移动端才有效果。
2.transform:scale()的方式; transform:scale(0.5, 0.5);
3.boxshadow
4.线性渐变linear-gradient


  • link标签和import标签的区别?
    link是html标签,@import在css中使用;
    link没有兼容性,@import只能在IE5以上才可以识别;
    页面被加载时,link会同时被加载,@import引用的css会等到页面加载结束后再加载;
    link方式权重高于@import;

  • css动画如何实现
    实现CSS动画有两种主要的方法:过渡动画(transition)和animation动画。
    transition过渡动画,也就是元素从一种样式逐渐改变为另一种样式的效果。 要实现过渡动画有两个必须点(和其他可选属性):1.指定要添加过渡效果的CSS属性(或者"all");2.指定过渡效果的持续时间。transform只是一个css转换属性。
    animation动画:使用animation动画的关键:1.用@keyframes定义规则,并绑定到一个选择器上。 2.规定动画的名称(animation-name),规定动画的时长(animation-duration)。

  • transition和animation的区别?

1.指代不同:
animation:属性是简写属性,用于设置6个动画属性;
transition:属性是简写属性,用于设置4个过渡属性;
2.特点不同
animation也叫关键帧,通过和keyframe结合设置中间帧的一个状态;transition是过渡,是样式值的变化过程,只有开始和结束。
animation配合@keyframe可以不触发时间就触发这个过程,而transition需要通过hover和js事件配合触发;
animation可以设置很多属性,如循环次数,动画结束状态等;transition只能触发一次;
animation可以结合keyframe设置每一帧,但是transition只有2帧;
3.性能
animation可以改变很多属性,其中改变width,height,position等文档流的属性时会引起页面的回流重绘,而transition使用一般结合transform进行旋转和缩放不会引起页面的重排。



  • 元素的垂直居中方法
    vertical-align:middle;它的生效前提是display:inline-block;
    给父元素添加flex属性,同时子元素设置align-self:center;
    父元素设置display:table,同时子元素设置display:table-cell;不推荐
    已知父元素高度,给子元素设置position:relative,再通过translateY(-50%);
    未知父元素高度,给父元素设置position:relative,子元素设置position:absolute,再通过translateY(-50%);
    height=line-height;(子元素为单行文本的情况)
    给定宽度,再设置margin:0 auto;
    margin负值,margin-top和margin-left设置为height,width的一半;

  • 设置图片在某个容器内居中
    (1)父元素设置宽高,利用定位及设置子元素margin为自身的一半;
    (2)父元素设置宽高,子元素设置position:absolute,margin:auto均分margin;
    (3)css3属性transform,子元素设置position:absolute,left:50%;top:50%;transform(-50%,-50%);
    (4)父元素设置display:table,子元素设置display:table-cell;
    (5)弹性布局,display:flex;设置align-ites:center; justify-content:center;

  • js动画和css3动画的差异性?
    js动画:
    优点:控制能力强,可以在动画播放过程中对动画进行控制,如开始暂停取消等;动画效果丰富,如曲线运动,冲击闪烁,视觉色差滚动等只有js动画才能完成;大多数情况下没有兼容性问题;
    缺点:复杂度较高;js动画在浏览器的主线程中执行,但主线程还有其他任务,可能出现阻塞导致丢帧现象;js
    动画通常需要操作DOM元素来实现视觉上的动画效果,需要不断执行重回重排。
    css3动画:
    优点:部分情况下在浏览器上可以对动画进行优化,如在chromium基础上的浏览器中,css动画不触发layout和paint;部分效果可以强制使用硬件加速(通过GPU来提高动画性能);
    缺点:运行进程控制较弱,css3动画只能在某些场景下控制动画的暂停和继续,不能在特定的位置添加回调函数;
    总结:若两者都能实现的基础上才会考虑谁的性能更好,需要看具体的需求和也去场景。

  • 块级元素、行内元素、行内块元素
    块级元素:独占一行,可设置宽,高,若无法设置宽度,则默认为父元素的100%;
    行内元素:与其他行内元素并排显示,宽高无效,默认宽度为文字宽度。水平方向的padding,margin有效,垂直方向无效。
    行内块元素:对象呈现为inline对象,但对象的内容为block对象呈现。之后的内联对象会被排列在同一行内。

  • 文本溢出省略号
    单行文本:text-overflow:ellipsis,部分浏览器需要添加宽度属性;
    多行文本:webKit浏览器或移动端,直接使用其CSS扩展属性,-webkit-line-clamp
    写法:
    display: webkit-box //必须,将对象作为弹性盒子模型显示
  • webkit-box-orient:vertical; //必须,设置对象的子元素的排列方式
  • webkit-line-clamp:3; //
    overflow:hidden; //超出部分隐藏

  • margin合并问题
    两个垂直相邻的块级元素,当上下两个边距相遇时,外边距会产生合并现象,合并后的值等于两个发生合并的外边距的高度中的较大者。

1.盒子嵌套:给外部盒子设置内边距padding-top:1px即可;给下面的盒子设定overflow:hidden/auto即可;
2.相邻盒子:给下面的盒子设置定位position:absolute即可;给下面的盒子设置浮动float:left即可;将其中任意一个盒子设置为行内块元素display:inline-block即可。


  • 如何清除浮动
    (1)使用clear:both清除浮动
    在代码中在放一个空的div标签,然后给这个标签设置clear:both来清除浮动对页面的影响。它的优点是简单,方便兼容性好,但会造成结构混乱,不利于后期维护。
    (2)利用伪元素clearfix来清除浮动, .clearfix::after{}
    给父级元素添加了一个:after伪元素,通过清除伪元素的浮动,达到撑起父元素高度的目的
    (3)overflow方法的使用
    给父元素设置了overflow样式,不管是overflow:hidden或overflow:auto都可以清除浮动,只要它的值不为visible就可以了,它的本质就是建构了一个BFC,这样使得达到撑起父元素高度的效果
    (4)双伪元素方法的使用
    通过给父元素设置双伪元素来达到清除浮动的效果,.clearfix:before, .clearfix:after{}


  • 三栏布局的实现方式
    两列顶宽一列自适应!
    使用float+margin--注意清除浮动
    左右盒子确定宽高,再给左边的div设置float:left,右边的div设置float:right;中间的盒子添加magrin-left:左边盒子宽度;margin-right:右边盒子宽度。
    (2)position--直接定宽高,不利于布局修改
    父盒子设置position:relative;子盒子设置position:absolute;同时需要计算好三个子盒子的宽度和间隔去设置位置,兼容性较好。
    (3)table实现--方便,不利于搜索引擎抓取信息
    父盒子设置display:table, border-spacing:10px;margin:10px;取值随意,子盒子div设置display:table-cell,兼容性较好,是哦那个与高度宽度未知的情况,但是margin失效。
    (4)flex布局--存在IE9兼容问题
    父盒子设置display:flex;left和center设置margin-right,right设置flex:1,使right自适应。
    (5)grid布局
    父盒子设置display:grid;设置grid-template-columns属性,固定第一二列宽度,第三列auto;

  • 浮动布局时,3个div的生成顺序有没有影响
    shengc哼有影响,应先生成左右两侧的div,再生成中间的div;

  • calc属性
    calc()函数用一个表达式作为它的参数,用这个表达式的结果作为值。运算符的两边必须要有空白字符(+,-必须,其余建议,除数不能为0),使用 calc() 可以很容易的为一个对象设置一个左右两边相等的外边距。

  • display:table和本身的table有什么区别
    display:table系列几乎是和table系的元素相对应的。
    区别:
    display:table的css声明可以让一个html元素和它的子节点像table元素一样,使用基于表格的css布局,使得能够轻松定义一个单元格的边界,背景等样式,不会产生因为使用了table那样的制表标签所导致的语义化问题;
    目前基本不使用table系表格元素,因为div+css写的文件比table写出来的文件小;且table必须在页面完全加载后才会显示,div则逐行显示;table的嵌套性太多,没有div简洁;非表格内容用table来装,不符合标签语义化要求,不利于SEO;

  • z-index的定位方法
    z-index设置元素的堆叠顺序,z-index 属性设定了一个定位元素及其后代元素或 flex 项目的 z-order。 当元素之间重叠的时候, z-index 较大的元素会覆盖较小的元素在上层进行显示。取值:auto;这时盒子不会创建一个新的本地堆叠上下文,在当前堆叠上下文中生成的盒子的堆叠层级和父级盒子相同;设置整型数值。

  • 如何改变一个DOM元素的字体颜色,不在它本身上操作?
    考虑css继承属性,通过更改父元素的color属性。

  • height和line-height的区别
    height:指的是元素自身的高度;line-height指的是元素内部文字上下行之间的高度,是针对字体来设置的。
    当line-height=height时,表示这行元素处于垂直居中状态(仅限于一行文字时)。

  • 设置一个元素的背景颜色,会填充哪些区域
    见此图

  • display的取值
    有以下取值:none / block / inline / inline-block / table-cell / Flex
    none:此元素不会被显示
    block:元素显示为块级元素,会换行
    inline:默认,显示内联元素,不换行
    inline-block:行内块元素,结合block和inline的部分属性
    table-cell:会作为一个表格单元格显示
    Flex:弹性盒模型


  • css布局
    六种:圣杯布局,双飞翼布局,flex布局,绝对定位布局,表格布局,网格布局,依次展开

  • css预处理器
    less,sass,



  • css画正方体,三角形

  • 用css实现一个硬币旋转效果














































全部评论

相关推荐

04-11 23:51
门头沟学院 Java
坚定的芭乐反对画饼_许愿Offer版:人人都能过要面试干嘛,发个美团问卷填一下,明天来上班不就好了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务