UI 框架-首页

顶边栏完成了,现在先把首页做好


让我们先新建一个 src/views 文件夹,用来存放官网的主要视图

然后在该文件夹下新建两个 vue 文件,作为我们的视图

  • Home.vue,首页
  • Document.vue,文档页

再配置一下 router.ts 来实现跳转

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// router.ts
import { createWebHistory, createRouter } from 'vue-router'
import Home from './views/Home.vue'
import Document from './views/Document.vue'

const history = createWebHistory()
const router = createRouter({
history,
routes: [
{ path: '/', component: Home },
{ path: '/document', component: Document },
]
})
export default router

骨架

先搭建一下首页的骨架

已知首页要显示

  1. 顶边栏
  2. 极光背景
    • 两个跳转链接
  3. 三点特性

首先是极光背景,非常简单,用渐变色+转向当作背景色就可以了

然后三点特性,显然是无序列表

那么可以得到如下骨架

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<template>
<div>
<Topnav />
<div class="banner">
<a href="https://github.com/Ringoer/laby-ui"> Github </a>
<router-link to="/document"> 文档页 </router-link>
</div>
<div class="features">
<ul>
<li>特性1</li>
<li>特性2</li>
<li>特性3</li>
</ul>
</div>
</div>
</template>

基本功能

然后在 script 中引入顶边栏

1
2
3
4
5
6
import Topnav from "../components/Topnav.vue";
export default {
components: {
Topnav,
},
};

最后制作一下极光的样式表

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
$color: white;
.banner {
background: linear-gradient(
145deg,
rgb(254, 242, 246) 0%,
rgb(252, 208, 215) 30%,
rgb(243, 140, 159) 70%,
rgb(243, 103, 142) 100%
);
clip-path: ellipse(80% 60% at 50% 40%);
color: $color;
padding-top: 120px;
padding-bottom: 20px;
display: flex;
justify-content: center;
align-items: center;
flex-direction: column;
> * {
margin: 12px 0;
}
> .actions {
padding: 8px 0;
a {
margin: 0 8px;
display: inline-block;
padding: 8px 24px;
&:hover {
text-decoration: none;
}
text-align: center;
}
}
}

运行一下,得到了如下的效果

效果图

改进首页

那显然,特性应该单独占据一行,并且在宽度足够的时候横向排列

两个链接也最好横向排列,而且最好各自有点介绍

那么先修改模板

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<template>
<div>
<Topnav />
<div class="banner">
<h1>Laby UI</h1>
<h2>Ringoer 的练习用 UI 框架</h2>
<div class="actions">
<a href="https://github.com/Ringoer/laby-ui"> Github </a>
<router-link to="/document"> 文档页 </router-link>
</div>
</div>
<div class="features">
<ul>
<li>
<h3>基于 Vue 3</h3>
<p>使用了 Vue 3 全新特性</p>
</li>
<li>
<h3>基于 TypeScript</h3>
<p>源代码采用 TypeScript 书写</p>
</li>
<li>
<h3>具有亲和力的代码</h3>
<p>新手也能轻松阅读的源代码</p>
</li>
</ul>
</div>
</div>
</template>

然后补全样式表

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
$theme-color: #fe9acf;
$border-radius: 4px;
$color: white;
.banner {
background: linear-gradient(
145deg,
rgb(254, 242, 246) 0%,
rgb(252, 208, 215) 30%,
rgb(243, 140, 159) 70%,
rgb(243, 103, 142) 100%
);
clip-path: ellipse(80% 60% at 50% 40%);
color: $color;
padding-top: 120px;
padding-bottom: 20px;
display: flex;
justify-content: center;
align-items: center;
flex-direction: column;
> * {
margin: 12px 0;
}
> .actions {
padding: 8px 0;
a {
margin: 0 8px;
display: inline-block;
padding: 8px 24px;
&:hover {
text-decoration: none;
}
text-align: center;
}
}
}
.features {
margin: 64px auto;
padding: 0 16px;
@media (min-width: 800px) {
width: 800px;
> ul {
> li {
width: 50%;
}
}
}
@media (min-width: 1200px) {
width: 1200px;
> ul {
> li {
width: 33.3333%;
}
}
}
@media (max-width: 800px) {
> ul {
flex-direction: column;
align-items: center;
}
}
> ul {
display: flex;
flex-wrap: wrap;
> li {
margin: 16px 0;
display: grid;
justify-content: center;
align-content: space-between;
grid-template-areas:
"icon title"
"icon text";
grid-template-columns: 80px auto;
grid-template-rows: 1fr auto;
> h3 {
grid-area: title;
font-size: 28px;
}
> p {
grid-area: text;
}
}
}
}

得到如下效果

效果图

svg

特性也太光秃秃了,加个 svg

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<div class="features">
<ul>
<li>
<svg>
<use xlink:href="#icon-Vue"></use>
</svg>
<h3>基于 Vue 3</h3>
<p>使用了 Vue 3 全新特性</p>
</li>
<li>
<svg>
<use xlink:href="#icon-ts"></use>
</svg>
<h3>基于 TypeScript</h3>
<p>源代码采用 TypeScript 书写</p>
</li>
<li>
<svg>
<use xlink:href="#icon-cloud"></use>
</svg>
<h3>具有亲和力的代码</h3>
<p>新手也能轻松阅读的源代码</p>
</li>
</ul>
</div>

然后补全 .features > ul > li > svg 的样式表,就可以了

1
2
3
4
5
> svg {
grid-area: icon;
width: 64px;
height: 64px;
}

最后,再为两个跳转入口贴个图

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<div class="actions">
<a href="https://github.com/Ringoer/laby-ui">
<img
src="../assets/github.png"
alt="Github"
style="transform: rotateY(180deg)"
/>
Github
</a>
<router-link to="/document">
<img src="../assets/goto.png" alt="开始" />
开始
</router-link>
</div>

补个样式表

1
2
3
4
5
6
7
8
9
10
.banner{
> .actions{
a{
> img{
display: block;
width: 80px;
}
}
}
}

效果如图

效果图

这不是还挺好看的2333


感谢阅读

--It's the end.Thanks for your read.--