面试整理

222 阅读6分钟

1.css选择器

  • 标签选择器
  • 类选择器
  • ID选择器
  • 全局(通配符)选择器
  • 伪类选择器 :hover
  • 子选择器 div>p 选择 div 的第一子代的 所有p 元素。
  • 兄弟选择器 div+p 选择与div同级且紧接在其后的第一个 p 元素
  • 包含选择器 div p 选择 div 元素内部所有的 p 元素
  • 属性选择器 |属性选择器|描述|示例| |--------|-----------|-------| |[title]|属性为title的所有元素|[align]{color: red;}| |[title=val]|匹配属性等于指定值的所有元素| [align=center]{color: red;}| |[title^=val]|匹配属性值以指定值开头的所有元素| [color^="#f"]{color :mediumblue;}| |[title=val]匹配属性值以指定的值结尾的所有元素[color=val]|匹配属性值以指定的值结尾的所有元素|[color="aa"]{color :mediumblue;}| |[title*=val]|匹配属性值包含指定值的所有元素|[color*="aa"]{color :mediumblue; }|
选择器优先级: !important > 行内样式 > ID选择器 > class类选择器 > 标签选择器 > 通配符选择器 > 浏览器的自定义和继承

2.垂直居中

1. position: absolute;
     left: 50%;
     top: 50%;
     transform: translate(-50%,-50%);
     
2. 父元素  display: flex;
        justify-content: center;
        align-items: center;
3.定父元素为相对定位,浮动元素为绝对定位.且 left/right/top/bottom 设置为 0,再给浮动元素设置 margin:auto. 
3. 高度不固定内容水平垂直居中 (文字水平居中)
 .text_wrap{
    display: table-cell; 
    width: 200px;
    height: 250px;
    background-color: goldenrod;
    vertical-align: middle;
    padding: 20px;
    /* text-align: center; */  打开此项则为下图2,最后一个单字也居中
 }
 <body>
    <div class="text_wrap">
        啊噢噢啊好喷水电机卡假设打开数据库的价撒杰克红蝶汉口拉开肯德基快速搭建即打开了就看见可拉伸的卡拉季
    </div>
</body>

3.定位

  • static (默认值) 处于文档流,占据正常空间;
  • relative 相对定位 相对于自身处在文档流中的位置进行定位,原先占据的空间仍保留;通常用来给absolute做参照物或者改变层级;
  • absolute 绝对定位 脱离文档流,在页面不占据空间,后面的元素会在其原来位置进行布局,参照物为第一个定义的不是static的父级或祖先定位元素,如果没有则body为参照物
  • fixed 固定定位 脱离文档流,偏移定位以浏览器窗口为参照物,没有定位祖先元素的说法;出现滚动条,位置不会随着滚动; 3.flex

4.左边固定100px;右边自适应,有哪些方法

1.左边设置绝对定位或浮动,右边margin-left:左边盒子的固定宽度;
  .left{
    width: 100px;
    height: 100%;
    background-color: darkcyan;
    float: left; //浮动 脱离文档流,后面的元素可以占据此空间(所以虽然div为块级元素,后面的元素也会上来)
    或者position:absolute; //同上,利用定位元素脱离文档流;用relactive相对定位则不行,因为没有脱离文档流)
    }
   .right{
    height: 100%;
    background-color: darkgoldenrod;
    margin-left:100px ;
    }
2.table-cell
<style>
 body,html{
     width: 100%;
     height: 100%;
 } 
 body{
     display: table;
 }
 .left,.right{
    display: table-cell; 
    width: 100px;
    height: 100%;
    background-color: goldenrod;
 }
 .center{
  height: 100%;
  background-color: olivedrab;
 }
</style>
<body>
    <div class="left"></div>
    <div class="center"></div>
    <div class="right"></div>
</body>

3.float + BFC
<style>
        .box {
            overflow: auto;
            border: 1px solid #000;
        }
        .left {
            float: left;
            width: 200px;
            height:200px;
            background-color: green;
        }
        .right {
            overflow: auto;
            height: 150px;
            background-color:yellow;
        }
    </style>
</head>
<body>
    <div class="box">
        <div class="left">左边固定</div>
        <div class="right">右边自适应</div>
    </div>

上面固定,下面自适应有哪些方法

5.botostrop的原理,有没有看源码,怎么做一个自适应

7.盒模型

8.清楚浮动


.clearfix:before,
.clearfix:after {
    display: table;
    content: " ";
}
.clearfix:after {
    clear: both;
}
.clearfix{
    *zoom: 1;

BFC

bfc 块级格式化上下文,没有明确的定义

BFC 特性(功能)

  1. 使 BFC 内部浮动元素不会到处乱跑;(清除浮动) 计算BFC的高度时,浮动元素也参与计算 如果父元素没有设置高度,子元素浮动,父元素就会失去高度,为达到清除内部浮动,我们可以触发父元素生成BFC,那么父元素在计算高度时,父元素内部的浮动元素也会参与计算。 .par { border: 5px solid #fcc; width: 300px; }

        .child {
            border: 5px solid #f66;
            width:100px;
            height: 100px;
            float: left;
        }
    </style>
    <body>
        <div class="par">
            <div class="child"></div>
            <div class="child"></div>
        </div>
    </body>
    给父元素加:
    .par {
        overflow: hidden;
    }
    触发BFC
    
  2. 和浮动元素产生边界。

在正常的文档流中,块级元素是按照从上自下,内联元素从左到右的顺序排列的。

如果我给里面的元素一个 float 或者绝对定位,它就会脱离普通文档流中。(如果没有给高度,用了浮动就是失去高度)

此时如果我们还想让外层元素包裹住内层元素该如果去做??

让外层元素产生一个 BFC 。(产生 BFC 的方法 MDN 文档里有写)

3.防止垂直margin重叠

<style>
    p {
        color: #f55;
        background: #fcc;
        width: 200px;
        line-height: 100px;
        text-align:center;
        margin: 100px;
    }
</style>
<body>
    <p>Haha</p>
    <p>Hehe</p>
</body>

两个p之间的距离为100px,发送了margin重叠。   根据BFC布局规则第二条:

Box垂直方向的距离由margin决定。属于同一个BFC的两个相邻Box的margin会发生重叠

  • 我们可以在p外面包裹一层容器,并触发该容器生成一个BFC。那么两个P便不属于同一个BFC,就不会发生margin重叠了。

    <style>
        .wrap {
            overflow: hidden;
        }
        p {
            color: #f55;
            background: #fcc;
            width: 200px;
            line-height: 100px;
            text-align:center;
            margin: 100px;
        }
    </style>
    <body>
        <p>Haha</p>
        <div class="wrap">
            <p>Hehe</p>
        </div>
    </body>

其实以上的几个例子都体现了BFC布局规则第五条:

BFC就是页面上的一个隔离的独立容器,容器里面的子元素不会影响到外面的元素。反之也如此。

  • 因为BFC内部的元素和外部的元素绝对不会互相影响,因此, 当BFC外部存在浮动时,它不应该影响BFC内部Box的布局,BFC会通过变窄,而不与浮动有重叠。同样的,当BFC内部有浮动时,为了不影响外部元素的布局,BFC计算高度时会包括浮动的高度。避免margin重叠也是这样的一个道理。

js

浅拷贝

newarr=[...arr]

... 和find方法都是浅拷贝

如果arr是普通类型 那么值不会跟着变 如果是对象或数组就等于是引用,赋值 值会跟着变化

深拷贝

let aNewState=JSON.parse(JSON.stringify(state))

这是深拷贝 不会随着值得变化而变

运算符

前自增和后自增

前自增:var b=++a 优先于普通算数和赋值运算符执行,会先完成++操作,再去完成赋值

后自增:var b=a++ 普通算数和赋值运算符优先于后++,会先完成赋值,最后完成++操作

数据类型

5中基本数据类型

undefined` ---------- 如果值未定义 `Undefined
boolean` ---------- 如果这个值是布尔值 `Boolean
string` ---------- 如果这个值是字符串 `String
number` ---------- 如果这个值是数值类型 `Number
null` ---------- 如果这个值是对象或`null` `Object

2种复杂数据类型

  • array
  • obect
    • function
    • object

json

json是一种字符串格式 :类似于数组和对象字面量表示法,只不过对象属性名用引号引起来了

作用:用来在浏览器和服务器之间做数据传输

  • 使用JSON将json字符串转成js对象 JSON.parse()
  • 使用JSON将自定义对象转成json字符串 JSON.stringify()

函数

函数 有是3种叫法:

a.函数 - 写在 对象外面的

b.方法 - 写在 对象里面的

c.api -  别人写的,我们来用