You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Quasar中动态修改字体(大小、族)实现个性化UI设置

动态修改Quasar字体与排版变量的方案

核心思路:将Quasar Sass变量转为可动态修改的CSS自定义属性

Quasar的原生Sass变量是编译时生效的,但我们可以先在全局样式里把这些变量映射为CSS自定义属性,之后就能用Quasar自带的setCssVar工具(或原生JS)动态修改,同时结合本地存储保存用户设置。

步骤1:在全局样式中暴露Sass变量

在项目的src/css/app.scss(全局样式文件)中添加以下代码,把需要动态修改的Quasar Sass变量转为CSS自定义属性:

:root {
  --q-body-font-size: $body-font-size;
  --q-space-base: $space-base;
  --q-typography-font-family: $typography-font-family;
  // 按需添加更多需要动态修改的变量映射
}

步骤2:用Quasar的setCssVar动态修改属性

现在可以直接用Quasar提供的setCssVar工具修改这些自定义属性,比原生JS更贴合框架生态:

import { setCssVar } from 'quasar'

// 切换到大号字体
setCssVar('q-body-font-size', '18px')
// 修改基础间距
setCssVar('q-space-base', '16px')
// 设置自定义全局字体
setCssVar('q-typography-font-family', "'Microsoft Yahei', sans-serif")

步骤3:保存用户设置到本地存储

为了让设置在页面刷新后依然生效,把配置存入localStorage:

// 保存设置
const saveUISettings = (settings) => {
  localStorage.setItem('ui-settings', JSON.stringify(settings))
}

// 加载已保存的设置
const loadUISettings = () => {
  const saved = localStorage.getItem('ui-settings')
  return saved ? JSON.parse(saved) : { fontSize: '16px', fontFamily: "'Roboto', sans-serif" }
}

// 应用初始化时加载设置
const initUISettings = () => {
  const settings = loadUISettings()
  setCssVar('q-body-font-size', settings.fontSize)
  setCssVar('q-typography-font-family', settings.fontFamily)
}

// 在App.vue的created钩子中调用initUISettings完成初始化

步骤4:UI设置页面实现示例

下面是一个简单的设置页面组件,让用户选择字号和自定义字体:

<template>
  <q-page class="row q-pa-md">
    <div class="col-12">
      <h3>UI 设置</h3>
      <q-select
        label="字号"
        v-model="selectedFontSize"
        :options="[
          { label: '小号', value: '14px' },
          { label: '中号', value: '16px' },
          { label: '大号', value: '18px' }
        ]"
        @input="updateFontSize"
      />
      <q-input
        label="自定义字体"
        v-model="customFontFamily"
        @input="updateFontFamily"
        placeholder="例如:'Arial', sans-serif"
        class="mt-4"
      />
    </div>
  </q-page>
</template>

<script setup>
import { ref, onMounted } from 'vue'
import { setCssVar } from 'quasar'

const selectedFontSize = ref('16px')
const customFontFamily = ref("'Roboto', sans-serif")

const updateFontSize = (size) => {
  setCssVar('q-body-font-size', size)
  saveUISettings({ fontSize: size, fontFamily: customFontFamily.value })
}

const updateFontFamily = (font) => {
  setCssVar('q-typography-font-family', font)
  saveUISettings({ fontSize: selectedFontSize.value, fontFamily: font })
}

const saveUISettings = (settings) => {
  localStorage.setItem('ui-settings', JSON.stringify(settings))
}

const loadUISettings = () => {
  const saved = localStorage.getItem('ui-settings')
  return saved ? JSON.parse(saved) : { fontSize: '16px', fontFamily: "'Roboto', sans-serif" }
}

onMounted(() => {
  const settings = loadUISettings()
  selectedFontSize.value = settings.fontSize
  customFontFamily.value = settings.fontFamily
  setCssVar('q-body-font-size', settings.fontSize)
  setCssVar('q-typography-font-family', settings.fontFamily)
})
</script>

注意事项

  • 确保映射的Sass变量在Quasar默认变量列表中存在,按需调整映射的属性。
  • 自定义字体需确保已加载(比如通过CDN或本地字体文件引入),否则会显示系统默认字体。

内容的提问来源于stack exchange,提问作者igorludi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 07:12:05