本次收录了一些面试中经常会遇到的经典面试题以及自己面试过程中遇到的一些问题, 并且都给出了我在网上收集的答案. 马上就要过春节了, 开年就是崭新的一年, 相信很多的前端开发者会有一些跳槽的悸动, 通过对本篇知识的整理以及经验的总结, 希望能帮到更多的前端面试者.(如有错误或更好的答案, 欢迎指正, 水平有限, 望各位不吝指教.:)
CSS 权重
CSS 权重指的是样式的优先级, 有两条或多条样式作用于一个元素, 权重高的那条样式对元素起作用, 权重相同的, 后写的样式会覆盖前面写的样式.
权重的等级
可以把样式的应用方式分为几个等级, 按照等级来计算权重
1,!important, 加在样式属性值后, 权重值为 10000
2, 内联样式, 如: style="", 权重值为 1000
3,ID 选择器, 如:#content, 权重值为 100
4, 类, 伪类和属性选择器, 如: content,:hover 权重值为 10
5, 标签选择器和伪元素选择器, 如: div,p,:before 权重值为 1
6, 通用选择器(*), 子选择器(>), 相邻选择器(+), 同胞选择器(~), 权重值为 0
权重的计算实例
1, 实例一:
对 Web 开发技术感兴趣的同学, 欢迎加入 Q 群: 864305860,
不管你是小白还是大牛我都欢迎, 还有大牛整理的一套高效率学习路线和教程与您免费分享,
同时每天更新视频资料.
最后, 祝大家早日学有所成, 拿到满意 offer, 快速升职加薪, 走上人生巅峰.
2, 实例二:
- <style type="text/css">
- #content div.main_content h2{
- color:red;
- }
- #content .main_content h2{
- color:blue;
- }
- </style>
- ......
- <div id="content">
- <div class="main_content">
- <h2 > 这是一个 h2 标题</h2>
- </div>
- </div>
- <!--
- 第一条样式的权重计算: 100+1+10+1, 结果为 112;
- 第二条样式的权重计算: 100+10+1, 结果为 111;
- h2 标题的最终颜色为 red
- -->
CSS3 新增选择器
1,E:nth-child(n): 匹配元素类型为 E 且是父元素的第 n 个子元素
- <style type="text/css">
- .list div:nth-child(2){
- }
- </style>
- ......
- <div class="list">
- <h2>1</h2>
- <div>2</div>
- <div>3</div>
- <div>4</div>
- <div>5</div>
- </div>
- <!-- 第 2 个子元素 div 匹配 -->
2,E:first-child: 匹配元素类型为 E 且是父元素的第一个子元素
3,E:last-child: 匹配元素类型为 E 且是父元素的最后一个子元素
4,E> F E 元素下面第一层子集
5,E ~ F E 元素后面的兄弟元素
6,E + F 紧挨着的后面的兄弟元素
属性选择器:
1,E[attr] 含有 attr 属性的元素
- <style type="text/css">
- div[data-attr='ok']{
- color:red;
- }
- </style>
- ......
- <div data-attr="ok">这是一个 div 元素</div>
2,E[attr='ok'] 含有 attr 属性的元素且它的值为 "ok"
3,E[attr^='ok'] 含有 attr 属性的元素且它的值的开头含有 "ok"
4,E[attr$='ok'] 含有 attr 属性的元素且它的值的结尾含有 "ok"
5,E[attr*='ok'] 含有 attr 属性的元素且它的值中含有 "ok"
CSS3 圆角, rgba
CSS3 圆角
设置某一个角的圆角, 比如设置左上角的圆角:
border-top-left-radius:30px 60px;
同时分别设置四个角: border-radius:30px 60px 120px 150px;
设置四个圆角相同:
- border-radius:50%;
- rgba(新的颜色值表示法)
1, 盒子透明度表示法:
- .box
- {
- opacity:0.1;
- /* 兼容 IE */
- filter:alpha(opacity=10);
- }
2,rgba(0,0,0,0.1) 前三个数值表示颜色, 第四个数值表示颜色的透明度
CSS3 transition 动画
1,transition-property 设置过渡的属性, 比如: width height background-color
2,transition-duration 设置过渡的时间, 比如: 1s 500ms
3,transition-timing-function 设置过渡的运动方式, 常用有 linear(匀速)|ease(缓冲运动)
4,transition-delay 设置动画的延迟
5,transition: property duration timing-function delay 同时设置四个属性
CSS3 transform 变换
1,translate(x,y) 设置盒子位移
2,scale(x,y) 设置盒子缩放
3,rotate(deg) 设置盒子旋转
4,skew(x-angle,y-angle) 设置盒子斜切
5,perspective 设置透视距离
6,transform-style flat | preserve-3d 设置盒子是否按 3d 空间显示
7,translateX,translateY,translateZ 设置三维移动
8,rotateX,rotateY,rotateZ 设置三维旋转
9,scaleX,scaleY,scaleZ 设置三维缩放
10,tranform-origin 设置变形的中心点
11,backface-visibility 设置盒子背面是否可见
举例:(翻面效果)
- <!DOCTYPE HTML>
- <HTML lang="en">
- <head>
- <meta charset="UTF-8">
- <title>
- 翻面
- </title>
- <style type="text/css">
- .box{ width:300px; height:272px; margin:50px auto 0; transform-style:preserve-3d;
- position:relative; } .box .pic{ width:300px; height:272px; position:absolute;
- background-color:cyan; left:0; top:0; transform:perspective(800px) rotateY(0deg);
- backface-visibility:hidden; transition:all 500ms ease; } .box .back_info{
- width:300px; height:272px; text-align:center; line-height:272px; background-color:gold;
- position:absolute; left:0; top:0; transform:rotateY(180deg); backface-visibility:hidden;
- transition:all 500ms ease; } .box:hover .pic{ transform:perspective(800px)
- rotateY(180deg); } .box:hover .back_info{ transform:perspective(800px)
- rotateY(0deg); }
- </style>
- </head>
- <body>
- <div class="box">
- <div class="pic">
- <img src="images/location_bg.jpg">
- </div>
- <div class="back_info">
- 背面文字说明
- </div>
- </div>
- </body>
- </HTML>
CSS3 animation 动画
1,@keyframes 定义关键帧动画
2,animation-name 动画名称
3,animation-duration 动画时间
4,animation-timing-function 动画曲线 linear(匀速)|ease(缓冲)|steps(步数)
5,animation-delay 动画延迟
6,animation-iteration-count 动画播放次数 n|infinite
7,animation-direction 动画结束后是否反向还原 normal|alternate
8,animation-play-state 动画状态 paused(停止)|running(运动)
9,animation-fill-mode 动画前后的状态 none(缺省)|forwards(结束时停留在最后一帧)|backwards(开始时停留在定义的开始帧)|both(前后都应用)
10,animation:name duration timing-function delay iteration-count direction; 同时设置多个属性
理解练习:
1, 人物走路动画
- <!DOCTYPE HTML>
- <HTML lang="en">
- <head>
- <meta charset="UTF-8">
- <title>
- 走路动画
- </title>
- <style type="text/css">
- .box{ width:120px; height:180px; border:1px solid #ccc; margin:50px auto
- 0; position:relative; overflow:hidden; } .box img{ display:block; width:960px;
- height:182px; position: absolute; left:0; top:0; animation:walking 1.0s
- steps(8) infinite; } @keyframes walking{ from{ left:0px; } to{ left:-960px;
- } }
- </style>
- </head>
- <body>
- <div class="box">
- <img src="images/walking.png">
- </div>
- </body>
- </HTML>
CSS3 浏览器前缀
浏览器样式前缀
为了让 CSS3 样式兼容, 需要将某些样式加上浏览器前缀:
-ms- 兼容 IE 浏览器
-moz- 兼容 Firefox
-o- 兼容 opera
-webkit- 兼容 Chrome 和 Safari
- div
- {
- -ms-transform: rotate(30deg);
- -webkit-transform: rotate(30deg);
- -o-transform: rotate(30deg);
- -moz-transform: rotate(30deg);
- transform: rotate(30deg);
- }
- // 本次给大家推荐一个免费的学习群, 里面概括移动应用网站开发, CSS,HTML,webpack,vue node angular 以及面试资源等.
对 Web 开发技术感兴趣的同学, 欢迎加入 Q 群: 864305860,
不管你是小白还是大牛我都欢迎, 还有大牛整理的一套高效率学习路线和教程与您免费分享, 同时每天更新视频资料.
最后, 祝大家早日学有所成, 拿到满意 offer, 快速升职加薪, 走上人生巅峰.
864305860
自动添加浏览器前缀
目前的状况是, 有些 CSS3 属性需要加前缀, 有些不需要加, 有些只需要加一部分, 这些加前缀的工作可以交给插件来完成, 比如安装: autoprefixer
可以在 Sublime text 中通过 package control 安装 autoprefixer
Autoprefixer 在 Sublime text 中的设置:
- 1,preferences/key Bindings-User
- { "keys": ["ctrl+alt+x"], "command": "autoprefixer" }
- 2,Preferences>package setting>AutoPrefixer>Setting-User
- {
- "browsers": ["last 7 versions"],
- "cascade": true,
- "remove": true
- }
last 7 versions: 最新的浏览器的 7 个版本
cascade: 缩进美化属性值
remove: 是否去掉不必要的前缀
HTML5 新增标签
新增语义标签
1,<header> 页面头部, 页眉
2,<nav> 页面导航
3,<article> 一篇文章
4,<section> 文章中的章节
5,<aside> 侧边栏
6,<footer> 页面底部, 页脚
音频视频
- ,<audio>
- ,<video>
PC 端兼容 h5 的新标签的方法, 在页面中引入以下 JS 文件:
<script type="text/javascript" src="//cdn.bootcss.com/html5shiv/r29/html5.js"></script>
HTML5 新增表单控件
新增类型: 网址 邮箱 日期 时间 星期 数量 范围 电话 颜色 搜索
- <label>
- 网址:
- </label>
- <input type="url" name="" required>
- <br>
- <br>
- <label>
- 邮箱:
- </label>
- <input type="email" name="" required>
- <br>
- <br>
- <label>
- 日期:
- </label>
- <input type="date" name="">
- <br>
- <br>
- <label>
- 时间:
- </label>
- <input type="time" name="">
- <br>
- <br>
- <label>
- 星期:
- </label>
- <input type="week" name="">
- <br>
- <br>
- <label>
- 数量:
- </label>
- <input type="number" name="">
- <br>
- <br>
- <label>
- 范围:
- </label>
- <input type="range" name="">
- <br>
- <br>
- <label>
- 电话:
- </label>
- <input type="tel" name="">
- <br>
- <br>
- <label>
- 颜色:
- </label>
- <input type="color" name="">
- <br>
- <br>
- <label>
- 搜索:
- </label>
- <input type="search" name="">
- <br>
- <br>
新增常用表单控件属性:
1,placeholder 设置文本框默认提示文字
2,autofocus 自动获得焦点
3,autocomplete 联想关键词
移动端与 PC 端页面布局区别
视口
视口是移动设备上用来显示网页的区域, 一般会比移动设备可视区域大, 宽度可能是 980px 或者 1024px, 目的是为了显示下整个为 PC 端设计的网页, 这样带来的后果是移动端会出现横向滚动条, 为了避免这种情况, 移动端会将视口缩放到移动端窗口的大小. 这样会让网页不容易观看, 可以用 meta 标签, name="viewport" 来设置视口的大小, 将视口的大小设置为和移动设备可视区一样的大小.
设置方法如下( 快捷方式: meta:vp + tab ):
- <head>
- ......
- <meta name="viewport" content="width=device-width, user-scalable=no,
- initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
- ......
- </head>
视网膜屏幕 (retina 屏幕) 清晰度解决方案
视网膜屏幕指的是屏幕的物理像素密度更高的屏幕, 物理像素可以理解为屏幕上的一个发光点, 无数发光的点组成的屏幕, 视网膜屏幕比一般屏幕的物理像素点更小, 常见有 2 倍的视网膜屏幕和 3 倍的视网膜屏幕, 2 倍的视网膜屏幕, 它的物理像素点大小是一般屏幕的 1/4,3 倍的视网膜屏幕, 它的物理像素点大小是一般屏幕的 1/9.
图像在视网膜屏幕上显示的大小和在一般屏幕上显示的大小一样, 但是由于视网膜屏幕的物理像素点比一般的屏幕小, 图像在上面好像是被放大了, 图像会变得模糊, 为了解决这个问题, 可以使用比原来大一倍的图像, 然后用 CSS 样式强制把图像的尺寸设为原来图像尺寸的大小, 就可以解决模糊的问题.
背景图强制改变大小, 可以使用 background 新属性
background 新属性
background-size:
length: 用长度值指定背景图像大小. 不允许负值.
percentage: 用百分比指定背景图像大小. 不允许负值.
auto: 背景图像的真实大小.
cover: 将背景图像等比缩放到完全覆盖容器, 背景图像有可能超出容器.
contain: 将背景图像等比缩放到宽度或高度与容器的宽度或高度相等, 背景图像始终被包含在容器内.
适配布局类型
PC 及移动端页面适配方法
设备屏幕有多种不同的分辨率, 页面适配方案有如下几种:
1, 全适配: 响应式布局 + 流体布局
2, 移动端适配:
流体布局 + 少量响应式
基于 rem 的布局
流体布局
流体布局, 就是使用百分比来设置元素的宽度, 元素的高度按实际高度写固定值, 流体布局中, 元素的边线无法用百分比, 可以使用样式中的计算函数 calc() 来设置宽度, 或者使用 box-sizing 属性将盒子设置为从边线计算盒子尺寸.
calc()
可以通过计算的方式给元素加尺寸, 比如: width:calc(25% - 4px);
box-sizing
1,content-box 默认的盒子尺寸计算方式
2,border-box 置盒子的尺寸计算方式为从边框开始, 盒子的尺寸, 边框和内填充算在盒子尺寸内
响应式布局
响应式布局就是使用媒体查询的方式, 通过查询浏览器宽度, 不同的宽度应用不同的样式块, 每个样式块对应的是该宽度下的布局方式, 从而实现响应式布局. 响应式布局的页面可以适配多种终端屏幕(pc, 平板, 手机).
- @media (max-width:960px){
- .left_con{width:58%;}
- .right_con{width:38%;}
- }
- @media (max-width:768px){
- .left_con{width:100%;}
- .right_con{width:100%;}
- }
基于 rem 的布局
首先了解 em 单位, em 单位是参照元素自身的文字大小来设置尺寸, rem 指的是参照根节点的文字大小, 根节点指的是 HTML 标签, 设置 HTML 标签的文字大小, 其他的元素相关尺寸设置用 rem, 这样, 所有元素都有了统一的参照标准, 改变 HTML 文字的大小, 就会改变所有元素用 rem 设置的尺寸大小.
cssrem 安装
cssrem 插件可以动态地将 px 尺寸换算成 rem 尺寸
下载本项目, 比如: Git clone https://github.com/flashlizi/cssrem 进入 packages 目录: Sublime Text -> Preferences -> Browse Packages... 复制下载的 cssrem 目录到刚才的 packges 目录里. 重启 Sublime Text.
配置参数 参数配置文件: Sublime Text -> Preferences -> Package Settings -> cssrem px_to_rem - px 转 rem 的单位比例, 默认为 40. max_rem_fraction_length - px 转 rem 的小数部分的最大长度. 默认为 6. available_file_types - 启用此插件的文件类型. 默认为:[".css", ".less", ".sass"].
来源: http://www.qdfuns.com/article/51117/1d558e443d3fc8899846faa5b3cf8765.html