显然顶边栏比较好做,且首页和文档页都需要它,那让我们先做好顶边栏
初始化
首先,在 components
文件夹下,新建一个 vue 组件,就叫 Topnav.vue
吧,然后打板
1 | <template> |
建议使用 scss 书写所有 css,下略
以后所有 vue 组件,无特殊说明的话,均沿用此初始化模板,下略
页面结构
分析顶边栏的结构,显然,有以下成分
成分 | 位置 | 默认 | 小于 500px |
---|---|---|---|
首页跳转入口 | 左侧 | 可见 | 居中 |
文档页跳转入口 | 右侧 | 可见 | 不可见 |
展开菜单按键 | 左侧 | 不可见 | 可见 |
容易得到以下页面结构
1 | <template> |
但是,未来有可能变更需求,在右侧出现不只一个文档页跳转入口,所以应该做一个列表,以备未来扩展
1 | <template> |
功能
先分析需要的控制元素
显然,顶边栏中的弹出菜单按键,可以在引入它的组件中,被设置是否可见,那么应当有一个 Boolean 类型的变量来控制可见
且需要提供一个方法,控制菜单本体是否可见
但是,现在又犯难了——菜单本体是属于文档页的,而不是属于顶边栏的。如何跨组件控制呢?
回顾需求分析可得,通过弹出菜单按键,以及视口宽度,共同控制菜单是否可见
其中,视口宽度显然是一个全局属性,那么理应在 App.vue
中控制
于是我们在 App.vue
中定义其是否可见,并通过 provide/inject
API 暴露给子组件
1 | // App.vue script |
初始化时根据视口宽度决定顶边栏的弹出菜单按键是否可见,并监听视口大小变化,根据视口宽度自动更新控制变量
然后编写 Topnav.vue
1 | // Topnav.vue script |
注意,此处的 inject
需要注明变量的类型。因为 menuVisible
声明的时候是 ref(true|false)
,所以其类型为 Ref<boolean>
将暴露出的变量引回模板,同时再贴个图美化一下
1 | <template> |
样式表
此处为了美观,选用线性渐变来做到下边一条分割线的效果
1 | $color: #fe9acf; |
引入 App.vue
看看效果
1 | <template> |
效果图
感谢阅读