项目正在快速迭代中,API 与视觉细节可能随版本调整,请勿用于生产环境。开发迭代中,请勿用于生产环境。
Skip to content

案例:个人博客 ​

内容站的结构比官网更简单:一栏文章流 + 一点关于作者的信息,剩下的交给排版。 本案例演示分类筛选的文章列表、热榜轮播、作者名片与订阅框如何拼成一个完整的博客首页。 品牌与文章均为虚构,源码就在本页,可以直接拷走改内容。

用到的组件:EvNavbar · EvTabs · EvArticleCard · EvSection · EvCarousel · EvQuote · EvProfileCard · EvTimeline · EvNewsletter · EvFooter

shanyue.blog新窗口打开

写下来,才算想清楚。

关于前端、设计与慢生活的个人札记,每周更新一至两篇。

7 篇
热榜

读者转得最多的三段话

关于作者

白天写代码,晚上写札记

陈山

陈山月

独立开发者 · 前端工程

正在写一本关于组件设计的小书。相信好的工具应该安静,好的文字应该诚实。

126篇文章8个专栏1.2w订阅

最近更新

2026-08-30

《把一个官网拆成 49 个组件的取舍》发布

2026-08-12

「动效」专栏开更,第一篇讲 v-reveal

2026-07-02设计

Clean Navy 配色系统长文完稿

每周精选,直接进邮箱

搭建要点 ​

  • 博客不需要 Hero:一句 motto + 一句更新频率,比首屏大图更符合内容站的气质。EvSection 的 gap="0" 让标题区与文章流贴在一起。
  • 分类筛选 = EvTabs + computed:Tab 只负责切换状态,列表交给 computed 过滤;右侧的「N 篇」计数让筛选结果可预期。
  • EvArticleCard 用 tag="a" 让整卡可点:封面缺省时用图标占位底,不用为占位图发愁;hoverable 默认开启上浮。
  • 热榜用 EvQuote 塞进 EvCarousel:读者原话比阅读量数字更有说服力,autoplay 挂 5 秒并自动悬停暂停。
  • 关于区左右分栏:EvProfileCard 讲人,EvTimeline + EvNewsletter 讲更新与订阅,一张 soft 底卡收拢。

关键代码 ​

筛选逻辑全部在一个 computed 里,模板只负责渲染:

vue
<script setup>
import { ref, computed } from 'vue'

const categories = ['全部', '前端', '设计', '随想']
const active = ref('全部')

const filtered = computed(() =>
  active.value === '全部'
    ? posts
    : posts.filter((p) => p.category === active.value)
)
</script>

<template>
  <EvTabs v-model="active" :items="categories.map((c) => ({ label: c, value: c }))" />
  <EvArticleCard
    v-for="p in filtered"
    :key="p.title"
    tag="a"
    :title="p.title"
    :excerpt="p.excerpt"
    :date="p.date"
    :tags="p.tags"
    :icon="p.icon"
  />
</template>

热榜轮播:items 是普通数组,幻灯内容交给作用域插槽:

vue
<EvCarousel :items="hot" :autoplay="5000">
  <template #item="{ item }">
    <EvQuote :quote="item.quote" :author="item.author" :role="item.role" />
  </template>
</EvCarousel>

基于 MIT 许可证发布