diff --git a/src/App.vue b/src/App.vue index e0061e3..b507c52 100644 --- a/src/App.vue +++ b/src/App.vue @@ -134,20 +134,20 @@ onUnmounted(() => { pointer-events: none; } -.offline-indicator { - background-color: #ff6b6b; - color: white; - padding: 8px 16px; - border-radius: 0 0 4px 4px; - font-size: 14px; - display: flex; - align-items: center; - box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); - pointer-events: auto; -} - -.offline-icon { - margin-right: 8px; +.offline-indicator { + background-color: #ff6b6b; + color: white; + padding: 0.5rem 1rem; + border-radius: 0 0 0.25rem 0.25rem; + font-size: 0.875rem; + display: flex; + align-items: center; + box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.2); + pointer-events: auto; +} + +.offline-icon { + margin-right: 0.5rem; } .offline-text { diff --git a/src/common/base.css b/src/common/base.css index ac8b093..e5bdd08 100644 --- a/src/common/base.css +++ b/src/common/base.css @@ -3,24 +3,24 @@ ** 否则页面将无法正常显示 ** ************************************************************/ -html { - font-size: 16px; - user-select: none; - -webkit-user-drag: none; - -webkit-tap-highlight-color: transparent; - touch-action: pan-y; - overflow: hidden; -} - -/* 禁止页面整体滚动 */ -body { - overflow: hidden; - position: fixed; - width: 100%; - height: 100%; - -webkit-overflow-scrolling: touch; - overscroll-behavior: none; - touch-action: pan-y; +html { + font-size: 18px; + user-select: none; + -webkit-user-drag: none; + -webkit-tap-highlight-color: transparent; + touch-action: pan-y; + overflow: hidden; +} + +/* 禁止页面整体滚动 */ +body { + overflow: hidden; + position: fixed; + width: 100%; + height: 100%; + -webkit-overflow-scrolling: touch; + overscroll-behavior: none; + touch-action: pan-y; } body { diff --git a/src/components/Header.vue b/src/components/Header.vue index 2015756..0f9b632 100644 --- a/src/components/Header.vue +++ b/src/components/Header.vue @@ -1,257 +1,257 @@ - - - - - + + + + + diff --git a/src/components/Modal.vue b/src/components/Modal.vue index 13fcb10..9d89656 100644 --- a/src/components/Modal.vue +++ b/src/components/Modal.vue @@ -246,8 +246,8 @@ defineExpose({ show }) font-size: var(--confirmFontSize, 1rem); max-width: 75vw; min-width: 20em; - box-shadow: 0px 35px 35px -10px rgba(0, 0, 0, 0.33); - border-radius: 10px; + box-shadow: 0rem 2.1875rem 2.1875rem -0.625rem rgba(0, 0, 0, 0.33); + border-radius: 0.625rem; position: relative; white-space: break-spaces; word-break: break-all; @@ -288,13 +288,13 @@ defineExpose({ show }) width: 100%; padding: 0.8em; font-size: 1em; - border: 1px solid var(--confirmBtnBorder, #f1f1f1); - border-radius: 4px; + border: 0.0625rem solid var(--confirmBtnBorder, #f1f1f1); + border-radius: 0.25rem; box-sizing: border-box; outline: none; background: var(--confirmTheme, #fff); color: var(--confirmColor, #636363); - box-shadow: 0px 0px 4px inset rgba(0, 0, 0, 0.12); + box-shadow: 0rem 0rem 0.25rem inset rgba(0, 0, 0, 0.12); } .pd-input::placeholder { diff --git a/src/components/NoteItem.vue b/src/components/NoteItem.vue index fec9c05..b023bc1 100644 --- a/src/components/NoteItem.vue +++ b/src/components/NoteItem.vue @@ -1,411 +1,378 @@ - - - - - + + + diff --git a/src/components/RichTextEditor.vue b/src/components/RichTextEditor.vue index 1ff3ce9..77e68f3 100644 --- a/src/components/RichTextEditor.vue +++ b/src/components/RichTextEditor.vue @@ -6,27 +6,22 @@ -
- - + + + + + diff --git a/src/components/SettingGroup.vue b/src/components/SettingGroup.vue index b4d5616..37dc8e4 100644 --- a/src/components/SettingGroup.vue +++ b/src/components/SettingGroup.vue @@ -1,75 +1,75 @@ - - - - - + + + + + diff --git a/src/pages/NoteEditorPage.vue b/src/pages/NoteEditorPage.vue index 96d59c2..279768f 100644 --- a/src/pages/NoteEditorPage.vue +++ b/src/pages/NoteEditorPage.vue @@ -446,27 +446,27 @@ onBeforeUnmount(async () => { -webkit-overflow-scrolling: touch; } } -.offline-banner { - position: fixed; - top: 0; - left: 0; - right: 0; - z-index: 10000; - background-color: #ff6b6b; - color: white; - padding: 8px 16px; - text-align: center; - box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); -} -.offline-content { - display: flex; - align-items: center; - justify-content: center; - font-size: 14px; - font-weight: 500; -} -.offline-icon { - margin-right: 8px; +.offline-banner { + position: fixed; + top: 0; + left: 0; + right: 0; + z-index: 10000; + background-color: #ff6b6b; + color: white; + padding: 0.5rem 1rem; + text-align: center; + box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.2); +} +.offline-content { + display: flex; + align-items: center; + justify-content: center; + font-size: 0.875rem; + font-weight: 500; +} +.offline-icon { + margin-right: 0.5rem; } .note-container { flex: 1; diff --git a/src/pages/NoteListPage.vue b/src/pages/NoteListPage.vue index 4116b6e..35217a1 100644 --- a/src/pages/NoteListPage.vue +++ b/src/pages/NoteListPage.vue @@ -395,21 +395,21 @@ const notes = computed(() => store.notes) z-index: 10000; background-color: #ff6b6b; color: white; - padding: 8px 16px; + padding: 0.5rem 1rem; text-align: center; - box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.2); } .offline-content { display: flex; align-items: center; justify-content: center; - font-size: 14px; + font-size: 0.875rem; font-weight: 500; } .offline-icon { - margin-right: 8px; + margin-right: 0.5rem; } .folder-list { @@ -421,7 +421,7 @@ const notes = computed(() => store.notes) background-color: var(--background-card); border-radius: 0.5rem; box-shadow: 0 0.125rem 0.25rem var(--shadow); - border: 1px solid #f0ece7; + border: 0.0625rem solid #f0ece7; overflow: hidden; } @@ -466,9 +466,9 @@ const notes = computed(() => store.notes) transition: all 0.3s cubic-bezier(0.25, 0.46, 0.45, 0.94); } -.note-list-leave-to { - opacity: 0; - transform: translateX(-30px); +.note-list-leave-to { + opacity: 0; + transform: translateX(-1.875rem); } .note-list-move { @@ -486,23 +486,23 @@ const notes = computed(() => store.notes) transition: all 0.3s cubic-bezier(0.25, 0.46, 0.45, 0.94); } -.folder-slide-enter-from { - opacity: 0; - transform: scale(0.8) translateY(-20px); -} - -.folder-slide-enter-to { - opacity: 1; - transform: scale(1) translateY(0); -} - -.folder-slide-leave-from { - opacity: 1; - transform: scale(1) translateY(0); -} - -.folder-slide-leave-to { - opacity: 0; - transform: scale(0.8) translateY(-20px); +.folder-slide-enter-from { + opacity: 0; + transform: scale(0.8) translateY(-1.25rem); +} + +.folder-slide-enter-to { + opacity: 1; + transform: scale(1) translateY(0); +} + +.folder-slide-leave-from { + opacity: 1; + transform: scale(1) translateY(0); +} + +.folder-slide-leave-to { + opacity: 0; + transform: scale(0.8) translateY(-1.25rem); } diff --git a/src/utils/sizeUtils.js b/src/utils/sizeUtils.js new file mode 100644 index 0000000..9734c4f --- /dev/null +++ b/src/utils/sizeUtils.js @@ -0,0 +1,29 @@ +/** + * 获取根元素的字体大小(以像素为单位) + * @returns {number} 根元素的字体大小(像素) + */ +export function getRootFontSize() { + return parseFloat(getComputedStyle(document.documentElement).fontSize); +} + +/** + * 将像素值转换为rem值 + * @param {number} px - 像素值 + * @param {number} [rootFontSize] - 根字体大小,如果不提供则自动获取 + * @returns {number} rem值 + */ +export function pxToRem(px, rootFontSize = null) { + const fontSize = rootFontSize || getRootFontSize(); + return px / fontSize; +} + +/** + * 将像素值转换为rem字符串(带rem单位) + * @param {number} px - 像素值 + * @param {number} [rootFontSize] - 根字体大小,如果不提供则自动获取 + * @returns {string} rem字符串 + */ +export function pxToRemStr(px, rootFontSize = null) { + const remValue = pxToRem(px, rootFontSize); + return `${remValue}rem`; +} \ No newline at end of file