其他

other


面试

<h3>标签的语义化</h3> <pre><code>简单来说就是合适的地方放合适的元素,最典型的页面架构为 头部区域: &lt;header&gt;&lt;nav/&gt;&lt;/header&gt; 内容区域: &lt;main&gt; &lt;article&gt; &lt;/article&gt; &lt;aside&gt; &lt;nav&gt; &lt;section&gt; &lt;div&gt;/ &lt;/adise&gt; &lt;/main&gt; 页面尾部: &lt;footer&gt;&lt;/footer&gt; 优点: 易修改,易维护 无障碍阅读支持, 利于seo优化</code></pre> <h3>盒子模型</h3> <pre><code>标准盒子模型(context-box):(content) + border + padding + margin 传统盒莫醒醒(border-box):(content + border + padding ) + margin</code></pre> <h3>css选择器</h3> <pre><code>简单选择器: id(#) class(.) 标签(div) 组合选择器: 相邻(h1+p) 子代(ui&gt;li) 后代(li a) 通配符(*) 属性选择器(a[rel='extend']) 伪类(a:hover,li:nth-child(n)) 可继承的属性: color,font-size,font-family等 不可继承: border,padding,margin,widht,height等, 优先级: !important(最高) &gt; id(100) &gt; class(10) &gt; 标签(1) </code></pre> <h3>伪类选择器</h3> <pre><code>first-of-type:属于其父元素的首页元素 last-of-type:属于其父元素的最后一个元素 only-of-type:属于其父元素的唯一元素 only-child:属于其父元素的唯一子元素 nth-child(n):属于去父元素的第n个子元素 :enabled :disabled:表单控件的禁用状态 :checked 单选框或者复选框的选中</code></pre> <h3>元素居中</h3> <pre><code>块级元素水平居中: margin 0 auto; 浮动元素水平垂直居中: 父元素:position:relative 子元素: widht:100% height:100% position:absolute left:50%,right:50% transform:translate(-50%,-50%) flex布局居中: 父元素:diaplay:flex; justify-content:center; align-content:center;</code></pre> <h3>diaplay有哪些值?含义是什么</h3> <pre><code>inline:内联 none:隐藏 block:块级元素 table:表格 list-item:列表 inline-block:行内块</code></pre> <h3>position的值?</h3> <pre><code>static(默认):正常文档流 relative:相对定位 absolute:绝对定位 fixed:固定定位</code></pre> <h3>css3新特性</h3> <pre><code>rgba:透明度 background-image(背景图片),background-origin(content-box/padding-box/border-box),background-size背景大小(),background-repeat(展现形式,no-repeat), word-wrap: 不可分割长单词换行 文字阴影:text-shadow 自定义字体:font-face 圆角:border-radius 边框图片:border-image:url(xxx.png) 30 30 round 盒子阴影:border-shadow 媒体查询:@media</code></pre> <h3>弹性盒子布局(flex)</h3> <pre><code>主要适用于移动端开发, 父元素设置diaplay:flex,及可开启弹性盒子布局 子元素设置:flex-grow,可以控制子元素所占父元素空间的大小, 0全部空间/1剩余空间 对齐方式: align-self: center; 子元素属性,设施其自身的对齐方式 align-items:父元素属性,设置其所有子元素的对齐方式 justify-content: 父元素属性作用于其所有子元素的布局方式; flex-wrap:父元素属性,设置子元素是否超出换行</code></pre> <h3>CSS创建一个三角形的原理是</h3> <pre><code>width: 0; height: 0; border-top: 40px solid transparent; border-left: 40px solid transparent; border-right: 40px solid transparent; border-bottom: 40px solid #ff0000;</code></pre> <h3>常见的兼容问题</h3> <pre><code>1.清空所有margin 及padding (不同浏览器的margin,padding不同) 2.chrome中文界面下默认会将小于12的文本转换为12px显示,通过webkit-text-size-adjust: none;解决</code></pre> <h3>display:none与visibility:hidden的区别</h3> <pre><code>display:none:不显示对应元素,在文档流中不在分配空间(回流 + 重绘) visibility:hidden,隐藏对应元素,在文档流中仍然保留原来的空间(重绘)</code></pre> <h3>BFC</h3> <pre><code>块级式化上下文 触发条件: 1.根元素 2.float:非none 3.overflow:非visible 4.display:inline-block , table-cell , table-caption flex inline-flex 5.position:absolute fixed 特性: 1.属于同一个BFC的两个容器的上下margin会重叠 (父元素设置overflow :hidden) 2.计算BFC高度时,浮动元素也参与计算,及高度崩塌 (父元素设置overflow :hidden) 3.BFC的区域不会与浮动容器发生重叠 4.BFC内的容器在垂直方向一次排列 5.元素的margin-left与其包含块的border-left相接处 6.BFC是独立的容器,容器内部元素不会影响容器外部元素 https://www.cnblogs.com/qs-cnblogs/p/12349887.html 利用BFC的特性通常可以解决:上下margin重叠,浮动高度嵌套崩塌,以及浮动元素与非浮动元素重叠等问题;</code></pre> <h3>浮动会产生那些影响,及解决办法</h3> <pre><code>影响: 1.父元素的高度无法被撑开,影响与父元素同级别的元素 2.与浮动元素同级别的非浮动元素(内联元素)会跟随其后 3.若非第一个元素浮动,则改元素在之前的元素也需要浮动,否则影响页面显示结构 解决方法: 1.父级定义height; 2.最后一个浮动元素后添加一个空的div,并设置clear:both 3.浮动元素的父标签添加样式overflow:hidden或者auto</code></pre> <h3>css优化发布方法</h3> <pre><code>1.避免后代选择器; 2.避免链式选择符 3.使用紧凑的语法 4.避免不必要的命名空间 5.避免不必要的重复 6.使用标识语义的名字</code></pre> <h3>什么是响应式设计?响应式设计的基本原理是什么?如何兼容低版本的IE</h3> <pre><code>响应式网站设计,是一个网站能够兼容的多个终端,而不是为每一个终端做一个特定的版本; 基本原理就是: 通过媒体查询检测不同的设备屏幕尺寸做处理; 页面头部需要有mate声明的viewport: &lt;meta name=’viewport’ content=”width=device-width, initial-scale=1. maximum-scale=1,user-scalable=no”&gt;</code></pre> <h3>::before和:hover中的双冒号和单冒号的区别;</h3> <pre><code> 单冒号:css3伪类 常见有 :hover :disable 双冒号:css3伪元素 常见有 ::before ::after</code></pre> <h3>怎么让Chrome支持小于12px 的文字?</h3> <pre><code>p{ font-size:10px;-webkit-transform:scale(0.8); } //0.8是缩放比例</code></pre> <h3>js的数据类型</h3> <pre><code>基础类型: Number String Boolean Null Undefined Symbol 引用数据类型: Object Function</code></pre> <h3>Map和Set的区别</h3> <pre><code>Map和Set 都是一种数据结构 Map对象保存键值对 任何值(对象或者原始值)都可以作为键或值, 与Object的区别 : 1.Object的键只能是字符串或者Symbol,但Map的键可以使任意值; 2.Map的键值是有序的,而添加到对象的键则不是 3.Map的键值个数可以通过size属性获取,而对象只能通过手动计算 Map的属性:size Map的方法: set(key,val) get(key) has(key) delete(key) clear() Set对象允许你存储任意类型的值,无论原始值,还是对象的引用,它类似于数组,但成员是唯一的,没有重复的值 Set本身就是一个构造函数,用来生成Set数据结构,Set函数可以接收一个数组用于初始化 set的属性:size set的方法: add(val) delete(val) has(val) clear() 可以通过Set实现数组去重 [...new Set(arr)]</code></pre> <h3>原型与原型链</h3> <pre><code>构造函数,实例原型,实例之间的关系: 构造函数的prototype指向调用该构造函数生成的实例原型(对象); 对象(包含通过改构造函数 new 出来实例,null除外 )都有一个属性_proto_,指向该对象的实例原型 每个实例原型都有一个constructor 指向其关联的构造函数 实例属性的查询关系, 自身没有就找与之关联的是原型中的属性,还找不到就继续向上找 实例原型既然是个对象那么他有也有_proto_属性指向他的实例原型 因此原型链就是通过这一系列的关系形成的链式结构</code></pre> <p><img src="https://upload-images.jianshu.io/upload_images/3174701-18a76d28c0a9ea1b?imageMogr2/auto-orient/strip|imageView2/2/w/521/format/webp" alt="avatar" /></p> <h3>this的指向</h3> <pre><code>一般情况下 谁调用,指向谁; 箭头函数 指向外层</code></pre> <h3>深浅拷贝</h3> <pre><code>浅拷贝: var a ={ count :1,deep:{count:2}} 1.var b = Object.assign({},a) 2.var b ={...a} 深拷贝: var deepCopy=(obj)=&gt;{ var ret={} for(var key in obj){ var value=obj[key] ret[key] = typeof value === 'Object'? deepCopy(value) : value } return ret }</code></pre> <h3>事件冒泡 事件捕获 监听,阻止默认,阻止冒泡</h3> <pre><code>事件冒泡和事件捕获基本一致,都是父元素和子元素都绑定了click事件,然后单击父元素,间接触发子元素的click事件,差别在于事件触发的顺序,冒泡是从里向外一次触发,捕获是从外向里触发事件, 通过这一现象,可以通过事件监听可以减少代码量 监听 addEventListener('click',function(e){ var e = e||window.event //获取点击事件的元素 if(e.target.nodeName.toLowerCase() === '标签名'){ //触发事件 } }) 阻止冒泡的方法 (1)给足子级 event.stopPropagation() (2)或者在事件处理中使用 return false 阻止默认的方法 (1)event.preventDefault( ) (2)return false</code></pre>

页面列表

ITEM_HTML