弹性布局解决百度面试题流动钢琴块,用Stylus进行CSS的编译
先上流动钢琴块效果图
效果描述: 当鼠标移动至任意一块钢琴块上时,该块会缓慢变大
构思为六个盒子,不过是横在一个大盒子中排列
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>手风琴</title>
<link rel="stylesheet" href="common.css">
</head>
<body>
<ui class="accordion">
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
<li>6</li>
</ui>
</body>
</html>
介绍Stylus
从前端新手迈向老油条,学会使用Stylus进行对CSS的编译
Stylus可以被认为是CSS的超集,作为一个CSS预处理器, Stylus扩展了CSS的语法,它编译后的输出是标准的CSS,因此可以在任何支持CSS的环境中运行。开发者可以通过编译工具(如Gulp、Webpack等)将Stylus源文件转换为浏览器可识别的CSS文件。
.accordion
display flex
li
flex 1
&:nth-child(1)
background-color #f66
.accordion {
display: flex;
}
.accordion li {
flex: 1;
}
.accordion li:nth-child(1) {
background-color: #f66;
}
上面两段代码是同等效果,styl
终端输入stylus common.styl -o common.css output
便会得到CSS
代码,为了更加便捷输入stylus -w common.styl -o common.css output
便可以一直监听(即点击保存后自动生成CSS
)
可以得到总结
- stylus 属于 css 超集,支持预编译,但最后使用的依然是编译后的css文件
- 省事 {} : ; 都不需要了,取而代之的是tab缩进
- 省事还体现在,选择器也可以缩进, 自动加上限定前缀, 既缩进,又表示是同一级别,& :checked :nth-child
- 模块性 stylus 给css 引入了编程特性,一个一个模块化(即
.accordion
作为一个大块)
设置大盒子的box弹性布局
*
margin 0
padding 0
box-sizing border-box
ul,li
list-style none//取消默认设置的圆点
.accordion
display flex
width 600px
height 200px
- 当设置
box-sizing: border-box;
时,元素的宽度和高度将包括内容、内边距和边框。这意味着如果你设置width: 100px
,元素的总宽度(内容+padding+border)将不会超过这个值。 display flex
开启Flex布局:此属性使得元素成为Flex容器,改变了元素内部子元素的布局方式,从常规流布局(block或inline)变为Flex布局。
设置六个小盒子的样式和效果
.accordion
display flex
width 600px
height 200px
li
flex 1
cursor pointer
line-height 200px
text-align center
color white
transition flex 500ms// 过渡效果
&:nth-child(1)
background-color #f66// &表示引用上级别,伪类选择器,用于选择父元素的第n个子元素
&:nth-child(2)
background-color #6f6
&:nth-child(3)
background-color #66f
&:nth-child(4)
background-color rgb(198, 39, 203)
&:nth-child(5)
background-color rgb(178, 211, 47)
&:nth-child(6)
background-color rgb(27, 144, 228)
&:hover
flex 2//伪类: 当鼠标悬停在元素上时,应用以下样式:flex 2:将元素的flex属性值改为2。这意味着在鼠标悬停时,这个元素将获得两倍于其他元素的额外空间,从而可能在弹性布局中扩大其尺寸。
&表示引用上级别,伪类选择器,用于选择父元素的第n个子元素
- 实现钢琴块会变大的效果:
&:hover
flex 2
创建伪类: 当鼠标悬停在元素上时,应用以下样式:flex 2:将元素的flex属性值改为2。这意味着在鼠标悬停时,这个元素将获得两倍于其他元素的额外空间,从而可能在弹性布局中扩大其尺寸。
(相当于在原有的六个盒子基础上增加至七个盒子共同瓜分大盒子,而鼠标悬停的元素独占两个盒子)
-
添加鼠标悬停、缓慢变大的效果
-
在小盒子样式添加
transition flex 500ms
的过渡效果 -
cursor pointer
是用来设置元素的鼠标指针样式的
-
最后输入了stylus common.styl -o common.css output
得到CSS
代码
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
ul,
li {
list-style: none;
}
.accordion {
display: flex;
width: 600px;
height: 200px;
}
.accordion li {
flex: 1;
cursor: pointer;
line-height: 200px;
text-align: center;
color: #fff;
transition: flex 500ms;
}
.accordion li:nth-child(1) {
background-color: #f66;
}
.accordion li:nth-child(2) {
background-color: #6f6;
}
.accordion li:nth-child(3) {
background-color: #66f;
}
.accordion li:nth-child(4) {
background-color: #c627cb;
}
.accordion li:nth-child(5) {
background-color: #b2d32f;
}
.accordion li:nth-child(6) {
background-color: #1b90e4;
}
.accordion li:hover {
flex: 2;
}
实现效果
总结
Stylus扩展了CSS的语法,它编译后的输出是标准的CSS,因此可以在任何支持CSS的环境中运行。开发者可以通过编译工具(如Gulp、Webpack等)将Stylus源文件转换为浏览器可识别的CSS文件。
学会使用Stylus实在是泰方便辣,可以快速编译,可以打很多注释,可以减少因为符号带来的报错哈哈哈哈哈
转载自:https://juejin.cn/post/7374683456728645686