weex 是一个可以利用 vue 或者 Rax 编写跨平台手机应用的框架。为了让在 weex 有更好的样式编写体验,遂有了以下的方案。
1.初始化一个 weex 工程
npm install weex-toolkit -g weex create weex-test cd weex-test npm run start
这时候就可以在浏览器看到界面了
2.接着为了可以在vue里面写scss, 我们需要安装两个东西, sass-loader、node-sass
npm install -D sass-loader@7.3.1 node-sass
在这里要注意一点sass-loader要安装 7 版本的,不然会报错,这是因为sass版本高导致的,接下来就可以愉快的写scss,还要注意一点需要在style标签加上语言标记scss
<style lang="scss"> </style>
3.为了更好的组织项目结够和样式的统一,我们会把一些主题颜色、字体大小、文字颜色提取到一个scss文件,我们把它命名为variable.scss如下:
$theme-color: blue; $font-big: 32px; $font-nor: 28px; $font-small: 24px;
我们把它放到项目的src/common/scss下, 需要的时候就在vue文件中引用, 比如在 index.vue 页面引用
<style lang="scss">
@import './common/scss/variable.scss'
div {
background-color: $theme-color;
}
</style>
这样就可以让应用的主体部分的样式保持一致了。
4.在 weex 中有一些属性不支持简写的方式比如 border,还有一些需要写两三条的样式如文字超出隐藏,这种样式我们可以将它们定义成scss的混合宏(mixin),我们把它命名为mixins.scss
@mixin border($width, $style, $color) {
border-width: $width;
border-style: $style;
border-color: $color;
}
@mixin border-top($width, $style, $color) {
border-top-width: $width;
border-top-style: $style;
border-top-color: $color;
}
我们把它放到项目的src/common/scss下, 需要的时候就在vue文件中引用, 比如在 index.vue 页面引用
<style lang="scss">
@import './common/scss/variable.scss';
@import './common/scss/mixins.scss';
div {
@include border(1px, solid, $theme-color);
}
</style>
这样我们就可以将一些常用的css代码写进混合宏了
5.在weex中由于不支持类名的权重覆盖,只支持后面的定义的同类样式覆盖前面的样式,这样就会导致我们不能很好的组织 css 代码, 又不能利用 scss 的优势代码层级嵌套。为此我们引入BEM命名方法,并通过scss的混合宏让其在写法上支持嵌套,首先我们在 src/common/scss 下创建 bem.scss,并写入如下代码:
$namespace: '';
$element-separator: '__';
$modifier-separator: '--';
@mixin b($block) {
@if $namespace == '' {
$B: $block !global;
} @else {
$B: $namespace+'-'+$block !global;
}
@if '#{&}' == '' {
.#{$B} {
@content;
}
} @else {
@at-root {
.#{$B} {
@content;
}
}
}
}
@mixin e($element) {
$E: $element !global;
$selector: &;
@if str-index('#{&}', '__') {
@at-root {
.#{$B + $element-separator + $element} {
@content;
}
}
} @else {
@at-root {
#{&+$element-separator+$E} {
@content;
}
}
}
}
@mixin m($modifier)
$M: $modifier !global;
@at-root {
#{&+$modifier-separator+$M} {
@content;
}
}
}
由于weex不支持层级所以我们只能用@at-root将所有类名提升到第一层。接着我们在index.vue中引入这个文件:
<template>
<div class="header">
<div :class="['header__back', `header__back--${status}`]"></div>
<div class="header__content"></div>
<div class="header__other"></div>
</div>
</template>
<script>
export default {
data(){
return {
status: 'black'
}
}
}
</script>
<style lang="scss">
@import './common/scss/variable.scss';
@import './common/scss/mixins.scss';
@import './common/scss/bem.scss'
@include b('header') {
height: 100px;
width: 750px;
flex-direction: row;
align-items: center;
@include e('back') {
flex: 1;
@include m('black') {
background-color: #000000;
}
@include m('white') {
background-color: #ffffff;
}
}
@include e('content') {
flex: 3;
}
@include e('other') {
flex: 1;
}
}
</style>
编译后的样式为:
.header {
height: 100px;
width: 750px;
flex-direction: row;
align-items: center;
}
.header__back {
flex: 1;
}
.header__back--black {
background-color: #000000;
}
.header__back--white {
background-color: #ffffff;
}
.header__content {
flex: 3;
}
.header__other {
flex: 1;
}
这样看起来用scss的写法代码的结构性和可维护性就会更好一些。
6.由于这三个文件都是需要在每一个vue文件引入的,为了偷一下懒,我们可以用sass-resources-loader 这个loader来让每一个vue文件都注入这几个scss文件
npm install -D sass-resources-loader
然后修改根目录下的 configs/utils.js ,找到如下,进行更改
const generateLoaders = (loader, loaderOptions) => {
let loaders = options.useVue ? [cssLoader] : []
if (options.usePostCSS) {
loaders.push(postcssLoader)
}
if (loader) {
loaders.push({
loader: loader + '-loader',
options: Object.assign({}, loaderOptions, {
sourceMap: options.sourceMap
})
})
}
//这里加入以下代码
if (loader === 'sass') {
loaders.push({
loader: 'sass-resources-loader',
options: {
resources: [
path.resolve(__dirname, '../src/common/scss/variable.scss'),
path.resolve(__dirname, '../src/common/scss/mixins.scss'),
path.resolve(__dirname, '../src/common/scss/bem.scss')
]
}
})
}
if (options.useVue) {
return ['vue-style-loader'].concat(loaders)
}
else {
return loaders
}
}
这样就可以在weex工程中愉快的编写scss了
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
weex使用scss
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新动态
- 小骆驼-《草原狼2(蓝光CD)》[原抓WAV+CUE]
- 群星《欢迎来到我身边 电影原声专辑》[320K/MP3][105.02MB]
- 群星《欢迎来到我身边 电影原声专辑》[FLAC/分轨][480.9MB]
- 雷婷《梦里蓝天HQⅡ》 2023头版限量编号低速原抓[WAV+CUE][463M]
- 群星《2024好听新歌42》AI调整音效【WAV分轨】
- 王思雨-《思念陪着鸿雁飞》WAV
- 王思雨《喜马拉雅HQ》头版限量编号[WAV+CUE]
- 李健《无时无刻》[WAV+CUE][590M]
- 陈奕迅《酝酿》[WAV分轨][502M]
- 卓依婷《化蝶》2CD[WAV+CUE][1.1G]
- 群星《吉他王(黑胶CD)》[WAV+CUE]
- 齐秦《穿乐(穿越)》[WAV+CUE]
- 发烧珍品《数位CD音响测试-动向效果(九)》【WAV+CUE】
- 邝美云《邝美云精装歌集》[DSF][1.6G]
- 吕方《爱一回伤一回》[WAV+CUE][454M]