Flex实现下拉菜单

有这么一个导航栏:

图1 大屏幕下的导航栏

在大屏幕上,我们需要将导航栏内的所有菜单都显示出来,但是,当我们的屏幕小于某个值时,我们需要导航栏展示响应成下拉菜单如下:

图2 小屏幕下的导航栏

这个收起的导航栏,需要达到:

1. 当前项【统计】显示
2. 其他项隐藏

当我们鼠标【PC端】或者点击【手机端】统计,我们需要得到一个下拉菜单,效果如下:

图3 下拉导航栏

其实,这就是一个响应式设计,细心的朋友会发现,小屏幕下的导航栏实际上有这么个特点:

1. 当前项【统计】处于列表最顶部
2. 非当前页项,按原大屏幕的顺序依次向下排列
3.当前项【统计】并不在下拉菜单中

这个效果实际上,跟简书的编辑器中的如下是一样的:


图4 简书标题组件
图5 简书标题组件下拉

而简书的实现方式,完全是JS操作,它的HTML结构是这样的:

图6 简书标题组件HTML结构

可以看到,实际上显示的当前项和下拉的当前项,是不同的,同时,实际上,它的HTML结构,是随着当前项的不同而改变的,也就是说,ul.submenu下的li是变化的,这都是通过JS处理的。

在支持CSS3的浏览器下,我们能否只使用JS为当前项增加class的情况下,就实现这种功能呢?也就是,我们的初始化HMTL结构是这样的:

<ul>
  <li><a href="/home">首页</a>
  <li><a href="/show">展示</a></li>
  <li><a href="/statistic">统计</a></li>
  <li><a href="/setting">设置</a></li>
  <li><a href="/about">关于</a></li>
</ul>

当我们点击【统计】,为【统计】项增加class——"active",我们的HTML结构是这样的:

<ul>
  <li><a href="/home">首页</a>
  <li><a href="/show">展示</a></li>
  <li class="active"><a href="/statistic">统计</a></li>
  <li><a href="/setting">设置</a></li>
  <li><a href="/about">关于</a></li>
</ul>

只是增加一个class,便实现图3/图5的效果。

没有HTML结构的变化,没有多余的HTML结构【图6中的第一个红色框】,使用CSS3,便能实现这样的效果。

所有的这些,只需要使用flex布局即可。

很多人都用过flex,但是,大部分人可能并没有完成使用过flex中其他功能,比如:flex-direction,order。

而要实现上述的功能,其实就是基于这两个功能。

flex-direction:适用于flex容器,取值row | row-reverse | column | column-reverse,分别表示:行方向 | 行逆方向 | 列方向 | 列逆方向,通常来说就是:从左到右 | 从右往左 | 从上到下 | 从下往上。

order:适用于flex子项和flex容器中的绝对定位子元素,用整数值来定义排列顺序,数值小的排在前面。可以为负值。

这样,事情就变得很简单了。我们只需要做两件事情:

1. 设置ul display: flex,同时,flex-direction: column
2. 对class="active",添加一条:order: -1;

详细见demo:Flex实现下拉菜单

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 14,333评论 4 61
  • 移动开发基本知识点 一.使用rem作为单位 html { font-size: 100px; } @media(m...
    横冲直撞666阅读 8,901评论 0 6
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,900评论 25 709
  • 前几天晚上一个社团的同学找我,除了社团的事情,这是她第三次找我,第一次是找我借东西,第二次是找我帮她看电脑,她的电...
    最难是把自己驯服呀阅读 2,695评论 2 0
  • 01 小仙的寝室只有三个人。 有一天,她突然跟我说,我的室友C姑娘已经一天没跟我们说话了。 我不假思索地回道,是不...
    楚楚待撩阅读 3,853评论 6 12