likes
comments
collection
share

百度界面常考题:手风琴效果实现

作者站长头像
站长
· 阅读数 40

本文将引导你了解如何利用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
评论
请登录