前端面试题01

454 阅读3分钟

面试题内容来源阿里、网易、滴滴共十次前端面试碰到的问题

HTML

HTML5新增了哪些内容或API,使用过哪些

参考资料:

HTML元素

  1. cancas、svg --- 绘画元素
  2. video、audio --- 播放视频和音频的媒体
  3. drag、drop --- 用于拖放
  4. Geolocation --- 用于获取地理位置
  5. webSQL、IndexDB --- 前端数据库操作,用于安全性极低,目前H5已放弃
  6. web Worker --- 独立与其他脚本,补ing喜爱难过页面运行在后台的js
  7. 新的特殊内容元素 --- article、footer、header、nav、section
  8. 新的表单元素 --- date、time、email、url、search

dom操作方法

  1. querySelector 和 querySelectorAll
  2. 类的操作
oDiv.classList.ass('test');
oDiv.classList.remove('test');
oDiv.classList.toggle('test'); // 有类名是移除,无类名时添加
  1. data-*自定义属性

文件读取

  1. 上传,通过表单控件实现
<input type="file" name="" />
  1. 读取,通过FileReader构造函数实现
  • readAsBinaryString: 将文件读取为二进制编码
  • readAsDataUrl:将文件读取为DataURL
  • readAsText:将文本读取为文本
  1. FileReader提供的事件
  • onabort:读取文件中断时触发
  • onerror:读取文件出错时触发
  • onload:读取文件完成时触发,只在读取成功后触发
  • onloadend:读取文件完成时触发,无论读取失败成功或者失败都会触发
  • onloadstart:读取文件开始时触发
  • onprogress:正在读取文件

本地存储

  • localStorage
  • sessionStorge

input 和 textarea的区别

input

  1. input标签是单行文本框,不会换行
  2. 通过size属性指定显示字符的长度,但当使用css限定了高度,size属性就不再起作用
  3. value属性置顶初始值,maxLength属性置顶文本框可以输入的最大长度
  4. 可以通过width和height设置宽高,但是也不会增加行数
<input type="text" style="width: 100px; height: 100px;" value="哈哈哈哈哈哈,测试"/>

textarea

  1. text时多行文本输入框,文本区可容纳无限数量的文本

div框模拟textarea实现

// html 部分
<div id="textarea" contenteditable="true">>/div>

// css 部分
#textarea {
    width: 300px;
    border: 1px solid #ccc;
    min-height: 150px;
    max-height: 300px;
    overflow: auto;
    font-size: 14px;
    outline: none;
}

CSS部分

左右布局

<style>
    .container {
        height: 500px;
        overflow: hidden;
    }
    .left {
        width: 300px;
        height: 100%;
        background-color: red;
    }
    .right {
        width: 200px;
        height: 100%;
        background-color: green;
    }
    /* 方式一 */
    .container1 {
        display: flex;
        justify-content: space-between;
    }

    /* 方式二: display: inline-block + float: right< */
    .left2 {
        display: inline-block;
    }
    .right2 {
        float: right;
    }

    /* 方式三:float */
    .left3 {
        float: left;
    }
    .right3 {
        float: right;
    }

    /* 方法四:postion */
    .container4 {
        position: relative;
    }
    .right4 {
        position: absolute;
        right: 0;
        top: 0;
    }

    /* 方法五:grid */
    .container5 {
        display: grid;
        grid-template-columns: 300px auto 200px;
    }
</style>

<body>
    <p>方式1: FLEX布局</p>
    <div class="container container1">
        <div class="left left1"></div>
        <div class="right right1"></div>
    </div>

    <p>方式2: display: inline-block + float: right</p>
    <div class="container">
        <div class="left left2"></div>
        <div class="right right2"></div>
    </div>

    <p>方式3: float</p>
    <div class="container">
        <div class="left left3"></div>
        <div class="right right3"></div>
    </div>

    <p>方式4: postion</p>
    <div class="container container4">
        <div class="left"></div>
        <div class="right right4"></div>
    </div>

    <p>方式5: grid</p>
    <div class="container container5">
        <div class="left"></div>
        <div class="middle"></div>
        <div class="right"></div>
    </div>
</body>

BFC、IFC

BFC(Block Fomatting Contexts)会计格式化上下文
是web页面的可视CSS渲染的一部分,是块盒子的布局过程发生的区域,也是浮动元素和其他元素交互的区域。
系列方式会创建块格式化上下文:

  • 根元素(html)
  • 浮动元素(元素的float不是none)
  • 绝对定位元素(position: absolute | fixed)
  • 行内元素(display: inline-block)
  • 表格单元素(display: table-cell, HTML表格单元格默认为该值)
  • 表格标题(display: table-caption, HTML表格标题默认为该值)
  • 表格单元格元素(display: table[table] | table-row[row] | table-row-group[tbody] | table-header-group[thead] | table-footer-group[tfoot] | inline-table)
  • overflow计算值(Computed)不为visible
  • display: flow-root
  • contain值为 layout、content、或 paint的元素
  • 弹性元素(display为flex或inline-flex元素的直接子元素)
  • 网格元素(display为grid或inlie-grid元素的直接子元素)
  • 多列元素(元素的column-count或column-width不为auto,包括column-count为1)
  • column-span为all的元素会始终创建一个新的BFC,即使该元素没有包括在一个多列容器中

IFC(Inline formating context)行内格式化上下问
是web的渲染结果的一部分。其中,各行内框(inlie boxes)一个接一个地排列,其中顺序根据书写模式的设置来决定:

  • 对于水平书写模式,各个框从左边开始水平地排列
  • 对于垂直书写模式,各个框从顶部开始水平地排列