当前位置: 首页 > news >正文

vue3+rust个人博客建站日记3-编写主页

内容

  1. 绘制了主页的基本布局
  2. 设置了封装了header栏组件并设置了全局黑夜模式.

选择一个组件库-Naive UI

如果没有设计能力,又想开发出风格统一的前端页面。就一定要选择一个漂亮的组件库。
本次项目选择使用Naive UI,NaivUI库曾被Vue框架作者尤雨溪推荐,库作者松若章的设计和风格,我也非常喜欢。
在这里插入图片描述

规划布局

一个好看的主页是什么样的呢?
给大家列举一下我参考的部分网站主页
Naive UI
Vue.js 渐进式JavaScript 框架
React 用于构建用户界面的 JavaScript 库
Insgram
Scott Hanselman

大牛的网站主页往往很简单甚至粗糙,但许多库的官网都很漂亮。两者有一个相同点,就是简单统一的风格给人以大气干净的高级感。。
索性我们就参考vue3项目创建的初始布局,利用nativeUI来编写主页。
在这里插入图片描述
抽象来看就是这样。但要注意的是Content的内容应该由vue router控制。并且添加NConfigProvider来提供黑夜模式,细节详细见代码。在这里插入图片描述

编写代码

App.vue

选用Native UI中的Layout组件帮助布局

//App.vue
<script setup>
//导入vue-Router组件
import { RouterView } from 'vue-router'
//导入NLayout组件
import {NConfigProvider,NLayoutHeader,NLayoutContent,} from 'naive-ui'

App.vue


<template><n-config-provider ><n-layout style="min-height:100vh;"><n-layout-header bordered="true"></n-layout-header><n-layout-content >    <RouterView /></n-layout-content></n-layout></n-config-provider>
</template>

此时路由指向的是HomeView,所以让我继续修改HomeView

HomeView.vue

<script setup>import {NSpace,} from 'naive-ui'import ContentLeft from './homeview/ContentLeft.vue';import ContentRight from './homeview/ContentRight.vue';</script>
<template><n-space style="height: 100%;" justify="center" size="large"align="center"><content-left/><content-right/></n-space>
</template>

依照导入路径创建ContentLeft.vue与ContentRight.vue文件。

ContentLeft.vue 和 ContentRight.vue

关于ContentLeft.vue和ContentRight.vue 参考vue 初识页面,作如下设计

ContentLeft.vue
<script setup>import {NSpace,NGradientText,} from 'naive-ui'import {ref} from 'vue'
import router from '../../router';let quote = ref(null)quote.value = ["君子终日乾乾","夕惕若,厉,无咎"]function jumpToBlogs(){router.push("/articles")}
</script>
<template><n-space verticalstyle="height: 100%;"align="center"justify="center" ><n-gradient-text v-for="line in quote"type="danger" style="font-size: 2.3rem;">{{ line }}</n-gradient-text><n-button type="primary" @click="jumpToBlogs">开始阅读</n-button></n-space>
</template>
ContentRight.vue
<script setup>import {NTimeline,NTimelineItem,} from 'naive-ui'import {ref} from 'vue'const last_blogs = ref(null);last_blogs.value = [{title:"Linus Torvalds 怒怼:不要提交没有注释的请求",content:"Linux 6.3 合并窗口期已经于近日开启,Linus Torvalds 收到了大量的 pull request(PR)请求,总体来看,本次窗口期的各项工作开展顺利.",time:"2023-02-23 09:30:54",},{title:"titletses",content:"哪里成功",time:"2018-04-03 20:46"},{title:"成功",content:"哪里成功",time:"2018-04-03 20:46"},]
</script>
<template><n-timeline><n-timeline-itemv-for="blog in last_blogs"type="success":title=blog.title:content=blog.content:time=blog.timestyle="max-width: 50vw;"/></n-timeline>
</template>

Top.vue与黑夜模式

封装一下Top.vue以实现黑夜模式。

<script setup>import {NSpace,NSwitch} from 'naive-ui'const props = defineProps(['active'])const emit = defineEmits(['update:active'])const active = computed({get(){return props.active;},set(active){emit('update:active', active) }})</script>

Props即传入的参数,emit即当改变发生时,提交给父组件。这样就完成了父子组件的双向绑定声明。
最后设置参数active的get()参数获取porps中active的值,set()方法设定返回给父组件的确切值即可。

<template><n-space style="width: 100%;margin-inline: 2vw;"justify="space-between"align="center"><div style="font-weight:700;">Blog</div><n-switch v-model:value="active" size="large"></n-switch></n-space>
</template>

使用Top.vue
App.vue

import Top from './views/homeview/Top.vue';
import {ref,computed} from 'vue'
import {darkTheme,NLayout,NLayoutHeader,NLayoutContent,NConfigProvider} from 'naive-ui'
let active = ref(false)
const theme = computed(()=>{return active.value? darkTheme:null;
})
<template><n-config-provider :theme="theme" style="min-height:100vh;"><n-layout style="min-height:100vh;"><n-layout-header class="top flex-row-box"bordered="true"><top v-model:active="active"></top></n-layout-header>......

最终效果:
在这里插入图片描述
在这里插入图片描述

http://www.lryc.cn/news/21819.html

相关文章:

  • 前端常考react面试题(持续更新中)
  • C++11多线程编程 二:多线程通信,同步,锁
  • js——原型和原型链
  • [计算机网络(第八版)]第三章 数据链路层(学习笔记)
  • void在不同场景下的意义
  • Flume简介
  • java简单学习
  • Vue2 组件基础使用、父子组件之间的传值
  • 代码随想录算法训练营 || 贪心算法 122 55 45
  • 数据结构基础之栈和队列
  • 【Spark分布式内存计算框架——Spark Streaming】3.入门案例(上)官方案例运行
  • 【博学谷学习记录】超强总结,用心分享 | 架构师 Tomcat源码学习总结
  • 泛型<E>
  • 你对MANIFEST.MF这个文件知道多少?
  • 史上最经典垃圾回收器(CMS,G1)详解、适用场景及特点、使用命令
  • Hive查询中的优化
  • 【开发规范】go项目开发中的[流程,git,代码,目录,微服务仓库管理,静态检查]
  • 数组初始化方式与decimal.InvalidOperation
  • 【Opencv-python】之入门安装
  • MySQL进阶(二)
  • 热爱所有热爱
  • Redis学习之数据删除与淘汰策略(七)
  • HashMap 面试专题
  • 域组策略自动更新实验报告
  • Java自定义生成二维码(兼容你所有的需求)
  • Spring事务的隔离级别
  • JVM系统优化实践(4):以支付系统为例
  • 16- TensorFlow实现线性回归和逻辑回归 (TensorFlow系列) (深度学习)
  • 无自动化测试系统设计方法论
  • 架构初探-学习笔记