文资料来源于
https://github.com/qiu-deqing/FE-interview
目前已在github获得4700个star,在前端知识项目中名列第一。
上一篇主要分享了该项目中的HTML, HTTP,web综合问题部分。
本文主要分享该项目中的CSS部分的知识点及面试题部分,后续分享剩余5个章节。
欢迎关注笔者,优质文章都在这里等你。
概念:将多个小图片拼接到一个图片中。通过background-position和元素尺寸调节需要显示的背景图案。
优点:
缺点:
联系:它们都能让元素不可见
区别:
原理:利用不同浏览器对CSS的支持和解析结果不一样编写针对特定浏览器样式。常见的hack有1)属性hack。2)选择器hack。3)IE条件注释
<!--[if IE 6]> Special instructions for IE 6 here <![endif]-->
/***** Selector Hacks ******/
/* IE6 and below */
* html #uno { color: red }
/* IE7 */
*:first-child+html #dos { color: red }
/* IE7, FF, Saf, Opera */
html>body #tres { color: red }
/* IE8, FF, Saf, Opera (Everything but IE 6,7) */
html>/**/body #cuatro { color: red }
/* Opera 9.27 and below, safari 2 */
html:first-child #cinco { color: red }
/* Safari 2-3 */
html[xmlns*=""] body:last-child #seis { color: red }
/* safari 3+, chrome 1+, opera9+, ff 3.5+ */
body:nth-of-type(1) #siete { color: red }
/* safari 3+, chrome 1+, opera9+, ff 3.5+ */
body:first-of-type #ocho { color: red }
/* saf3+, chrome1+ */
@media screen and (-webkit-min-device-pixel-ratio:0) {
#diez { color: red }
}
/* iPhone / mobile webkit */
@media screen and (max-device-width: 480px) {
#veintiseis { color: red }
}
/* Safari 2 - 3.1 */
html[xmlns*=""]:root #trece { color: red }
/* Safari 2 - 3.1, Opera 9.25 */
*|html[xmlns*=""] #catorce { color: red }
/* Everything but IE6-8 */
:root *> #quince { color: red }
/* IE7 */
*+html #dieciocho { color: red }
/* Firefox only. 1+ */
#veinticuatro, x:-moz-any-link { color: red }
/* Firefox 3.0+ */
#veinticinco, x:-moz-any-link, x:default { color: red }
/* IE6 */
#once { _color: blue }
/* IE6, IE7 */
#doce { *color: blue; /* or #color: blue */ }
/* Everything but IE6 */
#diecisiete { color/**/: blue }
/* IE6, IE7, IE8 */
#diecinueve { color: blue\9; }
/* IE7, IE8 */
#veinte { color/*\**/: blue\9; }
/* IE6, IE7 -- acts as an !important */
#veintesiete { color: blue !ie; } /* string after ! can be anything */
specified value,computed value,used value计算方法
link与@import的区别
参考资料: 选择正确的图片格式 GIF:
JPEG:
PNG:
CSS有哪些继承属性
.target {
min-height: 100px;
height: auto !important;
height: 100px; // IE6下内容高度超过会自动扩展高度
}
<style type="text/css">
.outer {
width: 215px;
height: 100px;
border: 1px solid red;
overflow: auto;
position: relative; /* 修复bug */
}
.inner {
width: 100px;
height: 200px;
background-color: purple;
position: relative;
}
</style>
<div class="outer">
<div class="inner"></div>
</div>
<style type="text/css">
.p:hover,
.hover {
background: purple;
}
</style>
<p class="p" id="target">aaaa bbbbb<span>DDDDDDDDDDDd</span> aaaa lkjlkjdf j</p>
<script type="text/javascript">
function addClass(elem, cls) {
if (elem.className) {
elem.className += ' ' + cls;
} else {
elem.className = cls;
}
}
function removeClass(elem, cls) {
var className = ' ' + elem.className + ' ';
var reg = new RegExp(' +' + cls + ' +', 'g');
elem.className = className.replace(reg, ' ').replace(/^ +| +$/, '');
}
var target = document.getElementById('target');
if (target.attachEvent) {
target.attachEvent('onmouseenter', function () {
addClass(target, 'hover');
});
target.attachEvent('onmouseleave', function () {
removeClass(target, 'hover');
})
}
</script>
.opacity {
opacity: 0.4
filter: alpha(opacity=60); /* for IE5-7 */
-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=60)"; /* for IE 8*/
}
display: inline-block; *display: inline; *zoom: 1;
容器包含若干浮动元素时如何清理(包含)浮动
/**
* 在标准浏览器下使用
* 1 content内容为空格用于修复opera下文档中出现
* contenteditable属性时在清理浮动元素上下的空白
* 2 使用display使用table而不是block:可以防止容器和
* 子元素top-margin折叠,这样能使清理效果与BFC,IE6/7
* zoom: 1;一致
**/
.clearfix:before,
.clearfix:after {
content: " "; /* 1 */
display: table; /* 2 */
}
.clearfix:after {
clear: both;
}
/**
* IE 6/7下使用
* 通过触发hasLayout实现包含浮动
**/
.clearfix {
*zoom: 1;
}
Flash Of Unstyled Content:用户定义样式表加载之前浏览器使用默认样式显示文档,用户样式加载渲染之后再从新显示文档,造成页面闪烁。解决方法:把样式表放到文档的head
如何创建块级格式化上下文(block formatting context),BFC有什么用
创建规则:
作用:
外边距折叠(collapsing margins)
毗邻的两个或多个margin会合并成一个margin,叫做外边距折叠。规则如下:
如何确定一个元素的包含块(containing block)
z轴上的默认层叠顺序如下(从下到上):
如何创建stacking context:
<body>
<div class="content">
aaaaaa aaaaaa a a a a a a a a
</div>
</body>
<style>
body {
background: #DDD;
text-align: center; /* 3 */
}
.content {
width: 500px; /* 1 */
text-align: left; /* 3 */
margin: 0 auto; /* 2 */
background: purple;
}
</style>
<body>
<div class="content">
aaaaaa aaaaaa a a a a a a a a
</div>
</body>
<style>
body {
background: #DDD;
}
.content {
width: 500px; /* 1 */
float: left;
position: relative; /* 2 */
left: 50%; /* 3 */
margin-left: -250px; /* 4 */
background-color: purple;
}
</style>
<body>
<div class="content">
aaaaaa aaaaaa a a a a a a a a
</div>
</body>
<style>
body {
background: #DDD;
position: relative;
}
.content {
width: 800px;
position: absolute;
left: 50%;
margin-left: -400px;
background-color: purple;
}
</style>
<body>
<div class="content">
aaaaaa aaaaaa a a a a a a a a
</div>
</body>
<style>
body {
background: #DDD;
position: relative;
}
.content {
width: 800px;
position: absolute;
margin: 0 auto;
left: 0;
right: 0;
background-color: purple;
}
</style>
如何竖直居中一个元素
参考资料:6 Methods For Vertical Centering With CSS。 盘点8种CSS实现垂直居中
<p class="text">center text</p>
<style>
.text {
line-height: 200px;
}
</style>
对大厂架构设计,BAT等厂家面试题解读,编程语言理论或者互联网圈逸闻趣事这些感兴趣,欢迎关注笔者,没有错,干货文章都在这里。
function fn1() {
setTimeout(() => {
console.log('fn1执行')
fn2('fn1传递过去的参数')
}, 1000)
}
function fn2(data) {
setTimeout(() => {
console.log('fn2执行', data)
fn3('fn2传递过去的参数')
}, 1000)
}
function fn3(data) {
setTimeout(() => {
console.log('fn3执行', data)
}, 1000)
}
fn1()执行结果如下:
我们发现这种方式虽然能实现,但是代码量一旦变多,可读性就降低了。
function fn1() {
return new Promise((resolve, reject) => {
console.log('fn1执行')
setTimeout(() => {
console.log('fn1结束')
resolve('fn1传递过去的参数')
}, 1000)
})
}
function fn2(data) {
return new Promise((resolve, reject) => {
console.log('fn2执行,接收的参数', data)
setTimeout(() => {
resolve('fn2传递过去的参数')
}, 1000)
})
}
function fn3(data) {
return new Promise((resolve, reject) => {
console.log('fn3执行,接收的参数', data)
setTimeout(() => {
resolve('fn3传递过去的参数')
}, 1000)
})
}
fn1().then(fn2).then(fn3).then(res => {
console.log('最后一个', res)
})生成器就是能返回一个迭代器的函数,它也是一个函数,对比普通的函数,多了一个*,在它的函数体内可以使用yield关键字,函数会在每个yield后暂停,等待,直到这个生成的对象,调用下一个next(),每调用一次next会往下执行一次yieId,然后暂停。
、下面关于WEB开发中,常见的技术和问题描述正确的是:(多选)
A、CSS selector中,支持按照元素的id选择,元素的名称进行选择,元素的class属性进行选择,比如 “#div .red”就是选择CSS class属性中包括red的所有的div元素B、JSON是一种以JavaScript语法表示的数据对象格式,比如描述一个学生,包括,其中,姓名,年龄就可以这样表达 {name: "John", age: 18}C、HTML页面中的第一个指令: 表明这是一个符合HTML5标准的页面D、不同的浏览器对HTML渲染的方式稍有差异,但是所有的主流浏览器都支持JavaScript语言,而且提供的JavaScript的编程环境都是一致的E、HTML页面装载时,首先把整个HTML页面下载下来,再根据HTML中出现的顺序依次下载它引用的外部的JavaScript代码和图片资源,最后才执行页面中的JavaScript代码F、JavaScript中的函数就是一个对象,每个函数对象都继承了JavaScript的Function类正确答案: C
解析:
A.“#div .red”就是选择CSS class属性中包括red的所有Id为div元素
B.{"name": "John", "age": 18},json数据中的键都需要添加""(双引号)
D.不同浏览器提供的编程环境不一致(包括html、css、js编程的不一致),所以在编程时才要使用 -ms、-webkit、-moz来实现不同浏览器的兼容性(解决css编程不一致)
E.JS文件按在HTML中引入的顺序依次载入(不是最后载入),在载入后马上执行,执行时会阻塞页面后续的内容(包括页面的渲染、其它资源的下载)
F.箭头函数没有super关键字,所以箭头函数没有继承任何对象,也就不可能继承Function类。
2、以下描述正确的是:(多选)
A、`inline-block` 可以设置高度,`inline` 不可以设置高度B、`inline-block` 和 `inline` 都可以设置 `padding-left`C、`inline-block` 可以设置 `margin-left`,inline 不可以D、`block` 会独占一行,`inline-block` 不会正确答案: A、B、D
解析:
行内元素不可以设置元素宽高,但是可以设置 左右padding、左右margin
img、input属于行内替换元素。height/width/padding/margin均可用。效果等于块元素
3、对于以下 HTML,下列选项中哪一个 CSS 选择器效果与其他的不同:
```html
<p><span>A</span><span>B</span><span>C</span></p>
```
A、`span:first-child`B、`span:nth-child(0)`C、`span:nth-child(-n+1)`D、`span:nth-last-child(3)`正确答案: B
解析:
:nth-child(-n+4)选取小于等于4标签, nth-child最小从1开始
4、input 元素中,下列哪个类型属性定义了输入电话号码的控件?
A、mobB、telC、mobileD、telephone正确答案: B
5、以下选项中,哪些是html5 input的新属性(多选)
A、fileB、searchC、numberD、resetE、tel正确答案: B、C、E
解析:
在HTML5中,为input元素新增了以下一些type属性值:
*请认真填写需求信息,我们会在24小时内与您取得联系。