前端每日3+1
1. [html] 页面导入样式时,使用link和@import有什么区别?
1.1 来源于兼容性:
link 是xhtml标签, 来源于 html, 除了加载css外, 还可以定义RSS等其他事物; 无浏览器兼容问题;
@import 属于CSS范畴, 只能加载CSS; 且为CSS2.1提出, 低版本的浏览器不支持;
1.2 加载时机:
link 引入CSS时, 在页面载入时同时加载;
@import 需要页面网页完全载入以后加载, 会出现一开始没有css样式, 闪烁一下出现样式后的页面情况(网速慢的情况下);
1.3 js控制支持:
link 支持使用js控制DOM去改变样式;
@import 不支持;
2. [css] 圣杯布局和双飞翼布局的理解和区别,并用代码实现
2.1 理解:
圣杯布局和双飞翼布局解决的问题是一样的,就是两边固定宽,中间自适应的三栏布局,中间栏要在放在文档流前面以优先渲染。
2.2 区别:
圣杯布局,为了中间div内容不被遮挡,将中间div设置了左右padding-left和padding-right后,将左右两个div用相对布局position: relative并分别配合right和left属性,以便左右两栏div移动后不遮挡中间div。
双飞翼布局,为了中间div内容不被遮挡,直接在中间div内部创建子div用于放置内容,在该子div里用margin-left和margin-right为左右两栏div留出位置。
2.3 实现:
// 圣杯布局
<body>
<div id="hd">header</div>
<div id="bd">
<div id="middle">middle</div>
<div id="left">left</div>
<div id="right">right</div>
</div>
<div id="footer">footer</div>
</body>
<style>
#hd{
height:50px;
background: #666;
text-align: center;
}
#bd{
/*左右栏通过添加负的margin放到正确的位置了,此段代码是为了摆正中间栏的位置*/
padding:0 200px 0 180px;
height:100px;
}
#middle{
float:left;
width:100%;/*左栏上去到第一行*/
height:100px;
background:blue;
}
#left{
float:left;
width:180px;
height:100px;
margin-left:-100%;
background:#0c9;
/*中间栏的位置摆正之后,左栏的位置也相应右移,通过相对定位的left恢复到正确位置*/
position:relative;
left:-180px;
}
#right{
float:left;
width:200px;
height:100px;
margin-left:-200px;
background:#0c9;
/*中间栏的位置摆正之后,右栏的位置也相应左移,通过相对定位的right恢复到正确位置*/
position:relative;
right:-200px;
}
#footer{
height:50px;
background: #666;
text-align: center;
}
</style>
// 双飞翼布局
<body>
<div id="hd">header</div>
<div id="middle">
<div id="inside">middle</div>
</div>
<div id="left">left</div>
<div id="right">right</div>
<div id="footer">footer</div>
</body>
<style>
#hd{
height:50px;
background: #666;
text-align: center;
}
#middle{
float:left;
width:100%;/*左栏上去到第一行*/
height:100px;
background:blue;
}
#left{
float:left;
width:180px;
height:100px;
margin-left:-100%;
background:#0c9;
}
#right{
float:left;
width:200px;
height:100px;
margin-left:-200px;
background:#0c9;
}
/*给内部div添加margin,把内容放到中间栏,其实整个背景还是100%*/
#inside{
margin:0 200px 0 180px;
height:100px;
}
#footer{
clear:both; /*记得清楚浮动*/
height:50px;
background: #666;
text-align: center;
}
</style>
3. [js] 用递归算法实现,数组长度为5且元素的随机数在2-32间不重复的值
3.1 描述:这是一道大题目,把考点拆成了4个小项;需要侯选人用递归算法实现(限制15行代码以内实现;限制时间10分钟内完成):
a) 生成一个长度为5的空数组arr。
b) 生成一个(2-32)之间的随机整数rand。
c) 把随机数rand插入到数组arr内,如果数组arr内已存在与rand相同的数字,则重新生成随机数rand并插入到arr内[需要使用递归实现,不能使用for/while等循环]
d) 最终输出一个长度为5,且内容不重复的数组arr。
let num = 5;
let arr = [];
function getRandomNum () {
return Math.floor(Math.random() * 30) + 2; // 生成2-32随机数
};
function checkRamdom(length = 0) {
if (arr.length >= length) {
return arr
} else {
let num = getRandomNum();
if (arr.includes(num)) {
checkRamdom(length);
} else {
arr.push(num);
checkRamdom(length);
}
}
}
checkRamdom(num);
console.log(arr);