Nuxt 菜鸟入门学习笔记五:CSS 样式

文章目录

  • 本地样式表
    • 在组件内导入
    • 通过 Nuxt 配置 CSS 属性导入
    • 使用字体
    • 导入通过 NPM 发布的样式表
  • 外部样式表
    • 动态添加样式表
    • 【高级】使用 Nitro 插件修改渲染的头部
  • 使用预处理器
  • 单文件组件 SFC 样式
    • 类和样式绑定
    • 使用 v-bind 的动态样式
    • Scoped Styles
    • CSS Modules
    • 预处理器支持
  • 使用 PostCSS
  • 利用布局实现多种风格
  • 第三方库和模块
    • 轻松加载网络字体

Nuxt
Nuxt 官网地址: https://nuxt.com/

Nuxt 在样式设计方面非常灵活。

  • 可以编写自己的样式;
  • 可以引用本地和外部样式表;
  • 可以使用 CSS 预处理器、CSS 框架、UI 库和 Nuxt 模块来为应用程序设计样式。

本地样式表

按照惯例,将本地样式表放在assets/目录下。

在组件内导入

在组件内导入的样式表将在 Nuxt 渲染的 HTML 中内联。可以通过以下方式导入:

  • 可以在页面、布局和组件中直接导入样式表。
  • 可以使用 javascript 导入或 css @import 语句。

代码示例:

  1. 创建 /assets/css/first.css 文件,内容如下:
// assets/css/first.css.first {background-color: red;
}
  1. 在页面中导入,并应用:
// pages/about.vue<template><div><h1>@ index page</h1><AppAlert class="first">AppAlert Component.</AppAlert></div>
</template><script>
// 使用静态导入以实现服务器端兼容性
// import "~/assets/css/first.css";// 注意:动态导入与服务器端不兼容
// import("~/assets/css/first.css");
</script><style>
@import url("~/assets/css/first.css");
</style>

通过 Nuxt 配置 CSS 属性导入

可以在 Nuxt 配置中使用 css 属性来导入本地样式表,Nuxt 将把它包含到应用程序的所有页面中。这种方式导入样式表也将在 Nuxt 渲染的 HTML 中内联,全局注入并出现在所有页面中。

注意:即便页面中没有用到样式表中的样式规则,也会注入并在 HTML 中内联。

代码示例:

  1. 创建 /assets/css/main.css 文件,内容如下:
// assets/css/main.css.text-bold {font-weight: bold;
}
  1. 在 Nuxt 配置中导入:
// nuxt.config.tsexport default defineNuxtConfig({devtools: { enabled: true },pages: true,vite: {css: {preprocessorOptions: {scss: {additionalData: '@use "@/assets/scss/_colors.scss" as *;',},},},},// 导入本地样式表css: ["~/assets/css/main.css"],
});
  1. 在页面中导入,并应用:
// pages/about.vue<template><div><h1>@ index page</h1><AppAlert class="first text-bold">AppAlert Component.</AppAlert></div>
</template><script>
// 使用静态导入以实现服务器端兼容性
// import "~/assets/css/first.css";// 注意:动态导入与服务器端不兼容
// import("~/assets/css/first.css");
</script><style>
@import url("~/assets/css/first.css");
</style>

使用字体

将下载的字体文件放在 ~/public/ 目录下,例如~/public/fonts。然后就可以在样式表中使用 url() 引用它们。

代码示例:

  1. 在 css 文件引用字体,并在样式中使用:
// assets/css/main.css.text-bold {font-weight: bold;
}// 引用定义字体
@font-face {font-family: "MyFont";src: url("/fonts/test.ttf");font-weight: normal;font-style: normal;font-display: swap;
}// 样式汇中使用字体
.cool-text {font-family: "MyFont";font-size: 22px;
}
  1. 在样式表、页面或组件中通过样式应用字体:
// pages/index.vue<template><div><h1>@ index page</h1><AppAlert class="first text-bold">AppAlert Component.</AppAlert><p class="cool-text">爱拼才会赢!</p></div>
</template>

导入通过 NPM 发布的样式表

可以引用通过 npm 发布的样式表。让我们以流行的 animate.css 库为例。

  1. 先安装 animate.css 库:
pnpm add animate.css
  1. 导入 animate.css:
  • 在页面、布局和组件中直接引用:
// pages/index.vue<script>
// 通过js导入
import "animate.css";
</script><style>
// 通过css导入
@import url("animate.css");
</style>
  • 在 Nuxt 配置的 css 属性中导入:
// nuxt.config.tsexport default defineNuxtConfig({devtools: { enabled: true },pages: true,vite: {css: {preprocessorOptions: {scss: {additionalData: '@use "@/assets/scss/_colors.scss" as *;',},},},},css: ["~/assets/css/main.css", "animate.css"],
});
  1. 使用 animate.css 的动画样式:
<template><div><h1>@ index page</h1><AppAlert class="first text-bold">AppAlert Component.</AppAlert><p class="cool-text animate__animated animate__bounceIn">爱拼才会赢!</p></div>
</template><script>
// 使用静态导入以实现服务器端兼容性
// import "~/assets/css/first.css";// 注意:动态导入与服务器端不兼容
// import("~/assets/css/first.css");// import "animate.css";
</script><style>
@import url("~/assets/css/first.css");
/* @import url("animate.css"); */
</style>

外部样式表

通过在 nuxt.config 文件的 head 部分添加链接元素,就可以在应用程序中包含外部样式表。我们可以使用 Nuxt 配置中的 app.head 属性来操作头部:

// nuxt.config.tsexport default defineNuxtConfig({devtools: { enabled: true },pages: true,vite: {css: {preprocessorOptions: {scss: {additionalData: '@use "@/assets/scss/_colors.scss" as *;',},},},},css: ["~/assets/css/main.css"],app: {head: {link: [{rel: "stylesheet",href: "https://cdnjs.cloudflare.com/ajax/libs/animate.css/4.1.1/animate.min.css",},],},},
});

当然还可以使用不同的方法实现这一结果,而且本地样式表也可以这样包含。

动态添加样式表

可以在代码中使用 useHead 组合式函数来动态设置 head 中的值。

useHead({link: [{rel: "stylesheet",href: "https://cdnjs.cloudflare.com/ajax/libs/animate.css/4.1.1/animate.min.css",},],
});

注意: 这种方式目前使用体验不是很好,如果要使用这种方式,需要做更多技术实践。

【高级】使用 Nitro 插件修改渲染的头部

如果需要更高级的控制,可以使用钩子拦截渲染的 html,并以编程方式修改头部。
此处暂不介绍,如有兴趣,提供官方链接:https://nuxt.com/docs/getting-started/styling#dynamically-adding-stylesheets

使用预处理器

常用预处理器 SCSS、Sass、Less 或 Stylus 等,使用前需要先安装。
本文以 SCSS 为例:

  1. 进行安装:
pnpm add sass
  1. 创建 scss 文件:
// assets/scss/main.scss.parent {background-color: #eee;padding: 20px;.child {background-color: aquamarine;padding: 20px;}
}
  1. 两种导入方式:
  • 可以在页面、布局和组件中使用预处理器的语法导入源文件。

    <style lang="scss">
    @use "~/assets/scss/main.scss";
    </style>
    
  • 可以使用 Nuxt 配置文件中 css 属性全局导入。

    export default defineNuxtConfig({css: ["~/assets/scss/main.scss"],
    });
    

无论使用上面的哪种导入方式,编译后的样式表将被内联到 Nuxt 渲染的 HTML 中。

如果你需要在预处理文件中注入代码,比如带有颜色变量的 sass 部分,你可以使用 vite 预处理器选项来实现。(前一篇文章静态资源中全局样式导入有样式实现,或者参考官方文档:https://nuxt.com/docs/getting-started/styling#dynamically-adding-stylesheets)
Nuxt 默认使用 Vite。如果希望使用 webpack,请参阅每个预处理器加载器的文档。

单文件组件 SFC 样式

Vue 和 SFC 最棒的地方之一就是它能很自然地处理样式。可以直接在组件文件的样式块中编写 CSS 或预处理代码,因此无需使用 CSS-in-JS 之类的东西就能获得绝佳的开发体验。

【拓展】如果你想使用 CSS-in-JS,你可以找到支持它的第三方库和模块,比如 pinceau。可以参考Vue 文档,获取关于SFC中组件样式的全面参考。

类和样式绑定

在 Vue 的 SFC 组建中,可以通过类和样式属性来为组件设置样式。
详细内容请阅读 Vue 文档:Class 与 Style 绑定

使用 v-bind 的动态样式

可以使用 v-bind 函数在样式块中引用 JavaScript 变量和表达式。绑定将是动态的,这意味着如果变量值发生变化,样式也将随之更新。

// pages/test.vue<script setup>
const color = ref("red");
setTimeout(() => {color.value = "yellow";
}, 3000);
</script><template><div class="text">hello</div>
</template><style>
.text {color: v-bind(color);
}
</style>

Scoped Styles

范围属性允许对组件进行独立样式化。使用该属性声明的样式将仅适用于该组件。

<template><div class="example">hi</div>
</template><style scoped>
.example {color: red;
}
</style>

更多内容请阅读 Vue 文档:单文件组件 CSS 功能

CSS Modules

可以通过 module 属性使用 CSS 模块。使用注入的 $style 变量访问它。

<template><p :class="$style.red">This should be red</p>
</template><style module>
.red {color: red;
}
</style>

预处理器支持

SFC 样式块支持预处理器语法。Vite 内置支持.scss、.sass、.less、.styl 和.stylus 文件,无需配置。只需先安装它们,然后就可以直接在 SFC 中使用 lang 属性。

<style lang="scss">
/* Write scss here */
</style>

使用 PostCSS

科普:PostCSS 是什么?
PostCSS 是一个使用 JS 插件转换 CSS 的工具。这些插件可以支持变量和混合、transpile 未来 CSS 语法、内联图像等。
官网链接:https://www.postcss.com.cn/

Nuxt 内置了 postcss。可以在nuxt.config文件中进行配置。

export default defineNuxtConfig({postcss: {plugins: {'postcss-nested': {}"postcss-custom-media": {}}}
})

为了在 SFC 中使用正确的语法高亮,可以使用 postcss lang 属性。

<style lang="postcss">/* Write stylus here */</style>

默认情况下,Nuxt 已经预配置了以下插件:

  • postcss-import: Improves the @import rule
  • postcss-url: Transforms url() statements
  • autoprefixer: Automatically adds vendor prefixes
  • cssnano: Minification and purge

利用布局实现多种风格

如果需要为应用程序的不同部分设计完全不同的布局样式,可以使用布局。
布局在上一篇文章的视图章节有简单介绍,此处不做更多讲解,后续专门用一篇文章来细说。

第三方库和模块

在样式设计方面,Nuxt 并不墨守成规,而是为我们提供了多种选择。可以使用任何想要的样式工具,如 UnoCSS 或 Tailwind CSS 等流行库。社区和 Nuxt 团队开发了大量的 Nuxt 模块,使集成变得更加容易。可以在网站的模块部分找到它们。这里有几个模块可以帮助我们开始使用:

  • UnoCSS: Instant on-demand atomic CSS engine
  • Tailwind CSS: Utility-first CSS framework
  • Fontaine: Font metric fallback
  • Pinceau: Adaptable styling framework
  • NuxtLabs UI

轻松加载网络字体

可以使用Nuxt Google Fonts 模块来加载 Google Fonts。
如果使用的是UnoCSS,请注意它自带了一个网页字体预设,可以方便地加载来自常见供应商的字体,包括 Google Fonts 等。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/61493.shtml

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

相关文章

基于Python+OpenCV智能答题卡识别系统——深度学习和图像识别算法应用(含Python全部工程源码)+训练与测试数据集

目录 前言总体设计系统整体结构图系统流程图 运行环境Python 环境PyCharm安装OpenCV环境 模块实现1. 信息识别2. Excel导出模块3. 图形用户界面模块4. 手写识别模块 系统测试1. 系统识别准确率2. 系统识别应用 工程源代码下载其它资料下载 前言 本项目基于Python和OpenCV图像处…

图像扭曲之旋转

源码&#xff1a; void twirl(cv::Mat& src,cv::Mat& dst,double angle,double radius) {dst.create(src.rows, src.cols, CV_8UC3);dst.setTo(0);int radius2radius*radius;int cx src.cols / 2;int cy src.rows / 2;int distance,distance2 0;for (int h 0; h &…

P13 VUE 二级menu实现

主要修改以下几个点&#xff1a; CommonAside.vue中 外层便利有孩子节点&#xff0c;关键词key是对应的标签&#xff0c;class动态图表渲染 内层遍历不能再用item&#xff0c;用subitem&#xff0c;遍历该item.childeren&#xff0c;关键词是path&#xff0c; <templat…

k8s etcd 简介

Etcd是CoreOS基于Raft协议开发的分布式key-value存储&#xff0c;可用于服务发现、共享配置以及一致性保障&#xff08;如数据库选主、分布式锁等&#xff09;。 如&#xff0c;Etcd也可以作为微服务的注册中心&#xff0c;比如SpringCloud也基于ETCD实现了注册中心功能&#…

dayjs格式转换成日期

目录 方法一&#xff1a; ​编辑方法二&#xff1a; 这个项目在筛选订单时间的时候是由前端进行筛选的&#xff0c;用的是adt-design-pro进行二开的&#xff0c;其中在用日期组件的时候遇到了一个问题&#xff0c;组件返回的是&#xff1a; 但是我需要的是年-月-日&#xff…

计算机网络 第二节

目录 一&#xff0c;计算机网络的分类 1.按照覆盖范围分 2.按照所属用途分 二&#xff0c;计算机网络逻辑组成部分 1.核心部分 &#xff08;通信子网&#xff09; 1.1电路交换 1.2 分组交换 两种方式的特点 重点 2.边缘部分 &#xff08;资源子网&#xff09; 进程通信的方…

模拟电子技术基础学习笔记三 PN结

采用不周的掺杂工艺&#xff0c;将P型半导体与N型半导体制作在同一块硅片上&#xff0c;在它们的交界面就形成PN结。 扩散运动 物质总是从浓度高的地方向浓度低的地方运动&#xff0c;这种由于浓度差而产生的运动称为扩散运动。 空间电荷区 - 耗尽层 漂移运动 在电场力的作…

成集云 | 飞书审批同步金蝶云星空 | 解决方案

源系统成集云目标系统 方案介绍 飞书员工报销审批通过后&#xff0c;审批单据内容和审批状态实时同步金蝶云星空 飞书是字节跳动于2016年自研的新一代一站式协作平台&#xff0c;将即时沟通、日历、云文档、云盘和工作台深度整合&#xff0c;通过开放兼容的平台&#xff0c;…

BIO到NIO、多路复用器, 从理论到实践, 结合实际案例对比各自效率与特点(下)

文章目录 多路复用器简介多路复用器的两个阶段Java中的多路复用器封装测试代码压测结果总结 本篇文章是BIO到NIO、多路复用器, 从理论到实践, 结合实际案例对比各自效率与特点(上)的下一篇, 如果没有看的小伙伴, 可以先看下, 不然可能会不连贯. 多路复用器简介 多路复用器是对…

使用 Laf 一周内上线美术狮 AI 绘画小程序

“美术狮 AI 绘画”&#xff08;以下简称“美术狮”&#xff09;&#xff0c;是我们小团队的一次尝试&#xff0c;定位是人人都可以上手的&#xff0c;充满创意的&#xff0c;理解中文和中国文化的图片生成工具。 在完善图像模型和论证核心问题之后&#xff0c;我们开始构建 MV…

linux离线环境安装redis

先检查gcc版本&#xff0c;使用gcc --version进行检查&#xff0c;版本在5以下的&#xff0c;安装redis要安装redis6以下的版本 如果没有gcc命令&#xff0c;要先安装gcc命令。因为是离线环境&#xff0c;yum命令什么的用不了。为了安装gcc&#xff0c;进行了几种尝试。 1、下…

「MySQL-03」用户管理与给用户授权

目录 一、用户管理 1. 用户信息 2. 创建用户 3. 删除用户 4. 修改用户密码 二、给用户授权 0.MySQL数据库提供的权限列表 1. 给用户授权 2. 回收权限 一、用户管理 1. 用户信息 1.0 数据库mysql和user表 安装好 MySQL后&#xff0c;里面会有一个默认的数据库mysql里面有一个u…

文件属性查看和修改学习

这个是链接&#xff0c;相当于快捷方式&#xff0c;指向usr/bin这个目录&#xff0c;链接到这个目录

大数据-玩转数据-Flink窗口

一、Flink 窗口 理解 在流处理应用中&#xff0c;数据是连续不断的&#xff0c;因此我们不可能等到所有数据都到了才开始处理。当然我们可以每来一个消息就处理一次&#xff0c;但是有时我们需要做一些聚合类的处理&#xff0c;例如&#xff1a;在过去的1分钟内有多少用户点击…

【三等奖方案】小样本数据分类任务赛题「痛!太痛了!」团队解题思路

第十届CCF大数据与计算智能大赛&#xff08;2022 CCF BDCI&#xff09;已圆满结束。大赛官方竞赛平台DataFountain&#xff08;简称DF平台&#xff09;将陆续释出各赛题获奖队伍的方案思路。 本方案为【小样本数据分类任务】赛题的三等奖获奖方案&#xff0c;赛题地址&#xf…

研磨设计模式day15策略模式

场景 问题描述 经常会有这样的需要&#xff0c;在不同的时候&#xff0c;要使用不同的计算方式。 解决方案 策略模式 定义&#xff1a; 解决思路&#xff1a;

【马蹄集】第二十四周——高精度计算专题

高精度计算专题 目录 MT2191 整数大小比较MT2192 AB problemMT2193 A-B problemMT2194 大斐列MT2195 升级版斐波那契数列MT2196 2的N次幂 MT2191 整数大小比较 难度&#xff1a;黄金    时间限制&#xff1a;1秒    占用内存&#xff1a;128M 题目描述 给出两个正整数&…

【数值计算方法】导论

目录 一、极简数学史 1. 萌芽时期 2. 古典数学时期 3. 近代前期 4. 近代后期 5. 现代数学 二&#xff0c;计算方法学什么&#xff1f; 1. 数值代数 a. 线性代数方程组求解&#xff08;等价变换&#xff09; b. 矩阵特征值特征向量&#xff08;相似变换&#xff09; …

【附安装包】MyEclipse2019安装教程

软件下载 软件&#xff1a;MyEclipse版本&#xff1a;2019语言&#xff1a;简体中文大小&#xff1a;1.86G安装环境&#xff1a;Win11/Win10/Win8/Win7硬件要求&#xff1a;CPU2.5GHz 内存4G(或更高&#xff09;下载通道①百度网盘丨下载链接&#xff1a;https://pan.baidu.co…

Fiddler中 AutoResponder 使用

Fiddler的 AutoResponder &#xff0c;即URL重定向功能非常强大。不管我们做URL重定向&#xff0c;还是做mock测试等&#xff0c;都可以通过该功能进行实践。 下面&#xff0c;小酋就来具体讲下该功能的用法。 Enable rules 启用规则Unmatched requests passthrough 没有匹配…