引入 postcss-nested

This commit is contained in:
Hooray Hu
2024-08-26 23:16:47 +08:00
parent f68e32d99b
commit e8eb5d48e6
51 changed files with 187 additions and 163 deletions
+1
View File
@@ -98,6 +98,7 @@
"picocolors": "^1.0.1",
"plop": "^4.0.1",
"postcss": "^8.4.40",
"postcss-nested": "^6.2.0",
"sass": "^1.77.8",
"simple-git-hooks": "^2.11.1",
"stylelint": "^16.8.1",
+2 -2
View File
@@ -12,6 +12,6 @@ defineOptions({
</div>
</template>
<style lang="scss" scoped>
// 样式
<style scoped>
/* 样式 */
</style>
+2 -2
View File
@@ -17,6 +17,6 @@ defineOptions({
</div>
</template>
<style lang="scss" scoped>
// 样式
<style scoped>
/* 样式 */
</style>
+14
View File
@@ -243,6 +243,9 @@ importers:
postcss:
specifier: ^8.4.40
version: 8.4.40
postcss-nested:
specifier: ^6.2.0
version: 6.2.0(postcss@8.4.40)
sass:
specifier: ^1.77.8
version: 1.77.8
@@ -5855,6 +5858,12 @@ packages:
postcss-media-query-parser@0.2.3:
resolution: {integrity: sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig==}
postcss-nested@6.2.0:
resolution: {integrity: sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==}
engines: {node: '>=12.0'}
peerDependencies:
postcss: ^8.2.14
postcss-prefix-selector@1.16.0:
resolution: {integrity: sha512-rdVMIi7Q4B0XbXqNUEI+Z4E+pueiu/CS5E6vRCQommzdQ/sgsS4dK42U7GX8oJR+TJOtT+Qv3GkNo6iijUMp3Q==}
peerDependencies:
@@ -13984,6 +13993,11 @@ snapshots:
postcss-media-query-parser@0.2.3: {}
postcss-nested@6.2.0(postcss@8.4.40):
dependencies:
postcss: 8.4.40
postcss-selector-parser: 6.1.1
postcss-prefix-selector@1.16.0(postcss@5.2.18):
dependencies:
postcss: 5.2.18
+2 -1
View File
@@ -1,5 +1,6 @@
export default {
plugins: {
autoprefixer: {},
'autoprefixer': {},
'postcss-nested': {},
},
}
@@ -1,20 +1,24 @@
// 页面布局 CSS 变量
/* 页面布局 CSS 变量 */
:root {
// 头部高度
/* 头部高度 */
--g-header-height: 60px;
// 侧边栏宽度
/* 侧边栏宽度 */
--g-main-sidebar-width: 80px;
--g-sub-sidebar-width: 220px;
--g-sub-sidebar-collapse-width: 64px;
// 侧边栏 Logo 区域高度
/* 侧边栏 Logo 区域高度 */
--g-sidebar-logo-height: 50px;
// 标签栏高度
/* 标签栏高度 */
--g-tabbar-height: 50px;
// 工具栏高度
/* 工具栏高度 */
--g-toolbar-height: 50px;
}
// 明暗模式 CSS 变量
/* 明暗模式 CSS 变量 */
/* stylelint-disable-next-line no-duplicate-selectors */
:root {
--g-box-shadow-color: rgb(0 0 0 / 12%);
@@ -87,22 +91,21 @@ body {
box-sizing: inherit;
}
// 右侧内容区针对fixed元素,有横向铺满的需求,可在fixed元素上设置 [data-fixed-calc-width]
/* 右侧内容区针对fixed元素,有横向铺满的需求,可在fixed元素上设置 [data-fixed-calc-width] */
[data-fixed-calc-width] {
position: fixed;
right: 0;
left: 50%;
width: calc(100% - var(--g-main-sidebar-actual-width) - var(--g-sub-sidebar-actual-width));
transform: translateX(-50%) translateX(calc(var(--g-main-sidebar-actual-width) / 2)) translateX(calc(var(--g-sub-sidebar-actual-width) / 2));
}
[data-mode="mobile"] {
[data-fixed-calc-width] {
[data-mode="mobile"] & {
width: 100% !important;
transform: translateX(-50%) !important;
}
}
// textarea 字体跟随系统
/* textarea 字体跟随系统 */
textarea {
font-family: inherit;
}
@@ -110,12 +113,12 @@ textarea {
/* Overrides Floating Vue */
.v-popper--theme-dropdown,
.v-popper--theme-tooltip {
--at-apply: inline-flex;
--uno: inline-flex;
}
.v-popper--theme-dropdown .v-popper__inner,
.v-popper--theme-tooltip .v-popper__inner {
--at-apply: bg-white dark-bg-stone-8 text-dark dark-text-white rounded shadow ring-1 ring-gray-200 dark-ring-gray-800 border border-solid border-stone/20 text-xs font-normal;
--uno: bg-white dark-bg-stone-8 text-dark dark-text-white rounded shadow ring-1 ring-gray-200 dark-ring-gray-800 border border-solid border-stone/20 text-xs font-normal;
box-shadow: 0 6px 30px rgb(0 0 0 / 10%);
}
@@ -124,12 +127,12 @@ textarea {
.v-popper--theme-dropdown .v-popper__arrow-inner {
visibility: visible;
--at-apply: border-white dark-border-stone-8;
--uno: border-white dark-border-stone-8;
}
.v-popper--theme-tooltip .v-popper__arrow-outer,
.v-popper--theme-dropdown .v-popper__arrow-outer {
--at-apply: border-stone/20;
--uno: border-stone/20;
}
.v-popper--theme-tooltip.v-popper--shown,
+1 -1
View File
@@ -114,7 +114,7 @@ const onPreview: UploadProps['onPreview'] = (e) => {
</ElUpload>
</template>
<style lang="scss" scoped>
<style scoped>
:deep(.el-upload.is-drag) {
display: inline-block;
+1 -1
View File
@@ -34,7 +34,7 @@ function onScroll() {
</div>
</template>
<style lang="scss" scoped>
<style scoped>
.fixed-action-bar {
box-shadow: 0 0 1px 0 var(--g-box-shadow-color);
+1 -1
View File
@@ -34,7 +34,7 @@ const realHeight = computed(() => {
</ElImage>
</template>
<style lang="scss" scoped>
<style scoped>
.el-image {
background-color: var(--el-fill-color);
border-radius: 5px;
+9 -5
View File
@@ -136,7 +136,7 @@ const onSuccess: UploadProps['onSuccess'] = (res) => {
</div>
</template>
<style lang="scss" scoped>
<style scoped>
.upload-container {
line-height: initial;
}
@@ -160,14 +160,16 @@ const onSuccess: UploadProps['onSuccess'] = (res) => {
transition: opacity 0.3s;
.actions {
position: absolute;
top: 50%;
left: 50%;
display: flex;
flex-wrap: wrap;
align-items: center;
justify-content: center;
width: 100px;
height: 100px;
@include position-center(xy);
transform: translateX(-50%) translateY(-50%);
span {
width: 50%;
@@ -235,9 +237,11 @@ const onSuccess: UploadProps['onSuccess'] = (res) => {
}
.el-progress {
position: absolute;
top: 50%;
left: 50%;
z-index: 1;
@include position-center(xy);
transform: translateX(-50%) translateY(-50%);
.el-progress__text {
color: var(--el-text-color-placeholder);
+9 -5
View File
@@ -153,7 +153,7 @@ const onSuccess: UploadProps['onSuccess'] = (res) => {
</div>
</template>
<style lang="scss" scoped>
<style scoped>
.upload-container {
line-height: initial;
}
@@ -180,14 +180,16 @@ const onSuccess: UploadProps['onSuccess'] = (res) => {
transition: opacity 0.3s;
.actions {
position: absolute;
top: 50%;
left: 50%;
display: flex;
flex-wrap: wrap;
align-items: center;
justify-content: center;
width: 100px;
height: 100px;
@include position-center(xy);
transform: translateX(-50%) translateY(-50%);
span {
width: 50%;
@@ -260,9 +262,11 @@ const onSuccess: UploadProps['onSuccess'] = (res) => {
}
.el-progress {
position: absolute;
top: 50%;
left: 50%;
z-index: 1;
@include position-center(xy);
transform: translateX(-50%) translateY(-50%);
.el-progress__text {
color: var(--el-text-color-placeholder);
+1 -1
View File
@@ -132,7 +132,7 @@ function testAccount(account: string) {
</ElForm>
</template>
<style lang="scss" scoped>
<style scoped>
:deep(input[type="password"]::-ms-reveal) {
display: none;
}
+1 -1
View File
@@ -113,7 +113,7 @@ function handleRegister() {
</ElForm>
</template>
<style lang="scss" scoped>
<style scoped>
:deep(input[type="password"]::-ms-reveal) {
display: none;
}
+1 -1
View File
@@ -91,7 +91,7 @@ function handleReset() {
</ElForm>
</template>
<style lang="scss" scoped>
<style scoped>
:deep(input[type="password"]::-ms-reveal) {
display: none;
}
+22 -22
View File
@@ -360,96 +360,96 @@ function handleCopy() {
</HSlideover>
</template>
<style lang="scss" scoped>
<style scoped>
.divider {
--at-apply: flex items-center justify-between gap-4 my-4 whitespace-nowrap text-sm font-500;
--uno: flex items-center justify-between gap-4 my-4 whitespace-nowrap text-sm font-500;
&::before,
&::after {
--at-apply: content-empty w-full h-1px bg-stone-2 dark-bg-stone-6;
--uno: content-empty w-full h-1px bg-stone-2 dark-bg-stone-6;
}
}
.menu-mode {
--at-apply: flex items-center justify-center gap-4 pb-4;
--uno: flex items-center justify-center gap-4 pb-4;
.mode {
--at-apply: relative w-16 h-12 rounded-2 ring-1 ring-stone-2 dark-ring-stone-7 cursor-pointer transition;
--uno: relative w-16 h-12 rounded-2 ring-1 ring-stone-2 dark-ring-stone-7 cursor-pointer transition;
&.active {
--at-apply: ring-ui-primary ring-2;
--uno: ring-ui-primary ring-2;
}
&::before,
&::after,
.mode-container {
--at-apply: absolute pointer-events-none;
--uno: absolute pointer-events-none;
}
&::before {
--at-apply: content-empty bg-ui-primary;
--uno: content-empty bg-ui-primary;
}
&::after {
--at-apply: content-empty bg-ui-primary/60;
--uno: content-empty bg-ui-primary/60;
}
.mode-container {
--at-apply: bg-ui-primary/20 border-width-1.5 border-dashed border-ui-primary;
--uno: bg-ui-primary/20 border-width-1.5 border-dashed border-ui-primary;
&::before {
--at-apply: content-empty absolute w-full h-full;
--uno: content-empty absolute w-full h-full;
}
}
&-side {
&::before {
--at-apply: top-2 bottom-2 left-2 w-2 rounded-tl-1 rounded-bl-1;
--uno: top-2 bottom-2 left-2 w-2 rounded-tl-1 rounded-bl-1;
}
&::after {
--at-apply: top-2 bottom-2 left-4.5 w-3;
--uno: top-2 bottom-2 left-4.5 w-3;
}
.mode-container {
--at-apply: inset-t-2 inset-r-2 inset-b-2 inset-l-8 rounded-tr-1 rounded-br-1;
--uno: inset-t-2 inset-r-2 inset-b-2 inset-l-8 rounded-tr-1 rounded-br-1;
}
}
&-head {
&::before {
--at-apply: top-2 left-2 right-2 h-2 rounded-tl-1 rounded-tr-1;
--uno: top-2 left-2 right-2 h-2 rounded-tl-1 rounded-tr-1;
}
&::after {
--at-apply: top-4.5 left-2 bottom-2 w-3 rounded-bl-1;
--uno: top-4.5 left-2 bottom-2 w-3 rounded-bl-1;
}
.mode-container {
--at-apply: inset-t-4.5 inset-r-2 inset-b-2 inset-l-5.5 rounded-br-1;
--uno: inset-t-4.5 inset-r-2 inset-b-2 inset-l-5.5 rounded-br-1;
}
}
&-single {
&::after {
--at-apply: top-2 left-2 bottom-2 w-3 rounded-tl-1 rounded-bl-1;
--uno: top-2 left-2 bottom-2 w-3 rounded-tl-1 rounded-bl-1;
}
.mode-container {
--at-apply: inset-t-2 inset-r-2 inset-b-2 inset-l-5.5 rounded-tr-1 rounded-br-1;
--uno: inset-t-2 inset-r-2 inset-b-2 inset-l-5.5 rounded-tr-1 rounded-br-1;
}
}
}
}
.setting-item {
--at-apply: flex items-center justify-between gap-4 px-4 py-2 rounded-2 transition hover-bg-stone-1 dark-hover-bg-stone-9;
--uno: flex items-center justify-between gap-4 px-4 py-2 rounded-2 transition hover-bg-stone-1 dark-hover-bg-stone-9;
.label {
--at-apply: flex items-center flex-shrink-0 gap-2 text-sm;
--uno: flex items-center flex-shrink-0 gap-2 text-sm;
i {
--at-apply: text-xl text-orange cursor-help;
--uno: text-xl text-orange cursor-help;
}
}
}
+1 -1
View File
@@ -4,7 +4,7 @@
</div>
</template>
<style lang="scss" scoped>
<style scoped>
:deep(.breadcrumb-item) {
&:first-child {
.separator {
+6 -6
View File
@@ -107,7 +107,7 @@ onUnmounted(() => {
</div>
</template>
<style lang="scss" scoped>
<style scoped>
.buy-it {
position: fixed;
top: 50%;
@@ -151,23 +151,23 @@ onUnmounted(() => {
}
&:nth-child(1) {
--at-apply: bg-pink;
--uno: bg-pink;
}
&:nth-child(2) {
--at-apply: bg-orange;
--uno: bg-orange;
}
&:nth-child(3) {
--at-apply: bg-green;
--uno: bg-green;
}
&:nth-child(4) {
--at-apply: bg-red;
--uno: bg-red;
}
&:nth-child(5) {
--at-apply: bg-stone;
--uno: bg-stone;
}
i {
+4 -4
View File
@@ -21,17 +21,17 @@ const settingsStore = useSettingsStore()
</footer>
</template>
<style lang="scss" scoped>
<style scoped>
.copyright {
--at-apply: flex items-center justify-center flex-wrap my-4 px-4 text-sm text-stone-5;
--uno: flex items-center justify-center flex-wrap my-4 px-4 text-sm text-stone-5;
span,
a {
--at-apply: px-1;
--uno: px-1;
}
a {
--at-apply: text-center no-underline text-stone-5 hover-text-dark dark-hover-text-light transition;
--uno: text-center no-underline text-stone-5 hover-text-dark dark-hover-text-light transition;
}
}
</style>
+4 -4
View File
@@ -61,7 +61,7 @@ function handlerMouserScroll(event: WheelEvent) {
</Transition>
</template>
<style lang="scss" scoped>
<style scoped>
header {
position: fixed;
top: 0;
@@ -115,10 +115,10 @@ header {
overflow-x: auto;
mask-image: linear-gradient(to right, transparent, #000 20px, #000 calc(100% - 20px), transparent);
// firefox隐藏滚动条
/* firefox隐藏滚动条 */
scrollbar-width: none;
// chrome隐藏滚动条
/* chrome隐藏滚动条 */
&::-webkit-scrollbar {
display: none;
}
@@ -151,7 +151,7 @@ header {
}
}
// 头部动画
/* 头部动画 */
.header-enter-active,
.header-leave-active {
transition: transform 0.3s;
+4 -4
View File
@@ -46,7 +46,7 @@ const { switchTo } = useMenu()
</Transition>
</template>
<style lang="scss" scoped>
<style scoped>
.main-sidebar-container {
position: relative;
z-index: 1;
@@ -69,10 +69,10 @@ const { switchTo } = useMenu()
overflow: hidden auto;
overscroll-behavior: contain;
// firefox隐藏滚动条
/* firefox隐藏滚动条 */
scrollbar-width: none;
// chrome隐藏滚动条
/* chrome隐藏滚动条 */
&::-webkit-scrollbar {
display: none;
}
@@ -100,7 +100,7 @@ const { switchTo } = useMenu()
}
}
// 主侧边栏动画
/* 主侧边栏动画 */
.main-sidebar-enter-active,
.main-sidebar-leave-active {
transition: 0.3s;
+4 -4
View File
@@ -97,7 +97,7 @@ onMounted(() => {
</div>
</template>
<style lang="scss" scoped>
<style scoped>
.sub-sidebar-container {
position: absolute;
top: 0;
@@ -140,10 +140,10 @@ onMounted(() => {
overflow: hidden auto;
overscroll-behavior: contain;
// firefox隐藏滚动条
/* firefox隐藏滚动条 */
scrollbar-width: none;
// chrome隐藏滚动条
/* chrome隐藏滚动条 */
&::-webkit-scrollbar {
display: none;
}
@@ -166,7 +166,7 @@ onMounted(() => {
}
}
// 次侧边栏动画
/* 次侧边栏动画 */
.sub-sidebar-enter-active {
transition: 0.2s;
}
+31 -35
View File
@@ -198,48 +198,44 @@ onUnmounted(() => {
</div>
</template>
<style lang="scss">
<style>
.tabbar-contextmenu {
z-index: 1000;
--uno: fixed ring-1 ring-stone-2 dark-ring-stone-7 shadow-2xl;
.mx-context-menu {
--at-apply: fixed ring-1 ring-stone-2 dark-ring-stone-7 shadow-2xl;
background-color: var(--g-container-bg);
background-color: var(--g-container-bg);
.mx-context-menu-items .mx-context-menu-item {
--uno: transition-background-color;
.mx-context-menu-items .mx-context-menu-item {
--at-apply: transition-background-color;
&:not(.disabled):hover {
--at-apply: cursor-pointer bg-stone-1 dark-bg-stone-9;
}
span {
color: initial;
}
.icon {
color: initial;
}
&.disabled span,
&.disabled .icon {
opacity: 0.25;
}
&:not(.disabled):hover {
--uno: cursor-pointer bg-stone-1 dark-bg-stone-9;
}
.mx-context-menu-item-sperator {
background-color: var(--g-container-bg);
span {
color: initial;
}
&::after {
--at-apply: bg-stone-2 dark-bg-stone-7;
}
.icon {
color: initial;
}
&.disabled span,
&.disabled .icon {
opacity: 0.25;
}
}
.mx-context-menu-item-sperator {
background-color: var(--g-container-bg);
&::after {
--uno: bg-stone-2 dark-bg-stone-7;
}
}
}
</style>
<style lang="scss" scoped>
<style scoped>
.tabbar-container {
position: relative;
height: var(--g-tabbar-height);
@@ -253,10 +249,10 @@ onUnmounted(() => {
overflow-y: hidden;
white-space: nowrap;
// firefox隐藏滚动条
/* firefox隐藏滚动条 */
scrollbar-width: none;
// chrome隐藏滚动条
/* chrome隐藏滚动条 */
&::-webkit-scrollbar {
display: none;
}
@@ -410,14 +406,14 @@ onUnmounted(() => {
transform: translateY(-50%);
&:hover {
--at-apply: ring-1 ring-stone-3 dark-ring-stone-7;
--uno: ring-1 ring-stone-3 dark-ring-stone-7;
background-color: var(--g-bg);
}
}
.hotkey-number {
--at-apply: ring-1 ring-stone-3 dark-ring-stone-7;
--uno: ring-1 ring-stone-3 dark-ring-stone-7;
position: absolute;
top: 50%;
@@ -440,7 +436,7 @@ onUnmounted(() => {
}
}
// 标签栏动画
/* 标签栏动画 */
.tabs {
.tabbar-move,
.tabbar-enter-active,
@@ -45,8 +45,8 @@ function pathCompile(path: string) {
</Breadcrumb>
</template>
<style lang="scss" scoped>
// 面包屑动画
<style scoped>
/* 面包屑动画 */
.breadcrumb-enter-active {
transition: transform 0.3s, opacity 0.3s;
}
@@ -21,7 +21,7 @@ const settingsStore = useSettingsStore()
</div>
</template>
<style lang="scss" scoped>
<style scoped>
.toolbar-container {
height: var(--g-toolbar-height);
background-color: var(--g-container-bg);
+1 -1
View File
@@ -53,7 +53,7 @@ watch(scrollTop, (val, oldVal) => {
</div>
</template>
<style lang="scss" scoped>
<style scoped>
.topbar-container {
position: absolute;
top: 0;
+1 -1
View File
@@ -46,7 +46,7 @@ function open() {
</div>
</template>
<style lang="scss" scoped>
<style scoped>
.slide-right-enter-active {
transition: 0.2s;
}
+3 -3
View File
@@ -111,7 +111,7 @@ const enableAppSetting = import.meta.env.VITE_APP_SETTING === 'true'
</div>
</template>
<style lang="scss" scoped>
<style scoped>
[data-mode="mobile"] {
.sidebar-container {
transform: translateX(calc((var(--g-main-sidebar-width) + var(--g-sub-sidebar-width)) * -1));
@@ -242,7 +242,7 @@ header:not(.header-leave-active) + .wrapper {
}
.app-setting {
--at-apply: text-white dark-text-dark bg-ui-primary;
--uno: text-white dark-text-dark bg-ui-primary;
position: fixed;
top: calc(50% + 250px);
@@ -273,7 +273,7 @@ header:not(.header-leave-active) + .wrapper {
}
}
// 主内容区动画
/* 主内容区动画 */
.slide-right-enter-active {
transition: 0.2s;
}
+1 -1
View File
@@ -33,7 +33,7 @@ import icons from '@/iconify/index.json'
import 'virtual:uno.css'
// 全局样式
import '@/assets/styles/globals.scss'
import '@/assets/styles/globals.css'
const app = createApp(App)
app.use(FloatingVue, {
+1 -1
View File
@@ -1,7 +1,7 @@
import { createRouter, createWebHashHistory } from 'vue-router'
import type { RouteRecordRaw } from 'vue-router'
import { useNProgress } from '@vueuse/integrations/useNProgress'
import '@/assets/styles/nprogress.scss'
import '@/assets/styles/nprogress.css'
// 路由相关数据
import { asyncRoutes, asyncRoutesByFilesystem, constantRoutes, constantRoutesByFilesystem } from './routes'
@@ -249,7 +249,7 @@
</div>
</template>
<style lang="scss" scoped>
<style scoped>
.el-row {
margin-bottom: 20px;
}
@@ -28,7 +28,7 @@ const icon = icons.filter(item => item.prefix === 'ep')[0]
</div>
</template>
<style lang="scss" scoped>
<style scoped>
.demo {
> i {
margin: 0 20px;
@@ -63,7 +63,7 @@
</div>
</template>
<style lang="scss" scoped>
<style scoped>
.el-link {
margin: 0 5px;
}
@@ -122,12 +122,12 @@ const toggle = ref(false)
</div>
</template>
<style lang="scss" scoped>
<style scoped>
.page-main {
--at-apply: flex-grow-1 flex-shrink-1 flex-basis-400px m-0 min-h-50;
--uno: flex-grow-1 flex-shrink-1 flex-basis-400px m-0 min-h-50;
:deep(.main-container) {
--at-apply: flex items-center justify-center flex-1 gap-4;
--uno: flex items-center justify-center flex-1 gap-4;
}
}
</style>
@@ -420,7 +420,7 @@ function onToggle(fold: boolean) {
</div>
</template>
<style lang="scss" scoped>
<style scoped>
.search-form {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(330px, 1fr));
+1 -1
View File
@@ -526,7 +526,7 @@ function open(url: string) {
</div>
</template>
<style lang="scss" scoped>
<style scoped>
.rule {
margin-bottom: 20px;
}
@@ -126,7 +126,7 @@ const dataList = ref([
</div>
</template>
<style lang="scss" scoped>
<style scoped>
.absolute-container {
position: absolute;
display: flex;
@@ -138,7 +138,7 @@ const dataList = ref([
margin-bottom: 0;
}
// 让 page-main 的高度自适应
/* 让 page-main 的高度自适应 */
.page-main {
flex: 1;
overflow: auto;
+1 -1
View File
@@ -82,7 +82,7 @@ function showInfo(iconName: string) {
</div>
</template>
<style lang="scss" scoped>
<style scoped>
.el-card {
margin-bottom: 15px;
+10 -10
View File
@@ -201,30 +201,30 @@ function open(url: string) {
</div>
</template>
<style lang="scss" scoped>
<style scoped>
.text-emphasis {
text-emphasis-style: "❤";
}
.ecology {
--at-apply: flex-1 m-0;
--uno: flex-1 m-0;
:deep(.title-container) {
--at-apply: flex items-center justify-between flex-wrap gap-4;
--uno: flex items-center justify-between flex-wrap gap-4;
.title-info {
--at-apply: flex items-center gap-4;
--uno: flex items-center gap-4;
img {
--at-apply: block w-12 h-12;
--uno: block w-12 h-12;
}
h1 {
--at-apply: m-0 text-2xl;
--uno: m-0 text-2xl;
}
h2 {
--at-apply: m-0 text-base text-stone-5 font-normal;
--uno: m-0 text-base text-stone-5 font-normal;
}
}
}
@@ -232,14 +232,14 @@ function open(url: string) {
.question {
.answer {
--at-apply: m-0 pl-6 text-stone-5;
--uno: m-0 pl-6 text-stone-5;
li {
--at-apply: mb-2 lh-6 last:mb-0;
--uno: mb-2 lh-6 last:mb-0;
}
span {
--at-apply: text-stone-7 dark-text-stone-3 font-bold;
--uno: text-stone-7 dark-text-stone-3 font-bold;
}
}
}
@@ -13,7 +13,7 @@ export default defineComponent({
})
</script>
<style lang="scss" scoped>
<style scoped>
.test {
font-size: 24px;
+1 -1
View File
@@ -75,7 +75,7 @@ onBeforeRouteLeave((to, from) => {
</div>
</template>
<style lang="scss" scoped>
<style scoped>
.block {
margin-bottom: 10px;
}
+4 -3
View File
@@ -61,7 +61,7 @@ const formRef = ref()
<Copyright />
</template>
<style lang="scss" scoped>
<style scoped>
.bg-banner {
position: fixed;
z-index: 0;
@@ -124,9 +124,10 @@ const formRef = ref()
background-color: var(--g-bg);
.banner {
position: absolute;
top: 50%;
width: 100%;
@include position-center(y);
transform: translateY(-50%);
}
}
+1 -1
View File
@@ -125,7 +125,7 @@ function editPassword() {
</div>
</template>
<style lang="scss" scoped>
<style scoped>
:deep(.el-tabs) {
.el-tabs__header .el-tabs__nav {
.el-tabs__active-bar {
+1 -1
View File
@@ -242,7 +242,7 @@ function open(url: string) {
</div>
</template>
<style lang="scss" scoped>
<style scoped>
.box {
width: 100px;
height: 100px;
@@ -4,7 +4,7 @@
</div>
</template>
<style lang="scss" scoped>
<style scoped>
.alert {
padding: 20px 20px 0;
background-color: var(--g-container-bg);
+1 -1
View File
@@ -83,7 +83,7 @@ function open(url: string) {
</div>
</template>
<style lang="scss" scoped>
<style scoped>
.count-to {
display: inline-block;
margin-bottom: 20px;
+1 -1
View File
@@ -51,7 +51,7 @@ function open(url: string) {
</div>
</template>
<style lang="scss" scoped>
<style scoped>
:deep(.bytemd-fullscreen) {
z-index: 2000;
}
+1 -1
View File
@@ -97,7 +97,7 @@ function open(url: string) {
</div>
</template>
<style lang="scss" scoped>
<style scoped>
.page-main {
text-align: center;
}
+1 -1
View File
@@ -49,7 +49,7 @@ function open(url: string) {
</div>
</template>
<style lang="scss" scoped>
<style scoped>
.splitpanes__pane {
display: flex;
align-items: center;
+2 -2
View File
@@ -144,7 +144,7 @@ function open(url: string) {
</div>
</template>
<style lang="scss" scoped>
<style scoped>
.swiper {
width: 100%;
height: 300px;
@@ -153,7 +153,7 @@ function open(url: string) {
display: flex;
align-items: center;
justify-content: center;
font-size: 36.4px;
font-size: 36px;
font-weight: 700;
text-align: center;
background-color: #fff;
+1 -1
View File
@@ -94,7 +94,7 @@ function open(url: string) {
</div>
</template>
<style lang="scss" scoped>
<style scoped>
.preview {
margin-top: 10px;