百度界面常考题:手风琴效果实现
本文将引导你了解如何利用HTML、CSS(通过Stylus预处理器)实现一个基本的手风琴效果,并简要介绍Stylus这一强大的CSS预处理器的特点及使用方法。在编译css的时候能达到快速编译的代码,接下来让我们来看看吧!
HTML结构设计
手风琴效果通常用于展示可展开和收起的内容块,这里我们简化为一个颜色切换的示例。HTML部分非常简单,我们使用无序列表<ul>
来构建基础框架,每个列表项<li>
代表手风琴的一个“格子”。
<ul class="according">
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
<li>6</li>
</ul>
就会在浏览器中出现如下图一样的列表,之后就需要添加css样式了。
Stylus与CSS编写
什么是Stylus
Stylus是一个动态的、有强大功能的CSS预处理器,它扩展了CSS语言,提供了变量、嵌套规则、运算符、函数等高级功能,使得编写CSS更加高效、简洁且富有表现力。
Stylus的特点包括但不限于:
- 简洁语法:去除大括号
{}
、分号;
,使用缩进代替。 - 模块性:支持导入、混入、继承等编程的特性,增强代码复用。
- 动态特性:支持变量、运算符、控制流语句,让CSS像编程语言一样灵活。
安装与使用
安装Stylus,通常需要Node.js环境。通过npm(Node包管理器)进行安装,在集成终端中输入以下的命令,就可以安装Stylus文件:
npm install -g stylus
然后在扩展中装一下插件,这样就可以在你编译代码的时候可以快速地补全:
手风琴效果的Stylus样式
下面是Stylus编写的样式代码,实现了当鼠标悬停在列表项上时,该列表项变宽并显示白色背景色,同时其他项保持原状的效果,模拟了简单的手风琴动画。
*
margin 0
padding 0
box-sizing border-box
ul, li
list-style none
.according
display flex
width 600px
height 200px
li
flex 1
cursor pointer
line-height 200px
text-align center
color transparent
transition flex 0.5s
&:nth-child(1) { background-color #f66 }
&:nth-child(2) { background-color #66f }
&:nth-child(3) { background-color #f90 }
&:nth-child(4) { background-color #09f }
&:nth-child(5) { background-color #9c3 }
&:nth-child(6) { background-color #3c9 }
&:hover
flex 2
background-color white
编译Stylus为CSS
将Stylus文件转换为浏览器可识别的CSS文件,可以使用命令行工具:
stylus common.styl -o common.css
若想在开发过程中自动监听文件变动并重新编译,可以加上-w
(watch)选项:
stylus -w common.styl -o common.css
注意:以上都是在集成终端中输入的
这样设置完后,我们的目录下就会自动创建一个common.css
文件,然后你在common.styl
文件中输入的代码,会自动编译成css代码,并且自动同步到common.css
文件中。
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
ul,
li {
list-style: none;
}
.according {
display: flex;
width: 600px;
height: 200px;
}
.according li {
flex: 1;
cursor: pointer;
line-height: 200px;
text-align: center;
color: transparent;
transition: flex 0.5s;
}
.according li:nth-child(1) {
background-color: #f66;
}
.according li:nth-child(2) {
background-color: #66f;
}
.according li:nth-child(3) {
background-color: #f90;
}
.according li:nth-child(4) {
background-color: #09f;
}
.according li:nth-child(5) {
background-color: #9c3;
}
.according li:nth-child(6) {
background-color: #3c9;
}
.according li:hover {
flex: 2;
background-color: #fff;
}
成品展示
特点解析
- 盒模型:在全局中使用
box-sizing: border-box
改变了元素盒模型的计算方式,此时,元素的宽度和高度包括内容区域、内边距和边框的总和,但不包括外边距。这意味着如果你指定了一个元素的宽度为100px,并且设置了内边距和边框,这100px将会是元素的总宽度,而不会因为内边距和边框的添加而额外增大。 - 弹性布局(Flexbox) :
.according
使用display: flex;
创建弹性容器,使得所有<li>
元素在一行内均匀分布。 - 过渡效果:通过
transition
属性给li
元素添加了过渡效果,使得宽度变化时平滑过渡。 - 伪类选择器
:hover
:当鼠标悬停在列表项上时,通过改变flex
值和背景色,实现动态效果。
盒模型简介
在CSS中,每个元素都可以被视为一个盒子,它由以下几个部分组成:
- 内容区域(content) :实际放置文本、图片等元素的地方。
- 内边距(padding) :围绕在内容区域外侧的空白区域。
- 边框(border) :围绕内边距和内容区域的线。
- 外边距(margin) :盒子与其他元素之间的空间。
默认情况下,box-sizing
的默认值是content-box
,因为大多数浏览器采用的是content-box
盒模型。在这种模型下,元素的宽度和高度只包括内容区域的大小,边框和内边距是额外添加在内容宽度和高度之外的。这意味着当你设置一个元素的宽度和高度时,实际上得到的可视区域会更小,因为边框和内边距会增加总尺寸。
总结
通过上述步骤,我们不仅实现了一个简单的手风琴效果,还初步了解了Stylus这一CSS预处理器的强大功能。Stylus以其简洁的语法、强大的编程特性和模块化设计,极大地提升了前端开发者的编码效率和CSS代码的可维护性。掌握Stylus,可以让你的样式编写更加高效、灵活,为你的项目增添更多可能性。
转载自:https://juejin.cn/post/7378440102786203659