mobile.vue 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. <template>
  2. <div class="mb-layout">
  3. <Header />
  4. <main class="mb-layout-main">
  5. <slot />
  6. </main>
  7. <Footer />
  8. </div>
  9. </template>
  10. <script setup>
  11. import Header from '~/components/mobile/Header.vue'
  12. import Footer from '~/components/mobile/Footer.vue'
  13. const setRem = () => {
  14. if (!import.meta.client) return
  15. const screenWidth = document.documentElement.clientWidth
  16. // if (screenWidth >= TABLET_BREAKPOINT) {
  17. // document.documentElement.style.fontSize = MAX_FONT_SIZE + 'px'
  18. // return
  19. // }
  20. const baseFontSize = screenWidth / 10
  21. document.documentElement.style.fontSize = baseFontSize + 'px'
  22. }
  23. useHead({
  24. script: [
  25. {
  26. innerHTML: `
  27. (function() {
  28. var screenWidth = document.documentElement.clientWidth;
  29. document.documentElement.style.fontSize = screenWidth / 10 + 'px';
  30. })();
  31. `,
  32. type: 'text/javascript',
  33. tagPosition: 'head',
  34. key: 'rem-init'
  35. }
  36. ]
  37. })
  38. onMounted(() => {
  39. // setRem()
  40. window.addEventListener('resize', setRem, { passive: true })
  41. })
  42. onBeforeUnmount(() => {
  43. if (import.meta.client) window.removeEventListener('resize', setRem)
  44. })
  45. </script>
  46. <style scoped lang="scss">
  47. .mb-layout {
  48. width: 100%;
  49. min-height: 100vh;
  50. background-color: #030014;
  51. display: flex;
  52. flex-direction: column;
  53. box-sizing: border-box;
  54. }
  55. .mb-layout-main {
  56. flex: 1;
  57. width: 100%;
  58. padding: 44px 16px 16px;
  59. box-sizing: border-box;
  60. }
  61. </style>