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

news2024/11/24 6:38:15

内容

  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 
        vertical
        style="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-item
                v-for="blog in last_blogs"
                type="success"
                :title=blog.title
                :content=blog.content
                :time=blog.time
                style="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.coloradmin.cn/o/374032.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【云原生】k8s核心技术—集群安全机制 Ingress Helm 持久化存储-20230222

文章目录一、k8s集群安全机制1. 概述2. RBAC——基于角色的访问控制二、Ingress三、Helm1. 引入2. 使用功能Helm可以解决哪些问题3. 介绍4. 3个重要概念5. helm 版本变化6. helm安装及配置仓库7. 使用helm快速部署应用8. 自己创建chart9. 实现yaml高效复用四、持久化存储1.nfs—…

ArXiv简介以及论文提交

arXiv网站简介 arXiv是一个收集物理学、数学、计算机科学、生物学与数理经济学的论文预印本的网站。其中arXiv发音同“archive”&#xff0c;因为“X”代表希腊字母 &#xff0c;国际音标为[kai]。它于1991年8月14日成立&#xff0c;现由美国康奈尔大学维护。 ——维基百科 对…

在Angular项目中引入NG-ZORRO

在Angular项目中引入NG-ZORRO1.前置2.安装NG-ZORRO并进行初始化配置3.引入样式4.引入组件1.前置 首先创建一个angular项目&#xff1a;angular创建一个新项目的步骤 这是我项目的结构&#xff1a; 2.安装NG-ZORRO并进行初始化配置 安装NG-ZORRO&#xff1a;cd 到当前项目位…

微信小程序、小游戏的流量主一般可以赚多少钱?

本篇文章主要科普小程序、小游戏流量主一般赚钱的实际情况&#xff0c;通过在下长期运营的经验汇总而成。 日期&#xff1a;2023年2月26日 作者&#xff1a;任聪聪 小程序、小程序满1000用户后即可开通流量主&#xff0c;但实际上很多人并没有传说中的那种日赚几千的流量收入的…

学习笔记之Vuex(五)

Vuex&#xff08;五&#xff09;Vuex一、什么是Vuex二、Vuex工作原理三、搭建Vuex环境四、求和案例分析4.1 求和案例——vue实现4.2 求和案例——vuex实现&#xff08;五&#xff09;Vuex 一、什么是Vuex 1.概念 在Vue中实现集中式状态&#xff08;数据&#xff09;管理的一…

第二节类型转换、运算符

类型转换 自动类型转换&#xff1a; 类型小的变量可以赋值给大的类型变量。 表达式的自动类型转换&#xff1a; byte short char在表达式中是当做 int计算的。 强制类型转换&#xff1a; 大类型的变量转化为小类型的变量。 注&#xff1a;浮点型转换为整数是直接丢掉小数部…

nacos config

https://github.com/alibaba/spring-cloud-alibaba/wiki/Nacos-config 必须在 bootstrap.properties 配置 nacos server 的地址 data id : 对应一个微服务 namespace : 对应环境 dev prod 默认 public group : 对应一个项目&#xff0c;&#xff0c;默认 DEFUALT_GROUP 当你…

神经网络 线性回归从0开始实现的代码分析 --跟李沐学AI

3.2. 线性回归的从零开始实现 — 动手学深度学习 2.0.0 documentation 分析了好几天才懂,个人水平有限 如果有错请指出 1.导包 %matplotlib inline import random import torch from d2l import torch as d2ldef synthetic_data(w, b, num_examples): #save""&quo…

spring integration使用:消息转换器

系列文章目录 …TODO spring integration开篇&#xff1a;说明 …TODO spring integration使用&#xff1a;消息路由 spring integration使用&#xff1a;消息转换器 spring integration使用&#xff1a;消息转换器系列文章目录前言消息转换器&#xff08;或者叫翻译器&#x…

SQLserver 语句查询当前数据库版本型号

SQL执行语句select serverproperty(productversion) as 产品版本号,serverproperty(productlevel) as 产品层次,serverproperty(edition) as 版本SQL执行历史记录&#xff1a;select version as 版本号select serverproperty(productversion) as 产品版本号,serverproperty(pro…

【Redis】一文搞懂 Redis 中的缓存穿透、缓存击穿、缓存雪崩及其解决方案

一文搞懂 Redis 中的缓存穿透、缓存击穿、缓存雪崩及其解决方案1. 缓存穿透1.1 什么是缓存穿透1.2 缓存穿透的解决方案1.2.1 缓存空对象1.2.2 布隆过滤器布隆过滤器工作原理Redis 使用布隆过滤器2. 缓存击穿1.1 什么是缓存击穿1.2 缓存击穿的解决方案1.2.1 设置热点数据永不过期…

【无限思维画布】制作思维导图第三步,节点移动与编辑

正在为无限词典制作单词思维导图功能&#xff0c;实现无限单词导图&#xff0c;无限思维画布。目前制作到第三步&#xff0c;实现节点移动与编辑&#xff1a; 节点移动与编辑Details 第一步&#xff0c;搜索 github。 一个是比较完善的&#xff0c;基于普通dom&#xff0c;用…

Random(二)什么是伪共享?@sun.misc.Contended注解

目录1.背景简介2.伪共享问题3.问题解决4.JDK使用示例1.背景简介 我们知道&#xff0c;CPU 是不能直接访问内存的&#xff0c;数据都是从高速缓存中加载到寄存器的&#xff0c;高速缓存又有 L1&#xff0c;L2&#xff0c;L3 等层级。在这里&#xff0c;我们先简化这些复杂的层级…

对象创建的过程

对象创建的过程 在语言层面上&#xff0c;创建对象通常仅仅是一个new关键字而已&#xff08;例外&#xff1a;复制、反序列化&#xff09;&#xff1b; 而在虚拟机中&#xff0c;对象的创建又是怎样一个过程呢&#xff1f;&#xff08;文中讨论的对象限于普通Java对象&#xff…

Jetpack Compose 深入探索系列一:Composable 函数

Composable 函数的含义 如果我们只专注于简单的语法&#xff0c;任何标准的Kotlin函数都可以成为一个可组合函数&#xff0c;只需将其注解为Composable: 通过这样做&#xff0c;我们实际上是在告诉编译器&#xff0c;该函数打算将一些数据转换为一个Node节点&#xff0c;以便注…

Simulink建模:如何学习Simulink建模

本文介绍博主自己学习Simulink建模的方法。后续博客都会按照本文中的思路来记录博主学习的过程。 文章目录1 Simulink建模的分类1.1 连续模型建模1.2 物理模型建模1.3 控制算法建模2 控制算法建模的基本知识2.1 控制算法与电控软件架构2.2 控制算法与周期调度2.3 控制算法与其他…

分布式-分布式缓存笔记

分布式系统缓存 缓存分类 前端缓存 前端缓存包括页面和浏览器缓存&#xff0c;如果是 App&#xff0c;那么在 App 端也会有缓存。当你打开商品详情页&#xff0c;除了首次打开以外&#xff0c;后面重复刷新时&#xff0c;页面上加载的信息来自多种缓存。 页面缓存属于客户端…

61 - 进程互斥锁的详细设计

---- 整理自狄泰软件唐佐林老师课程 文章目录1. 问题1.1 生活中的示例1.1.1 吃饭问题1.1.2 十字路口1.1.3 洗手间1.1.4 生产消费者问题1.2 结论2. 接下来的问题2.1 临界资源&#xff08;Critical Resource&#xff09;2.2 临界区&#xff08;Critical Section&#xff09;2.3 任…

【C3】cpu_wtd_sysfs

文章目录2.cpu_wtd_sysfs&#xff1a;switchboard.c &#xff08;fpga下i2c访问Switch CPLD1&#xff0c;Switch CPLD2 &#xff1a;CPLD, FPGA , QSFP&#xff09;scriptbmc_wtd&#xff1a;syscpld.c中wd_en和wd_kick节点对应寄存器&#xff0c;crontab&#xff0c;FUNCNAMEA…

Spring事务的隔离级别

事务的特性: 隔离性:多个事务在并发执行的时候&#xff0c;多个事务执行的一个行为模式&#xff0c;当一个事务执行的时候&#xff0c;另一个事务执行的一个行为模式是什么&#xff1f; 1)A&#xff0c;原子性&#xff0c;一个事务中的所有操作&#xff0c;要么全部执行成功&am…