先给大家展示下效果图:
imsun; white-space: normal; word-spacing: 0px; text-transform: none; float: none; font-weight: normal; color: rgb(0,0); font-style: normal; orphans: 2; widows: 2; display: inline !important; letter-spacing: normal; text-indent: 0px; font-variant-ligatures: normal; font-variant-caps: normal; -webkit-text-stroke-width: 0px">
先给大家看一下目录和主要文件:
解释一下主要文件:
base.scss: 一些通用样式文件。
mixin.scss: 定义mixin方法的文件。
varibale.scss: 颜色,字体,背景的配置文件
以下就拿封装的head组件代码来展示以下实现逻辑,现在大家主要是来理解,不要着急,在文章最后会贴出三个主要文件的代码的。
为什么会在 background:$background-color-theme; 地方标注错误?
如果之前用过sass的同学可能会知道,这样虽然实现了css样式变量化,但是后期没有办法作出灵活更改的。
所以需要把设置背景颜色封装成一个mixin方法(包括字体大小,字体颜色,都需要进行封装)
请看mixin.scss中的代码:
主要原理:
通过设置html的attribute属性在封装的函数中进行判断,进行相应的设置不同的颜色
css中 [ ] 可以识别到在html标签上设置的属性,所以在html上对应属性发生变化时,就会执行相应的样式,
这一步有点类似于平时给div添加一个.active属性,css自动执行相应样式。
更换主题时的具体操作:
下边是主要文件完整的代码
base.scss示例代码:
rush:js;">
@charset "utf-8";
$font_default_color:$font-color-shallow3;
$font_default_size:$font_medium_s;
*{
margin:0;padding:0;
Box-sizing:border-
Box;color:$font_default_color;
/*@include font-dpr($font_default_size);*/
}
a{text-
decoration:none;color:$font_default_color;}
.sub-page { //routerView
position: fixed;top: 0;b
ottom: 0;width: 100%;background:#fff;right: 0;left: 0;z-index: 5;
}
#content{width:100%;position:absolute;@include px2rem(top,88px);b
ottom:0;overflow-x:auto;}
.width{
width:100%;
}
/*竖向居中*/
.table-cell{
display:table-cell;vertical-align:middle;text-align:center;
}
.middle{
vertical-align:middle;
}
/*弹性盒*/
.flex{
display: inline-flex;
display: -webkit-flex;
display: flex;
}
/*弹性盒-子元素可竖向居中*/
.flex-middle{
display :flex;
display:-webkit-flex; align-items:center; -webkit-align-items:center; justify-content:center ;
}
.tl{
text-align:left;
}
.tc{
text-align:center;
}
.tr{
text-align:right;
}
.fl{
float:left;
}
.fr{
float:right;
}
.clear::after{
/*原理: overflow!=visible ;
display!=block;float!=none;position!=static||relative 都可为元素创建BFC;消除边距重叠或者浮动产生的影响*/
content:'';overflow:hidden;clear:both;
}
mixin.scss示例代码:
rush:js;">
@charset "utf-8";
@import "./variable";/*引入配置*/
@mixin font_size($size){/*通过该
函数设置字体大小,后期方便
统一管理;*/
@include font-dpr($size);
}
@mixin font_color($color){/*通过该
函数设置字体颜色,后期方便
统一管理;*/
color:$color;
[data-theme="theme1"] & {
color:$font-color-theme1;
}
[data-theme="theme2"] & {
color:$font-color-theme2;
}
[data-theme="theme3"] & {
color:$font-color-theme3;
}
}
@mixin bg_color($color){/*通过该
函数设置
主题颜色,后期方便
统一管理;*/
background-color:$color;
[data-theme="theme1"] & {
background-color:$background-color-theme1;
}
[data-theme="theme2"] & {
background-color:$background-color-theme2;
}
[data-theme="theme3"] & {
background-color:$background-color-theme3;
}
}
/*px转rem*/
@mixin px2rem($property,$px,$px2:false,$px3:false,$px4:false){
$rem:75px;/* 设计稿尺寸/10 */
@if $px and $px2 and $px3 and $px4 {
#{$property}: ($px / $rem) + rem ($px2 / $rem) + rem ($px3 / $rem) + rem ($px4 / $rem) + rem;
}
@else if $px and $px2 {
#{$property}: ($px / $rem) + rem ($px2 / $rem) + rem;
//[data-model='pad'] & {#{$property}: ($px * 1.4 / $rem) + rem ($px2 * 1.4 / $rem) + rem;}
}
@else{
#{$property}: ($px / $rem) + rem!important;
//[data-model='pad'] & {#{$property}: ($px * 1.4 / $rem) + rem;}
}
}
/*根据dpr计算font-size*/
@mixin font-dpr($font-size){
font-size: $font-size;
//[data-model="pad"] & { font-size: $font-size * 1.4; }
[data-dpr="2"] & { font-size: $font-size * 2;}
[data-dpr="3"] & { font-size: $font-size * 3;}
}
/*弹性盒
属性*/
%flex
Box{
display: inline-flex;
display: -webkit-flex;
display: flex;
}
/*弹性盒比例*/
@mixin flex($num:1){
-webkit-
Box-flex:$num;-moz-
Box-flex:$num;-webkit-flex:$num;-ms-flex:$num;flex:$num;
}
/*超行溢出
显示省略号*/
@mixin overflow($num:1,$fontSize:0,$lineHeight:1.5){
display: -webkit-
Box;-webkit-line-clamp:$num; overflow: hidden;
/*! a
utoprefixer: off */
-webkit-
Box-orient: vertical;
/* a
utoprefixer: on */
@if $fontSize!=0 and $lineHeight{/*高度需要撑开*/
line-height:$lineHeight;
@if $lineHeight < 1.2 {
line-height:1.2; /*最小需要1.2,否则在部分安卓机下第$num+1行会顶部漏出*/
}
height: $num * $fontSize * $lineHeight;
[data-dpr="2"] & { height: $num * $fontSize * $lineHeight * 2!important;}
[data-dpr="3"] & { height: $num * $fontSize * $lineHeight * 3!important;}
}
}
//transition兼容写法
@mixin transition($content:all .2s){
-moz-transition: $content;
-webkit-transition: $content;
-o-transition: $content;
transition: $content;
}
//transfrom兼容
@mixin translateX($num:-50%){
-ms-transform: translateX($num);
-moz-transform: translateX($num);
-webkit-transform: translateX($num);
-o-transform: translateX($num);
transform: translateX($num);
}
@mixin translateY($num:-50%){
-ms-transform: translateY($num);
-moz-transform: translateY($num);
-webkit-transform: translateY($num);
-o-transform: translateY($num);
transform: translateY($num);
}
@mixin rotate($deg:90deg){
-ms-transform:rotate($deg);
-moz-transform:rotate($deg);
-webkit-transform:rotate($deg);
-o-transform:rotate($deg);
transform:rotate($deg);
}
variable.scss示例代码:
rush:js;">
//颜色定义规范
$background-color-theme: #3f8e4d;//背景
主题颜色
默认
$background-color-theme1: red;//背景
主题颜色1
$background-color-theme2: #652BF5;//背景
主题颜色2
$background-color-theme3: deepskyblue;//背景
主题颜色3
$background-color-themesec: #edc148;//背景次要
主题颜色
$font-color-theme : #3f8e4d;//字体
主题颜色
默认
$font-color-theme1 : red;//字体
主题颜色1
$font-color-theme2 : #652BF5;//字体
主题颜色2
$font-color-theme3 : deepskyblue;//字体
主题颜色3
$font-color-themesec : #edc148;//字体次要
主题颜色
$font-color-shallow0 : #000;
$font-color-shallow1 : #111;
$font-color-shallow2 : #222;
$font-color-shallow3 : #333;
$font-color-shallow4 : #444;
$font-color-shallow5 : #555;
$font-color-shallow6 : #666;
$font-color-shallow7 : #777;
$font-color-shallow8 : #888;
$font-color-shallow9 : #999;
$font-color-shallowdb : #dbdbdb;
//字体定义规范
$font_little_s:10px;
$font_little:12px;
$font_medium_s:14px;
$font_medium:16px;
$font_large_s:18px;
$font_large:20px;
mine.vue中更换主题时的操作代码
其实过程和逻辑都比较简单,大家理解一下,有不明白的地方在下方评论区评论,有错误的地方也欢迎大家指出,看到后我会回复
总结
以上所述是小编给大家介绍的Vue中使用sass实现换肤功能。编程之家 jb51.cc 收集整理的教程希望能对你有所帮助,如果觉得编程之家不错,可分享给好友!感谢支持。
原文地址:https://www.jb51.cc/vue/30360.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。