前端每日3+1(20230616)

文章讨论了前端开发中link与@import导入CSS的差异,包括兼容性、加载时机和JavaScript控制支持。同时,解释了圣杯布局和双飞翼布局的原理和实现代码,这两种布局方式用于解决三栏结构的自适应问题。最后,介绍了一个使用递归生成不重复随机数数组的JavaScript函数,限制数组长度为5,数值范围在2-32之间。
摘要由CSDN通过智能技术生成

前端每日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);

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值