Nuxt3 服务端渲染 + elementplus黑暗模式 (二)

有了上一章的基础,接下来我们来引入我们开发所需要的UI组件elementplus,实现顶部和底部整体布局以及配置黑暗模式 。效果如下:

基础模式

黑暗模式

一、引入组件

//安装elementplus
1、npm install element-plus --save

//安装 @element-plus/icons 图标库
2、npm install  @element-plus/icons

二、然后在我们的plugins创建element-plus.client.ts文件。注意:如果我们在文件命名时加上 .client,例如 element-plus.client.ts,此时代表该插件只在客户端加载

import *  as ElementPlus from 'element-plus/dist/index.full'
import zhCn from 'element-plus/es/locale/lang/zh-cn'
// @ts-ignore
import { defineNuxtPlugin } from '#app'

export default defineNuxtPlugin(nuxtApp => {
  nuxtApp.vueApp.use(ElementPlus, {
    locale: zhCn,
  })
})

三、找到我们的整体布局组件default.vue,我们来使用一下引入的elementplus,看是否引入成功。(我做了一个简单布局,使用了scss,所以复制的时候需要大家提前安装一下scss)

1、首先处理顶部布局,在这里我没增加一个城市下啦选择功能

首先引入 element-china-area-data

npm install element-china-area-data

其次我们在plugins 引入城市选择插件。 新建 city.client.ts

import { regionData ,CodeToText,TextToCode} from 'element-china-area-data'
// @ts-ignore
import { defineNuxtPlugin } from '#app'

export default defineNuxtPlugin(nuxtApp => {
    // @ts-ignore
    // return nuxtApp.vueApp.use(regionData)
    return {
        provide: {
            regionData,
            CodeToText,
            TextToCode
        }
    }
})

最后我们在default.vue 引入

const { $router, $regionData,$TextToCode, $CodeToText } = useNuxtApp()

//使用
const handleChange = (value) => {
  ruleForm.region = $CodeToText[value[0]]+'/'+$CodeToText[value[1]]+'/'+$CodeToText[value[2]]
  ruleForm.sheng = $CodeToText[value[0]]
  ruleForm.shi = $CodeToText[value[1]]
  ruleForm.xian = $CodeToText[value[2]]
}

//默认赋值
state.selectedOptions = [
  $TextToCode ['河南省'].code,
  $TextToCode ['河南省']['郑州市'].code,
  $TextToCode ['河南省']['郑州市']['金水区'].code
]

2、接下来我们言归正传,我们来在顶部引入一个模式切换组件。如图:

新增模式切换功能

首先我们引入图标及切换组件:

//引入我们需要的图标
import { Moon, Sunny,  Search} from '@element-plus/icons-vue'
//引入样式文件
import theme from '@/utils/theme'
import { colorMix } from "@/utils/tool"

//在页面使用

    
// 设置switch的背景颜色
const blackColor = 'var(--bg-color-mute)'
const themeColorObj = {
  defaultTheme: {
    title: '浅色主题'
  },
  darkTheme: {
    title: '深色主题'
  }
}

//模式切换事件

const themeChange = (val: boolean) => {
  if(val){
    state.currentSkinName = 'defaultTheme'
    switchTheme( state.currentSkinName )
  }else{
    state.currentSkinName = 'darkTheme'
    switchTheme(state.currentSkinName)
  }
}
const switchTheme = (type?:string) =>{
  type = type || 'darkTheme'
  const colorObj = theme[type]
  for (let i = 1; i < 10; i += 1) {
    colorObj[`--el-color-primary-light-${10 - i}`] = colorMix(colorObj['--el-color-white'], colorObj['--el-color-primary'], i * 0.1)
  }
  Object.keys(colorObj).map(item => {
    document.documentElement.style.setProperty(item, colorObj[item])
  })
}

3、事件处理完毕,接下来我们就需要配置主题的样式

首先:在utils创建样式文件theme.ts及tool.ts,我们只处理两种模式,如果要多种可自行拓展,完整代码如下:可以直接拷贝到自己项目中,也可以在最下方直接下载

theme.ts

export default {
  'defaultTheme': {
    '--el-background-color-base': '#ffffff',
    '--el-color-white': '#ffffff',
    '--el-text-color-bar':'#ffffff',
    '--el-color-black': '#ffffff',
    '--el-color-primary': '#409eff',
    '--el-navbar_bg':'#0440D7',//导航
    '--el-slider_bg':'#0440D7',
    '--el-background-top-color':'#e3e4e5',
    "--el-box-color-base": "#f5f7fa", // 分类框
    '--el-logo_bg':'#333',//logo
    '--el-en_bg':'#666666',//英文
    '--bg-color-mute': '#f2f2f2',//模式切换按钮
    '--el-text-color-cls': '#666666',//顶部选项颜色
    '--el-text-color-th': 'rgba(0, 0, 0, 0.3)', // 最次要文字颜色
    '--el-color-primary-light-1': '#53a8ff',
    '--el-color-primary-light-2': '#66b1ff',
    '--el-color-primary-light-3': '#79bbff',
    '--el-color-primary-light-4': '#8cc5ff',
    '--el-color-primary-light-5': '#a0cfff',
    '--el-color-primary-light-6': '#b3d8ff',
    '--el-color-primary-light-7': '#c6e2ff',
    '--el-color-primary-light-8': '#d9ecff',
    '--el-color-primary-light-9': '#ecf5ff',
    '--el-input-bg-color': '#fff', //输入框背景色
    '--el-fill-color-blank': '#fff',
    '--el-select-box':'#fff',//下拉框BG
    '--el-select-box-active':'#fff',//下拉框激活BG
    '--el-input-border-color':'#00adff',//下拉边框
    '--el-hover-bg-color':'#2590F9',//鼠标放入背景色
    '--el-switch_bg':'#f2f2f2', //模式切换
    '--el-switch-color':'#666666',//模式颜色
    '--el-footer-bg':'#F6F7F8',//底部颜色
    '--el-btn-color':'#ffffff',//按钮颜色

    '--el-color-success': '#67c23a',
    '--el-color-success-light': '#e1f3d8',
    '--el-color-success-lighter': '#f0f9eb',
    '--el-color-warning': '#e6a23c',
    '--el-color-warning-light': '#faecd8',
    '--el-color-warning-lighter': '#fdf6ec',
    '--el-color-danger': '#f56c6c',
    '--el-color-danger-light': '#fde2e2',
    '--el-color-danger-lighter': '#fef0f0',
    '--el-color-error': '#f56c6c',
    '--el-color-error-light': '#fde2e2',
    '--el-color-error-lighter': '#fef0f0',
    '--el-color-info': '#909399',
    '--el-color-info-light': '#e9e9eb',
    '--el-color-info-lighter': '#f4f4f5',
    '--el-text-color-primary': '#303133',
    '--el-text-color-regular': '#606266',
    '--el-text-color-secondary': '#909399',
    '--el-text-color-placeholder': '#c0c4cc',
    '--el-border-color-base': '#dcdfe6',
    '--el-border-color-light': '#e4e7ed',
    '--el-border-color-lighter': '#ebeef5',
    '--el-border-color-extra-light': '#f2f6fc',
    '--color-input-bg': '#f4f5f5',
    '--color-input-error-bg': '#ffece8',
    '--color-input-placeholder': '#86909c',
    '--color-input-text': '#4e5969',
    '--color-input-icon': '#f53f3f',
    '--el-popup-modal-background-color': 'var(--el-color-black)',
    '--el-popup-modal-opacity': '.5',
    '--el-border-width-base': '1px',
    '--el-border-style-base': 'solid',
    '--el-border-color-hover': 'var(--el-text-color-placeholder)',
    '--el-border-base': 'var(--el-border-width-base) var(--el-border-style-base) var(--el-border-color-base)',
    '--el-border-radius-base': '4px',
    '--el-border-radius-small': '2px',
    '--el-border-radius-round': '20px',
    '--el-border-radius-circle': '100%',
    '--el-box-shadow-base': '0 2px 4px rgba(0, 0, 0, .12),0 0 6px rgba(0, 0, 0, .04)',
    '--el-box-shadow-light': '0 2px 12px 0 rgba(0, 0, 0, .1)',
    '--el-svg-monochrome-grey': '#dcdde0',
    '--el-fill-base': 'var(--el-color-white)',
    '--el-font-size-extra-large': '20px',
    '--el-font-size-large': '18px',
    '--el-font-size-medium': '16px',
    '--el-font-size-base': '14px',
    '--el-font-size-small': '13px',
    '--el-font-size-extra-small': '12px',
    '--el-font-weight-primary': '500',
    '--el-font-line-height-primary': '24px',
    '--el-font-color-disabled-base': '#bbb',
    '--el-index-normal': '1',
    '--el-index-top': '1000',
    '--el-index-popper': '2000',
    '--el-disabled-fill-base': 'var(--el-background-color-base)',
    '--el-disabled-color-base': 'var(--el-text-color-placeholder)',
    '--el-disabled-border-base': 'var(--el-border-color-light)',
    '--el-transition-duration': '.3s',
    '--el-transition-duration-fast': '.2s',
    '--el-transition-function-ease-in-out-bezier': 'cubic-bezier(.645, .045, .355, 1)',
    '--el-transition-function-fast-bezier': 'cubic-bezier(.23, 1, .32, 1)',
    '--el-transition-all': 'all var(--el-transition-duration) var(--el-transition-function-ease-in-out-bezier)',
    '--el-transition-fade': 'opacity var(--el-transition-duration) var(--el-transition-function-fast-bezier)',
    '--el-transition-md-fade': 'transform var(--el-transition-duration) var(--el-transition-function-fast-bezier),opacity var(--el-transition-duration) var(--el-transition-function-fast-bezier)',
    '--el-transition-fade-linear': 'opacity var(--el-transition-duration-fast) linear',
    '--el-transition-border': 'border-color var(--el-transition-duration-fast) var(--el-transition-function-ease-in-out-bezier)',
    '--el-transition-color': 'color var(--el-transition-duration-fast) var(--el-transition-function-ease-in-out-bezier)'
  },
  'darkTheme':{
    "--el-color-primary": "#409eff", // 主题色
    '--el-background-top-color':'#262727',
    "--el-box-color-base": "#262727", // 分类框
    "--el-background-color-base": "#14161a", // 基础背景色
    "--el-color-white": "#1d1e1f", // 基础白色
    "--el-color-black": "#262727", // 基础黑色
    '--el-navbar_bg':'#14161a', //导航色
    '--el-switch_bg':'#2c2c2c', //模式切换
    '--el-logo_bg':'#fff',//logo
    '--el-slider_bg':'#1B222C',
    '--el-en_bg':'#fff',//英文
    '--el-btn-color':'#E5EAF3',//按钮颜色
    '--el-text-color-bar':'#ffffff',
    '--el-text-color-primary': '#FAFAFA', // 主要文字颜色
    '--el-text-color-regular': '#FAFAFA', // 常规文字颜色
    '--el-text-color-placeholder': '#c0c4cc',  // 占位文字颜色
    '--el-text-color-secondary': 'rgba(255, 255, 255, 0.5)', // 次要文字颜色
    '--el-text-color-th': 'rgba(255, 255, 255, 0.3)', // 最次要文字颜色
    '--el-text-color-cls': '#fff',//顶部选项颜色
    "--el-border-color-base": "#4C4D4F", // 一级边框颜色
    "--el-border-color-light": "#414243", // 二级边框颜色
    "--el-border-color-lighter": "#363637", // 三级边框颜色
    "--el-border-color-extra-light": "#2B2B2C", // 四级边框颜色
    '--el-input-bg-color': '#2c2c2c', //输入框背景色
    '--el-fill-color-blank': '#414243',
    '--el-select-box':'#4C4D4F',//下拉框BG
    '--el-select-box-active':'#414243',//下拉框激活BG
    '--el-input-border-color':'#fff',//下拉边框
    '--el-switch-color':'#ffffff',//模式颜色
    '--el-footer-bg':'rgba(255, 255, 255, 0.02)',//底部颜色
    '--bg-color-mute': '#2c2c2c',//模式切换按钮
    '--el-hover-bg-color':'#2590F9',//鼠标放入背景色
    '--el-color-success': '#67c23a', // 成功颜色
    '--el-color-success-light': '#e1f3d8',
    '--el-color-success-lighter': '#f0f9eb',
    '--el-color-warning': '#e6a23c', // 警告颜色
    '--el-color-warning-light': '#faecd8',
    '--el-color-warning-lighter': '#fdf6ec',
    '--el-color-danger': '#f56c6c', // 危险颜色
    '--el-color-danger-light': '#fde2e2',
    '--el-color-danger-lighter': '#fef0f0',
    '--el-color-error': '#f56c6c', // 错误颜色
    '--el-color-error-light': '#fde2e2',
    '--el-color-error-lighter': '#fef0f0',
    "--el-color-info": "#7B88A9", // 信息颜色
    '--el-color-info-light': '#e9e9eb',
    '--el-color-info-lighter': '#f4f4f5',
    '--color-input-bg': '#f4f5f5', // input 输入框
    '--color-input-error-bg': '#ffece8',
    '--color-input-placeholder': '#86909c',
    '--color-input-text': '#4e5969',
    '--color-input-icon': '#f53f3f',
    '--el-svg-monochrome-grey': '#dcdde0',
    '--el-font-color-disabled-base': '#bbb',
    '--el-popup-modal-background-color': 'var(--el-color-black)',
    '--el-popup-modal-opacity': '.5',
    '--el-border-width-base': '1px',
    '--el-border-style-base': 'solid',
    '--el-border-color-hover': 'var(--el-text-color-placeholder)',
    '--el-border-base': 'var(--el-border-width-base) var(--el-border-style-base) var(--el-border-color-base)',
    '--el-border-radius-base': '4px',
    '--el-border-radius-small': '2px',
    '--el-border-radius-round': '20px',
    '--el-border-radius-circle': '100%',
    '--el-box-shadow-base': '0 2px 4px rgba(0, 0, 0, .12),0 0 6px rgba(0, 0, 0, .04)',
    '--el-box-shadow-light': '0 2px 12px 0 rgba(0, 0, 0, .1)',
    '--el-fill-base': 'var(--el-color-white)',
    '--el-font-size-extra-large': '20px',
    '--el-font-size-large': '18px',
    '--el-font-size-medium': '16px',
    '--el-font-size-base': '14px',
    '--el-font-size-small': '13px',
    '--el-font-size-extra-small': '12px',
    '--el-font-weight-primary': '500',
    '--el-font-line-height-primary': '24px',
    '--el-index-normal': '1',
    '--el-index-top': '1000',
    '--el-index-popper': '2000',
    '--el-disabled-fill-base': 'var(--el-background-color-base)',
    '--el-disabled-color-base': 'var(--el-text-color-placeholder)',
    '--el-disabled-border-base': 'var(--el-border-color-light)',
    '--el-transition-duration': '.3s',
    '--el-transition-duration-fast': '.2s',
    '--el-transition-function-ease-in-out-bezier': 'cubic-bezier(.645, .045, .355, 1)',
    '--el-transition-function-fast-bezier': 'cubic-bezier(.23, 1, .32, 1)',
    '--el-transition-all': 'all var(--el-transition-duration) var(--el-transition-function-ease-in-out-bezier)',
    '--el-transition-fade': 'opacity var(--el-transition-duration) var(--el-transition-function-fast-bezier)',
    '--el-transition-md-fade': 'transform var(--el-transition-duration) var(--el-transition-function-fast-bezier),opacity var(--el-transition-duration) var(--el-transition-function-fast-bezier)',
    '--el-transition-fade-linear': 'opacity var(--el-transition-duration-fast) linear',
    '--el-transition-border': 'border-color var(--el-transition-duration-fast) var(--el-transition-function-ease-in-out-bezier)',
    '--el-transition-color': 'color var(--el-transition-duration-fast) var(--el-transition-function-ease-in-out-bezier)'
  }

}

tool.ts

export const colorMix = (color1, color2, weight) => {
  weight = Math.max(Math.min(Number(weight), 1), 0)
  let r1 = parseInt(color1.substring(1, 3), 16)
  let g1 = parseInt(color1.substring(3, 5), 16)
  let b1 = parseInt(color1.substring(5, 7), 16)
  let r2 = parseInt(color2.substring(1, 3), 16)
  let g2 = parseInt(color2.substring(3, 5), 16)
  let b2 = parseInt(color2.substring(5, 7), 16)
  let r: number | string = Math.round(r1 * (1 - weight) + r2 * weight)
  let g: number | string = Math.round(g1 * (1 - weight) + g2 * weight)
  let b: number | string = Math.round(b1 * (1 - weight) + b2 * weight)
  r = ("0" + (r || 0).toString(16)).slice(-2)
  g = ("0" + (g || 0).toString(16)).slice(-2)
  b = ("0" + (b || 0).toString(16)).slice(-2)
  return "#" + r + g + b;
}

最后我们来简单配置一下公共样式和模式切换重置公共样式:在assets/css 创建 common.css resetElStyle.scss

resetElStyle.scss

.mt10 {
  margin-top: 10px;
}
body{
  background: var(--el-color-black)
}
.main_color{
  background-color: var(--el-background-color-base);
}
.el_base_color{
  background-color: var(--el-background-top-color);
}
.el-menu-item{
  border-bottom:none !important;
}
.right-menu .right-menu-item{
  width:62px;
  height:62px;
  background-color: var(--el-slider_bg);
  border-radius: 6px;
  overflow: hidden;
}
.right-menu-item .right-menu-qrcode .qrcode-box{
  background:var(--el-slider_bg);
  padding:5px
}
.right-menu-item .right-menu-qrcode p{
  padding:-12px 0 5px 0;
  text-align:center;
  color:#fff;
  font-size:12px
}
.logoWall .logo_animate{
  width: 100%;
  height: 450px;
  background: var(--el-background-color-base);
  position: relative;
}
body {
  p{
    color:var(--el-text-color-primary)
  }
  span{
    color:var(--el-text-color-primary)
  }
  .change_ico{
    margin-left:22px;
    width:42px;
    height:24px;
  }
  .change_ico  .el-switch__action{
    background-color: var(--el-switch-color) !important;
  }
  .change_ico .el-icon{
    font-size: 16px;
    color:var(--el-switch-color) !important;
  }
  //下拉框
  .el-scrollbar{
    background: var( --el-select-box);
    .selected{
      background: var(--el-select-box-active);
      color: var(--el-color-primary);
    }
    .el-select-dropdown__item.hover, .el-select-dropdown__item:hover{
      background: var(--el-select-box-active);
      color: var(--el-color-primary);
    }
  }
  /*数字输入框*/
  .el-input-number__decrease, .el-input-number__increase {
    background: var(--el-color-black)
  }

  // 复合输入框
  .el-input-group__append, .el-input-group__prepend {
    border: 1px solid var(--el-border-color-base);
    border-right: none;
  }

  //  日期选择 el-date-picker
  .el-picker-panel {
    border: 1px solid var(--el-border-color-light);
    background: var(--el-color-black)
  }


  // 日期和时间范围
  .el-date-editor .el-range-input {
    background: var(--el-color-white)
  }

  .el-picker-panel__footer {
    background: var(--el-color-black)
  }

  // 时间选择
  .el-time-panel__content {
    .el-time-spinner__item:hover, .el-scrollbar__thumb:hover {
      background: var(--el-select-box-active)
    }
  }

  // 表格分页
  .el-pagination.is-background .btn-next, .el-pagination.is-background .btn-prev, .el-pagination.is-background .el-pager li {
    background: var(--el-color-black)
  }

  // menu
  .el-menu {
    border-right: none;
  }
}

common.css

body{
    margin:0;
}
a{
    text-decoration: none;
}
ul{
    list-style: none;
}
h4{
    font-weight: 400;
}
.hj_container{
    max-width: 1200px;
    min-width: 1100px;
    margin:0 auto;
    padding: 0 22px;
}
.hj_ip b{
    width: 6px;
    height: 26px;
    margin-right: 12px;
    margin-left:22px;
    background-color: #00adff;

}

.hj_ip h4{
    font-size: 16px !important;
}
@keyframes imgmove
{
    0%{
        transform: scale(0.9);  /*开始为原始大小*/
    }
    25%{
        transform: scale(1.3); /*放大1.1倍*/
    }
    50%{
        transform: scale(0.9);
    }
    75%{
        transform: scale(1.3);
    }

}

@-webkit-keyframes imgmove /*Safari and Chrome*/
{
    0%{
        transform: scale(0.9);
    }
    25%{
        transform: scale(1.1); /*放大1.1倍*/
    }
    50%{
        transform: scale(0.9);
    }
    75%{
        transform: scale(1.1);
    }
}
.hj_block  .el-timeline-item__content{
    font-size: 14px;
}
.hj_user_lf .el-menu-item:focus, .el-menu-item:hover{
    font-size: 14px;
    display: flex;
    align-items: center;
}
.el-menu-item{
    padding:0 4px 0 4px !important;
    border-bottom: 2px solid #f6f6f6;
}
.el-menu.el-menu--horizontal{
    border-bottom: none;
}
.el-menu--horizontal>.el-menu-item.is-active{
    border-bottom:  2px solid #409eff !important;
}
.el-menu-tabs{
    height:48px;
}
.dplayer-logo {
    max-height: 97px !important;
    max-width: 98px !important;
}
.el-menu--horizontal .el-menu-item:not(.is-disabled):focus, .el-menu--horizontal .el-menu-item:not(.is-disabled):hover{
    color:#fff;
}
.intro{
    margin:0 auto;
    width:910px;
}

.logoWall .logo_animate .stand_browser{
    display: block;
    position: absolute;
    width: 230px;
    opacity: 0;
    height: auto;
    filter: alpha(opacity=0);
}
.stand_browser:hover{
    cursor: pointer;
}
.logoWall .logo_animate .img1{
    left:330px;
    top: 420px;
    animation: animate1 5500ms linear infinite;
    -webkit-animation: animate1 5500ms linear infinite;
    -moz-animation: animate1 5500ms linear infinite;
    -ms-animation:animate1 5500ms linear infinite;
    -o-animation: animate1 5500ms linear infinite;
}

.logoWall .logo_animate .img2{
    left:390px;
    top: 420px;
    animation: animate2 5500ms linear infinite;
    animation-play-state: running;
    -webkit-animation-play-state: running;
    -moz-animation-play-state:running;
    -o-animation-play-state:running;
    -webkit-animation: animate2 5500ms linear infinite;
    -moz-animation: animate2 5500ms linear infinite;
    -ms-animation:animate2 5500ms linear infinite;
    -o-animation: animate2 5500ms linear infinite;
}
.logoWall .logo_animate .img3{
    left:450px;
    top: 420px;
    animation: animate3 5500ms linear infinite;
    animation-play-state: running;
    -webkit-animation-play-state: running;
    -moz-animation-play-state:running;
    -o-animation-play-state:running;
    -webkit-animation: animate3 5500ms linear infinite;
    -ms-animation:animate3 5500ms linear infinite;
    -moz-animation: animate3 5500ms linear infinite;
    -o-animation: animate3 5500ms linear infinite;
}
.logoWall .logo_animate .img4{
    left:450px;
    top: 420px;
    animation: animate4 5500ms linear infinite;
    animation-play-state: running;
    -webkit-animation-play-state: running;
    -moz-animation-play-state:running;
    -o-animation-play-state:running;
    -webkit-animation: animate4 5500ms linear infinite;
    -moz-animation: animate4 5500ms linear infinite;
    -o-animation: animate4 5500ms linear infinite;
    -ms-animation:animate4 5500ms linear infinite;
}
@keyframes animate1 {
    0% { width: 30px; left: 280px;top: 420px;opacity: 0;}
    48%{ width: 100px;height:auto;left: 82px;opacity: 1;}
    50% {width: 100px;height:auto;left: 80px;top: 200px;opacity: 1;  }
    52%{ width: 100px;height:auto;left: 82px;opacity: 1;}
    100% {width: 40px;left: 250px;top: 40px;opacity: 0;}
}

@-khtml-keyframes animate1 {
    0% { width: 30px; left: 280px;top: 420px;opacity: 0;}
    48%{ width: 100px;height:auto;left: 82px;opacity: 1;}
    50% {width: 100px;height:auto;left: 80px;top: 200px;opacity: 1;  }
    52%{ width: 100px;height:auto;left: 82px;opacity: 1;}
    100% {width: 40px;left: 250px;top: 40px;opacity: 0;}
}

@-webkit-keyframes animate1 {
    0% { width: 30px; left: 280px;top: 420px;opacity: 0;}
    48%{ width: 100px;height:auto;left: 82px;opacity: 1;}
    50% {width: 100px;height:auto;left: 80px;top: 200px;opacity: 1;  }
    52%{ width: 100px;height:auto;left: 82px;opacity: 1;}
    100% {width: 40px;left: 250px;top: 40px;opacity: 0;}
}

@-moz-keyframes animate1 {
    0% { width: 30px; left: 280px;top: 420px;opacity: 0;}
    48%{ width: 100px;height:auto;left: 82px;opacity: 1;}
    50% {width: 100px;height:auto;left: 80px;top: 200px;opacity: 1;  }
    52%{ width: 100px;height:auto;left: 82px;opacity: 1;}
    100% {width: 40px;left: 250px;top: 40px;opacity: 0;}
}

@-ms-keyframes animate1 {
    0% { width: 30px; left: 280px;top: 420px;opacity: 0;}
    48%{ width: 100px;height:auto;left: 82px;opacity: 1;}
    50% {width: 100px;height:auto;left: 80px;top: 200px;opacity: 1;  }
    52%{ width: 100px;height:auto;left: 82px;opacity: 1;}
    100% {width: 40px;left: 250px;top: 40px;opacity: 0;}
}

@-o-keyframes animate1 {
    0% { width: 30px; left: 280px;top: 420px;opacity: 0;}
    48%{ width: 100px;height:auto;left: 82px;opacity: 1;}
    50% {width: 100px;height:auto;left: 80px;top: 200px;opacity: 1;  }
    52%{ width: 100px;height:auto;left: 82px;opacity: 1;}
    100% {width: 40px;left: 250px;top: 40px;opacity: 0;}
}

@keyframes animate2 {
    0% {width: 30px;left: 380px;top: 410px;opacity: 0;  }
    48%{width: 100px;height:auto;left: 292px;opacity: 1;  }
    50% { width: 100px;height:auto;left: 290px;opacity: 1;}
    52%{width: 100px;height:auto;left: 292px;opacity: 1;}
    100% { width: 40px;left: 360px;top: 40px;opacity: 0;}
}
@-khtml-keyframes animate2 {
    0% {width: 30px;left: 380px;top: 410px;opacity: 0;  }
    48%{width: 100px;height:auto;left: 292px;opacity: 1;  }
    50% { width: 100px;height:auto;left: 290px;opacity: 1;}
    52%{width: 100px;height:auto;left: 292px;opacity: 1;}
    100% { width: 40px;left: 360px;top:40px;opacity: 0;}
}
@-webkit-keyframes animate2 {
    0% {width: 30px;left: 380px;top: 410px;opacity: 0;  }
    48%{width: 100px;height:auto;left: 292px;opacity: 1;  }
    50% { width: 100px;height:auto;left: 290px;opacity: 1;}
    52%{width: 100px;height:auto;left: 292px;opacity: 1;}
    100% { width: 40px;left: 360px;top: 40px;opacity: 0;}
}
@-ms-keyframes animate2 {
    0% {width: 30px;left: 380px;top: 410px;opacity: 0;  }
    48%{width: 100px;height:auto;left: 292px;opacity: 1;  }
    50% { width: 100px;height:auto;left: 290px;opacity: 1;}
    52%{width: 100px;height:auto;left: 292px;opacity: 1;}
    100% { width: 40px;left: 360px;top: 40px;opacity: 0;}
}
@-moz-keyframes animate2 {
    0% {width: 30px;left: 380px;top: 410px;opacity: 0;  }
    48%{width: 100px;height:auto;left: 292px;opacity: 1;  }
    50% { width: 100px;height:auto;left: 290px;opacity: 1;}
    52%{width: 100px;height:auto;left: 292px;opacity: 1;}
    100% { width: 40px;left: 360px;top: 40px;opacity: 0;}
}
@-o-keyframes animate2 {
    0% {width: 30px;left: 380px;top: 410px;opacity: 0;  }
    48%{width: 100px;height:auto;left: 292px;opacity: 1;  }
    50% { width: 100px;height:auto;left: 290px;opacity: 1;}
    52%{width: 100px;height:auto;left: 292px;opacity: 1;}
    100% { width: 40px;left: 360px;top: 40px;opacity: 0;}
}
@keyframes animate3 {
    0% {width: 30px; left: 580px;top: 420px;opacity: 0;}
    48%{width: 100px;height:auto;left: 718px;opacity: 1;}
    50% {width: 100px; height:auto;left: 720px;top: 200px;opacity: 1;}
    52%{width: 100px;height:auto;left: 718px;opacity: 1;}
    100% {width: 40px;left: 630px;top: 40px; opacity: 0;}
}
@-khtml-keyframes animate3 {
    0% {width: 30px; left: 580px;top: 420px;opacity: 0;}
    48%{width: 100px;height:auto;left: 718px;opacity: 1;}
    50% {width: 100px; height:auto;left: 720px;top: 200px;opacity: 1;}
    52%{width: 100px;height:auto;left: 718px;opacity: 1;}
    100% {width: 40px;left: 630px;top: 40px; opacity: 0;}

}
@-webkit-keyframes  animate3{
    0% {width: 30px; left: 580px;top: 420px;opacity: 0;}
    48%{width: 100px;height:auto;left: 718px;opacity: 1;}
    50% {width: 100px; height:auto;left: 720px;top: 200px;opacity: 1;}
    52%{width: 100px;height:auto;left: 718px;opacity: 1;}
    100% {width: 40px;left: 630px;top: 40px; opacity: 0;}
}
@-ms-keyframes animate3 {
    0% {width: 30px; left: 580px;top: 420px;opacity: 0;}
    48%{width: 100px;height:auto;left: 718px;opacity: 1;}
    50% {width: 100px; height:auto;left: 720px;top: 200px;opacity: 1;}
    52%{width: 100px;height:auto;left: 718px;opacity: 1;}
    100% {width: 40px;left: 630px;top: 40px; opacity: 0;}
}
@-moz-keyframes animate3 {
    0% {width: 30px; left: 580px;top: 420px;opacity: 0;}
    48%{width: 100px;height:auto;left: 718px;opacity: 1;}
    50% {width: 100px; height:auto;left: 720px;top: 200px;opacity: 1;}
    52%{width: 100px;height:auto;left: 718px;opacity: 1;}
    100% {width: 40px;left: 630px;top: 40px; opacity: 0;}
}
@-o-keyframes animate3 {
    0% {width: 30px; left: 580px;top: 420px;opacity: 0;}
    48%{width: 100px;height:auto;left: 718px;opacity: 1;}
    50% {width: 100px; height:auto;left: 720px;top: 200px;opacity: 1;}
    52%{width: 100px;height:auto;left: 718px;opacity: 1;}
    100% {width: 40px;left: 630px;top: 40px; opacity: 0;}
}
@keyframes animate4 {
    0% { width: 30px;left: 460px;top: 420px;opacity: 0;}
    48%{width: 100px; height:auto;left: 508px;opacity: 1;}
    50% {width: 100px; height:auto; left: 510px; opacity: 1;  }
    52%{width: 100px;height:auto;left: 508px;opacity: 1;}
    100% {width: 40px;left: 490px; top: 40px;opacity: 0;}
}

@-khtml-keyframes animate4 {
    0% { width: 30px;left: 460px;top: 420px;opacity: 0;}
    48%{width: 100px; height:auto;left: 508px;opacity: 1;}
    50% {width: 100px; height:auto; left: 510px; opacity: 1;  }
    52%{width: 100px;height:auto;left: 508px;opacity: 1;}
    100% {width: 40px;left: 490px; top: 40px;opacity: 0;}
}

@-webkit-keyframes animate4 {
    0% { width: 30px;left: 460px;top: 420px;opacity: 0;}
    48%{width: 100px; height:auto;left: 508px;opacity: 1;}
    50% {width: 100px; height:auto; left: 510px; opacity: 1;  }
    52%{width: 100px;height:auto;left: 508px;opacity: 1;}
    100% {width: 40px;left: 490px; top: 40px;opacity: 0;}
}

@-moz-keyframes animate4 {
    0% { width: 30px;left: 460px;top: 420px;opacity: 0;}
    48%{width: 100px; height:auto;left: 508px;opacity: 1;}
    50% {width: 100px; height:auto; left: 510px; opacity: 1;  }
    52%{width: 100px;height:auto;left: 508px;opacity: 1;}
    100% {width: 40px;left: 490px; top: 40px;opacity: 0;}
}

@-ms-keyframes animate4 {
    0% { width: 30px;left: 460px;top: 420px;opacity: 0;}
    48%{width: 100px; height:auto;left: 508px;opacity: 1;}
    50% {width: 100px; height:auto; left: 510px; opacity: 1;  }
    52%{width: 100px;height:auto;left: 508px;opacity: 1;}
    100% {width: 40px;left: 490px; top: 40px;opacity: 0;}
}

@-o-keyframes animate4 {
    0% { width: 30px;left: 460px;top: 420px;opacity: 0;}
    48%{width: 100px; height:auto;left: 508px;opacity: 1;}
    50% {width: 100px; height:auto; left: 510px; opacity: 1;  }
    52%{width: 100px;height:auto;left: 508px;opacity: 1;}
    100% {width: 40px;left: 490px; top: 40px;opacity: 0;}
}
.pause{
    animation-play-state: paused !important;
    -webkit-animation-play-state: paused !important;
    -moz-animation-play-state: paused !important;
    -o-animation-play-state: paused !important;
}
.play{
    animation-play-state: running !important;
    -webkit-animation-play-state: running !important;
    -moz-animation-play-state: running !important;
    -o-animation-play-state: running !important;
}
.el-pagination{
    display: flex;
    justify-content: center;
    align-content: center;
}
.el-overlay{
    z-index: 1000 !important;
}
.no_data{
    display: flex;
    justify-content: center;
    align-items: center;
}
.no_data img{
    width:20%;
    margin-top:-200px;
}


到此为止我们已经处理完毕,如果要在某个地方使用如下:例如

background-color: var(--el-background-color-base);
color: var(--el-color-primary);

走到这一步我们的所有布局已经基本完成,剩下的就是具体业务需求的开发了,下一节我们来配合着黑暗模式实现一个完成的首页功能,效果如下:

基础模式


黑暗模式

发表评论
留言与评论(共有 0 条评论) “”
   
验证码:

相关文章

推荐文章