前端新手Vue3+Vite+Ts+Pinia+Sass项目指北系列文章 —— 第六章 样式格式化

news/2024/7/24 12:04:49 标签: 前端, sass, css

系列文章目录(点击查看)


文章目录

  • 系列文章目录(点击查看)
  • 前言
  • 一、安装
  • 二、使用
  • 三、安装公共样式
  • 四、入口文件配置
  • 五、测试
  • 总结


前言

本篇涉及安装 sass,并且配置项目 sass 的初始化样式。


一、安装

根据前面的项目配置,安装sass就非常的简单

yarn add sass

在这里插入图片描述

package.json 中检查是否安装成功
在这里插入图片描述

二、使用

src 文件下新增 styles 文件夹

增加 variables.module.scss 文件

css">// base color
$blue: #324157;
$light-blue: #3a71a8;
$red: #c03639;
$pink: #e65d6e;
$green: #30b08f;
$tiffany: #4ab7bd;
$yellow: #fec171;
$panGreen: #30b08f;

// 默认菜单主题风格
$base-menu-color: #bfcbd9;
$base-menu-color-active: #f4f4f5;
$base-menu-background: #304156;
$base-logo-title-color: #fff;

$base-menu-light-color: #697280;
$base-menu-light-color-active: #697280;
$base-menu-light-background: #fff;
$base-logo-light-title-color: #001529;

$base-sub-menu-background: #1f2d3d;
$base-sub-menu-hover: #001528;

$base-sub-menu-light-background: #fff;
$base-sub-menu-light-active: #f2f3f5;
$base-sub-menu-light-hover: #f7f9fa;

$--color-primary: #409eff;
$--color-success: #67c23a;
$--color-warning: #e6a23c;
$--color-danger: #f56c6c;
$--color-info: #909399;

$base-sidebar-width: 260px;

增加 transition.scss 文件

css">// global transition css

/* fade */
.fade-enter-active,
.fade-leave-active {
  transition: opacity 0.28s;
}

.fade-enter,
.fade-leave-active {
  opacity: 0;
}

/* fade-transform */
.fade-transform-leave-active,
.fade-transform-enter-active {
  transition: all 0.5s;
}

.fade-transform-enter {
  opacity: 0;
  transform: translateX(-30px);
}

.fade-transform-leave-to {
  opacity: 0;
  transform: translateX(30px);
}

/* breadcrumb transition */
.breadcrumb-enter-active,
.breadcrumb-leave-active {
  transition: all 0.5s;
}

.breadcrumb-enter,
.breadcrumb-leave-active {
  opacity: 0;
  transform: translateX(20px);
}

.breadcrumb-move {
  transition: all 0.5s;
}

.breadcrumb-leave-active {
  position: absolute;
}

增加 element.scss 文件

css">#app {
  & .theme-dark .nest-menu .el-sub-menu > .el-sub-menu__title,
  & .theme-dark .el-sub-menu .el-menu-item {
    background-color: $base-sub-menu-background !important;

    &:hover {
      background-color: $base-sub-menu-hover !important;
    }
  }

  .el-button.is-text {
    padding-right: 0;
    padding-left: 0;
  }

  .el-table {
    margin: 10px 0;
  }

  .scp-table .el-table {
    font-size: 12px;

    --el-table-border: transparent;

    .el-table__inner-wrapper::before {
      display: none;
    }

    .el-table__header-wrapper {
      border-top: 1px solid #f2f3f5;

      th {
        height: 50px !important;
        font-size: 12px !important;
        color: #909399 !important;
        background: #fff !important;
        font-weight: normal !important;
      }
    }

    .el-table__body-wrapper {
      font-weight: bold;
      overflow: hidden;
      border: 1px solid #f2f3f5;
      border-bottom: 0;
      border-radius: 10px;
    }

    .el-table__cell {
      padding: 8px 0;

      .cell {
        /* height: auto; */
        line-height: 30px;
      }

      /* background: #f4f9fa; */
    }

    .el-table__row--striped .el-table__cell {
      /* background: #f2f3f5; */
    }

    .el-empty__description p {
      font-weight: normal;
      font-size: 12px;
    }
  }

  .el-dialog__body {
    padding-top: 15px;
    padding-bottom: 15px;
  }

  .el-input-number {
    width: 100%;

    .el-input__inner {
      text-align: left;
    }
  }

  .el-drawer__header {
    margin-bottom: 0;
  }
}

增加 index.scss 文件

@import './variables.module';
@import './transition';
@import './element';

:root {
  font-size: 14px;
  font-weight: 400;
  background-color: #fff;
}

html,
body,
#app {
  width: 100%;
  height: 100%;
}

a {
  text-decoration: none;
}

.flex {
  display: flex;
}

.flex-sb {
  display: flex;
  justify-content: space-between;
}

.flex-c {
  display: flex;
  justify-content: center;
}

.flex-sa {
  display: flex;
  justify-content: space-around;
}

.flex-end {
  display: flex;
  justify-content: flex-end;
}

.flex-align {
  display: flex;
  align-items: center;
}

.flex-wrap {
  display: flex;
  flex-wrap: wrap;
}

.flex-column {
  display: flex;
  flex-direction: column;
}

.flex-column-sb {
  display: flex;
  flex-direction: column;
  justify-content: space-between;
}

.flex-column-align-center {
  display: flex;
  flex-direction: column;
  justify-content: center;
  align-items: center;
}

.flex-align-sb {
  display: flex;
  justify-content: space-between;
  align-items: center;
}

.flex-align-sa {
  display: flex;
  justify-content: space-around;
  align-items: center;
}

.flex-column-sa {
  display: flex;
  flex-direction: column;
  justify-content: space-around;
}

.flex-align-ai {
  display: flex;
  align-items: center;
}

.flex-center {
  display: flex;
  justify-content: center;
  align-items: center;
}

.flex-sba {
  display: flex;
  justify-content: space-between;
  align-items: center;
}

三、安装公共样式

yarn add normalize.css

在这里插入图片描述

四、入口文件配置

main.ts 文件中

import { createApp } from 'vue'
import App from './App.vue'

import 'normalize.css' # 新增
import './styles/index.scss' # 新增
import ElementPlus from 'element-plus'
import 'element-plus/dist/index.css'

const app = createApp(App)

app.use(ElementPlus)
app.mount('#app')

五、测试

修改 App.vue 文件代码

<template>
  <div style="height: 100vh" class="flex-c flex-align">
    <el-row class="mb-4">
      <el-button>Default</el-button>
      <el-button type="primary">Primary</el-button>
      <el-button type="success">Success</el-button>
      <el-button type="info">Info</el-button>
      <el-button type="warning">Warning</el-button>
      <el-button type="danger">Danger</el-button>
    </el-row>
  </div>
</template>

<script setup lang="ts">

</script>

<style scoped></style>

在这里插入图片描述


总结

本文主要介绍了如何安装 sass 并在 package.json 中确认安装成功,创建了 styles 文件夹,并添加了 variables.module.scsstransition.scsselement.scssindex.scss 文件,安装了 normalize.css 并在入口文件 main.ts 中引入,修改了 App.vue 文件以测试样式应用。上文中的配置代码可在 github 仓库中直接 copy,仓库路径:https://github.com/SmallTeddy/testing-web。


http://www.niftyadmin.cn/n/5197136.html

相关文章

预约按摩小程序功能及使用指南;

小程序预约按摩功能及使用指南&#xff1a; 1. 注册登录&#xff1a;用户可选择通过账号密码或微信一键登录&#xff0c;便捷注册&#xff0c;轻松管理预约服务。 2. 查找店铺&#xff1a;展示附近的按摩店铺信息&#xff0c;用户可根据需求选择合适的店铺进行预约。 3. 选择服…

JavaScript 运行机制

文章目录 JavaScript 运行机制目标知识要点一、进程与线程1.1 概念1.2 区别1.3 多进程与多线程1.4 JS 为什么是单线程1.5 浏览器1.5.1 浏览器包含哪些进程1.5.2 为什么浏览器要多进程1.5.3 渲染进程1.5.3.1 GUI 渲染线程1.5.3.2 JS 引擎线程1.5.3.3 事件触发线程1.5.3.4 定时触…

Java GUI实现桌球小游戏

桌球游戏是一种室内运动&#xff0c;通常在一个正式的桌球台上进行。这种游戏也被称为台球或母球。桌球游戏的目标是使用一个击球杆将彩球击入桌面四个角落的袋子中&#xff0c;得分最高的一方获胜。桌球游戏需要一定的技巧和策略&#xff0c;因此是一项受欢迎的竞技运动和休闲…

(六)、基于 LangChain 实现大模型应用程序开发 | 基于知识库的个性化问答 (文档分割 Splitting)

在上一章中&#xff0c;我们刚刚讨论了如何将文档加载到标准格式中&#xff0c;现在我们要谈论如何将它们分割成较小的块。这听起来可能很简单&#xff0c;但其中有很多微妙之处会对后续工作产生重要影响。 文章目录 1、为什么要做文档分割&#xff1f;2、文档分割方式3、基于…

网络工程师-HCIA网课视频学习

这里是速成的&#xff0c;只积累下&#xff0c;自己未曾学习到的东西。通过书本补充知识点。 视频&#xff1a;hcia17-链路聚合_哔哩哔哩_bilibili hcia16-路由高级特性&#xff1a; hcia17-链路聚合&#xff1a; 由于如果根据视频来学习的话&#xff0c;感觉视频的总结并不…

js-WebApi笔记之BOM

目录 window对象 定时器-延迟函数 location对象 navigator对象 histroy对象 本地存储 localStorage sessionStorage localStorage 存储复杂数据类型 window对象 BOM (Browser Object Model ) 是浏览器对象模型 window对象是一个全局对象&#xff0c;也可以说是JavaScr…

110.firefly-overlayroot

折腾rk3399的开发板的时候&#xff0c;突然发现overlayroot这个词汇。 我移植一下linux5.10的内核到firefly3399开发板&#xff0c;结果启动之后文件系统提示只读&#xff01;&#xff01;&#xff01; 这就让我很莫名。后来看到mount文件系统的情况&#xff0c;感觉也是不可…

Vuex 组件间通讯

组件间通讯 Vuex https://vuex.vuejs.org/zh/ 基本原理 数据提取到父级 // index 文件 import Vue from vue import Vuex from "vuex" import tab from ./tab // 引入 modulesVue.use(Vuex) // 全局引入// 创建 Vuex 实例 export default new Vuex.Store({modules: …