顶部边栏做完了,接下来开始做官网的首页

返回阅读列表点击 这里

创建视图文件夹

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

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

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

再配置一下 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. 三点特性

首先是极光背景,非常简单,用渐变色 + 转向当作背景色就可以了,然后三点特性,显然是无序列表,那么可以得到如下骨架:

<template>
<div>
<Topnav />
<div class="banner">
<a href="https://github.com/JeremyWu917/jeremy-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 中引入顶边栏

import Topnav from "../components/Topnav.vue";
export default {
components: {
Topnav,
},
};

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


<style lang="scss" scoped>
$theme-color: #8c6fef;
$border-radius: 4px;
$color: white;
.banner {
background: linear-gradient(
145deg,
rgb(232, 232, 235) 0%,
rgb(193, 181, 235) 30%,
rgb(136, 106, 235) 70%,
rgb(108, 68, 240) 100%
);
clip-path: ellipse(80% 60% at 50% 40%);
}
.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;
> svg {
grid-area: icon;
width: 64px;
height: 64px;
}
> h3 {
grid-area: title;
font-size: 28px;
}
> p {
grid-area: text;
}
}
}
}
.banner {
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;
}
> img {
display: block;
width: 80px;
}
text-align: center;
}
}
}
</style>

改进首页

那显然,特性应该单独占据一行,并且在宽度足够的时候横向排列,两个链接也最好横向排列,而且最好各自有点介绍。

先修改模板,再补全样式,再加个 SVG 图,home.vue 代码如下:

<template>
<div>
<Topnav />
<div class="banner">
<h1>Jeremy UI</h1>
<h2>JeremyWU 创建的 UI 组件库</h2>
<p class="actions">
<a href="https://github.com/JeremyWu917/jeremy-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>
</p>
</div>
<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-typescript"></use>
</svg>
<h3>基于 TypeScript</h3>
<p>源代码采用 TypeScript 书写</p>
</li>
<li>
<svg>
<use xlink:href="#icon-fork"></use>
</svg>
<h3>具有亲和力的代码</h3>
<p>新手也能轻松阅读的源代码</p>
</li>
</ul>
</div>
</div>
</template> <script lang="ts">
import Topnav from "../components/Topnav.vue";
export default {
components: {
Topnav,
},
};
</script> <style lang="scss" scoped>
$theme-color: #8c6fef;
$border-radius: 4px;
$color: white;
.banner {
background: linear-gradient(
145deg,
rgb(232, 232, 235) 0%,
rgb(193, 181, 235) 30%,
rgb(136, 106, 235) 70%,
rgb(108, 68, 240) 100%
);
clip-path: ellipse(80% 60% at 50% 40%);
}
.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;
> svg {
grid-area: icon;
width: 64px;
height: 64px;
}
> h3 {
grid-area: title;
font-size: 28px;
}
> p {
grid-area: text;
}
}
}
}
.banner {
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;
}
> img {
display: block;
width: 80px;
}
text-align: center;
}
}
}
</style>

运行效果

感谢阅读

03 - Vue3 UI Framework - 首页的更多相关文章

  1. 00 - Vue3 UI Framework - 阅读辅助列表

    阅读列表 01 - Vue3 UI Framework - 开始 02 - Vue3 UI Framework - 顶部边栏 03 - Vue3 UI Framework - 首页 04 - Vue3 ...

  2. 01 - Vue3 UI Framework - 开始

    写在前面 一年多没写过博客了,工作.生活逐渐磨平了棱角. 写代码容易,写博客难,坚持写高水平的技术博客更难. 技术控决定慢慢拾起这份坚持,用作技术学习的阶段性总结. 返回阅读列表点击 这里 开始 大前 ...

  3. 05 - Vue3 UI Framework - Button 组件

    官网基本做好了,接下来开始做核心组件 返回阅读列表点击 这里 目录准备 在项目 src 目录下创建 lib 文件夹,用来存放所有的核心组件吧.然后再在 lib 文件夹下创建 Button.vue 文件 ...

  4. 02 - Vue3 UI Framework - 顶部边栏

    顶部边栏比较简单,而且首页和文档页都需要,所以我们先从顶部边栏做起 前文回顾点击 这里 返回阅读列表点击 这里 初始化 首先,在 components 文件夹下,创建一个 vue 组件,命名为 Top ...

  5. 04 - Vue3 UI Framework - 文档页

    官网的首页做完了,接下来开始做官网的文档页 返回阅读列表点击 这里 路由设计 先想想我们需要文档页通向哪些地方,这里直接给出我的设计: 所属 子标题 跳转路径 文件名(*.vue) 指南 介绍 /do ...

  6. 06 - Vue3 UI Framework - Dialog 组件

    做完按钮之后,我们应该了解了遮罩层的概念,接下来我们来做 Dialog 组件! 返回阅读列表点击 这里 需求分析 默认是不可见的,在用户触发某个动作后变为可见 自带白板卡片,分为上中下三个区域,分别放 ...

  7. 08 - Vue3 UI Framework - Input 组件

    接下来再做一个常用的组件 - input 组件 返回阅读列表点击 这里 需求分析 开始之前我们先做一个简单的需求分析 input 组件有两种类型,即 input 和 textarea 类型 当类型为 ...

  8. 09 - Vue3 UI Framework - Table 组件

    接下来做个自定义的表格组件,即 table 组件 返回阅读列表点击 这里 需求分析 开始之前我们先做一个简单的需求分析 基于原生 table 标签的强语义 允许用户自定义表头.表体 可选是否具有边框 ...

  9. 10 - Vue3 UI Framework - Tabs 组件

    标签页是非常常用的组件,接下来我们来制作一个简单的 Tabs 组件 返回阅读列表点击 这里 需求分析 我们先做一个简单的需求分析 可以选择标签页排列的方向 选中的标签页应当有下划线高亮显示 切换选中时 ...

随机推荐

  1. ES6基础知识(Map用法)

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. HTTPS-自己生成数字证书

    一.获取证书的途径 自签名证书,适用于开发者测试HTTPS,最快速的途径就是生成自签名证书,非常方便. Let's Encrypt证书,可以使用免费CA机构签发的证书. 使用收费CA机构签发的证书,如 ...

  3. CTF入门学习3->Web通信基础

    Web安全基础 01 Web通信 这个部分重点介绍浏览器与Web服务器的详细通信过程. 01-00 URL协议 只要上网访问服务器,就离不开URL. URL是什么? URL就是我们在浏览器里输入的站点 ...

  4. 猿猿有责,维持整洁的 Git 提交记录,三个锦囊送给你

    背景 大家都有学习如何规范简洁的编写代码,但却很少学习如何规范简洁的提交代码.现在大家基本上都用 Git 作为源码管理的工具,Git 提供了极大的灵活性,我们按照各种 workflow 来提交/合并 ...

  5. [loj2469]最小方差生成树

    2018年论文题 约定:令点集$V=[1,n]$.边集$E=[1,m]$,记$m$条边依次为$e_{i}=(x_{i},y_{i},c_{i})$(其中$1\le i\le m$),将其按照$c_{i ...

  6. [loj2304]泳池

    将等于$k$差分,即小于等于$k$减去小于等于$k-1$,由于两者类似,不妨仅考虑前者 令$f_{i,j}$表示仅考虑$i$列(即$n=i$时),若前$j$行都没有障碍,此时最大面积小于等于$k$的概 ...

  7. [atARC111E]Simple Math 3

    首先,必然要有$(a+ci)-(a+bi)+1<d$,因此$(c-b)i\le d-2$,即$i\le \lfloor\frac{d-2}{c-b}\rfloor$ 此时,$[a+bi,a+ci ...

  8. [bzoj1037]生日聚会

    dp,用f[i][j][x][y]表示i个男孩,j个女孩,以i+j为结尾的子序列男-女最多为x,女-男最多为y的合法方案数,转移到f[i+1][j][x+1][max(y-1,0)]和f[i][j+1 ...

  9. layui页面操作,点击一个添加页面,跳转有确定,然后点击确定后将选择的几个数据返回前一个页面获取值,然后ajax请求后台

    custUserIndex.html [添加页面代码] <!DOCTYPE html> <html> <head> <meta charset="u ...

  10. GlimmerHMM指南

    GlimmerHMM指南 官方用户手册 GlimmerHMM是一种De novo的新基因预测软件. 新基因发现基于Generalized Hidden Markov Model (GHMM). Gli ...