提交 44383306 编写于 作者: D DCloud_LXH

fix(darkmode): body dark-default background-color

上级 6642970e
...@@ -20,7 +20,7 @@ if (process.env.UNI_PLATFORM === 'app-plus' && process.env.UNI_VIEW === 'true') ...@@ -20,7 +20,7 @@ if (process.env.UNI_PLATFORM === 'app-plus' && process.env.UNI_VIEW === 'true')
outputDir = resolve('./packages/uni-' + process.env.UNI_PLATFORM + '/dist') outputDir = resolve('./packages/uni-' + process.env.UNI_PLATFORM + '/dist')
} }
postCssConfig.plugins.push(splitMediaPlugin) if (process.env.UNI_PLATFORM === 'h5') { postCssConfig.plugins.push(splitMediaPlugin) }
module.exports = { module.exports = {
publicPath: '/', publicPath: '/',
...@@ -48,16 +48,17 @@ module.exports = { ...@@ -48,16 +48,17 @@ module.exports = {
}) })
config.plugins.delete('hmr') // remove hot module reload config.plugins.delete('hmr') // remove hot module reload
config if (process.env.UNI_PLATFORM === 'h5') {
.plugin('webpack-build-done') config
.use(webpack.ProgressPlugin, [function (percentage, message, ...args) { .plugin('webpack-build-done')
if (percentage === 1) { .use(webpack.ProgressPlugin, [function (percentage, message, ...args) {
console.log('webpack build done') if (percentage === 1) {
generateMediaQuerys({ generateMediaQuerys({
outputDir outputDir
}) })
} }
}]) }])
}
}, },
css: { css: {
extract: true, extract: true,
......
...@@ -9,7 +9,13 @@ function getTemplatePath (template) { ...@@ -9,7 +9,13 @@ function getTemplatePath (template) {
return path.resolve(process.env.UNI_CLI_CONTEXT, 'public/index.html') return path.resolve(process.env.UNI_CLI_CONTEXT, 'public/index.html')
} }
function transform (content) { function transform (content, platformOptions) {
if (platformOptions.darkmode === true) {
// darkmode
try {
content += fs.readFileSync(require.resolve('@dcloudio/uni-h5/dist/index.dark.css'))
} catch (error) { }
}
if (process.env.NODE_ENV === 'production') { if (process.env.NODE_ENV === 'production') {
return content + // shadow return content + // shadow
'body::after{position:fixed;content:\'\';left:-1000px;top:-1000px;-webkit-animation:shadow-preload .1s;-webkit-animation-delay:3s;animation:shadow-preload .1s;animation-delay:3s}@-webkit-keyframes shadow-preload{0%{background-image:url(https://cdn.dcloud.net.cn/img/shadow-grey.png)}100%{background-image:url(https://cdn.dcloud.net.cn/img/shadow-grey.png)}}@keyframes shadow-preload{0%{background-image:url(https://cdn.dcloud.net.cn/img/shadow-grey.png)}100%{background-image:url(https://cdn.dcloud.net.cn/img/shadow-grey.png)}}' 'body::after{position:fixed;content:\'\';left:-1000px;top:-1000px;-webkit-animation:shadow-preload .1s;-webkit-animation-delay:3s;animation:shadow-preload .1s;animation-delay:3s}@-webkit-keyframes shadow-preload{0%{background-image:url(https://cdn.dcloud.net.cn/img/shadow-grey.png)}100%{background-image:url(https://cdn.dcloud.net.cn/img/shadow-grey.png)}}@keyframes shadow-preload{0%{background-image:url(https://cdn.dcloud.net.cn/img/shadow-grey.png)}100%{background-image:url(https://cdn.dcloud.net.cn/img/shadow-grey.png)}}'
...@@ -44,7 +50,9 @@ module.exports = { ...@@ -44,7 +50,9 @@ module.exports = {
{ {
from: require.resolve('@dcloudio/uni-h5/dist/index.css'), from: require.resolve('@dcloudio/uni-h5/dist/index.css'),
to: getIndexCssPath(vueOptions.assetsDir, platformOptions.template, 'VUE_APP_INDEX_CSS_HASH'), to: getIndexCssPath(vueOptions.assetsDir, platformOptions.template, 'VUE_APP_INDEX_CSS_HASH'),
transform transform (content) {
return transform(content, platformOptions)
}
}, },
'hybrid/html' 'hybrid/html'
] ]
...@@ -52,18 +60,6 @@ module.exports = { ...@@ -52,18 +60,6 @@ module.exports = {
copyOptions.push('uni_modules/' + module + '/hybrid/html') copyOptions.push('uni_modules/' + module + '/hybrid/html')
}) })
// darkmode
let darkPath = ''
try {
darkPath = require.resolve('@dcloudio/uni-h5/dist/index.dark.css')
} catch (error) { }
if (platformOptions.darkmode === true && darkPath) {
copyOptions.push({
from: require.resolve('@dcloudio/uni-h5/dist/index.dark.css'),
to: getIndexCssPath(vueOptions.assetsDir, platformOptions.template, 'VUE_APP_INDEX_DARK_CSS_HASH')
})
}
return copyOptions return copyOptions
} }
} }
@media(prefers-color-scheme:dark){body{background-color:#191919;color:hsla(0,0%,100%,0.8)}}@media(prefers-color-scheme:dark){uni-page-body{background-color:#191919;color:hsla(0,0%,100%,0.8)}}
\ No newline at end of file
...@@ -6,8 +6,6 @@ if (process.env.UNI_USING_V3) { ...@@ -6,8 +6,6 @@ if (process.env.UNI_USING_V3) {
const valueParser = require('postcss-value-parser') const valueParser = require('postcss-value-parser')
const { const {
parseTheme,
getJson,
getPlatformCssVars getPlatformCssVars
} = require('@dcloudio/uni-cli-shared') } = require('@dcloudio/uni-cli-shared')
...@@ -22,7 +20,6 @@ if (process.env.UNI_USING_V3) { ...@@ -22,7 +20,6 @@ if (process.env.UNI_USING_V3) {
} }
const cssVars = getPlatformCssVars() const cssVars = getPlatformCssVars()
const pageJson = getJson('pages.json', true)
const transformSelector = (complexSelector, transformer) => { const transformSelector = (complexSelector, transformer) => {
return selectorParser(transformer).processSync(complexSelector) return selectorParser(transformer).processSync(complexSelector)
...@@ -173,30 +170,6 @@ if (process.env.UNI_USING_V3) { ...@@ -173,30 +170,6 @@ if (process.env.UNI_USING_V3) {
if (process.env.UNI_PLATFORM === 'h5') { if (process.env.UNI_PLATFORM === 'h5') {
// Transform CSS AST here // Transform CSS AST here
// darkmode
if (
process.env.VUE_APP_DARK_MODE === 'true' &&
root.source.input.file.indexOf('App.vue') !== -1
) {
const pageBGC = (pageJson.globalStyle || {}).backgroundColor || ''
if (pageBGC.indexOf('@') === 0) {
['dark', 'light'].forEach(theme => {
const { backgroundColor } = parseTheme({ backgroundColor: pageBGC }, theme)
if (backgroundColor !== 'undefined') {
const mediaRoot = postcss.parse(`
@media (prefers-color-scheme: ${theme}) {
body,
uni-page-body {
background-color: ${backgroundColor};
}
}
`)
root.nodes = [...mediaRoot.nodes, ...root.nodes]
}
})
}
}
root.walkRules(rule => { root.walkRules(rule => {
let hasPage = false let hasPage = false
// Transform each rule here // Transform each rule here
......
const selectorParser = require('postcss-selector-parser') const selectorParser = require('postcss-selector-parser')
const postcss = require('postcss')
const { const {
initTheme,
parseTheme,
getJson,
getManifestJson,
tags tags
} = require('@dcloudio/uni-cli-shared') } = require('@dcloudio/uni-cli-shared')
const TAGS = Object.keys(tags) const TAGS = Object.keys(tags)
const pageJson = getJson('pages.json', true)
const transformSelector = (complexSelector, transformer) => { const transformSelector = (complexSelector, transformer) => {
return selectorParser(transformer).processSync(complexSelector) return selectorParser(transformer).processSync(complexSelector)
...@@ -51,34 +45,6 @@ function once (root) { ...@@ -51,34 +45,6 @@ function once (root) {
) )
} }
}) })
// darkmode
if (
process.env.VUE_APP_DARK_MODE === 'true' &&
root.source.input.file.indexOf('App.vue') !== -1
) {
const pageBGC = (pageJson.globalStyle || {}).backgroundColor || ''
if (pageBGC.indexOf('@') === 0) {
// app 端 webpack-uni-pages-loader/lib/index-new.js 执行晚于 postCss
initTheme(getManifestJson())
;['dark', 'light'].forEach(theme => {
const { backgroundColor } = parseTheme({ backgroundColor: pageBGC }, theme)
if (backgroundColor !== 'undefined') {
const mediaRoot = postcss.parse(`
/* #ifndef APP-NVUE*/
@media (prefers-color-scheme: ${theme}) {
body,
uni-page-body {
background-color: ${backgroundColor};
}
}
/* #endif */
`)
root.nodes = [...mediaRoot.nodes, ...root.nodes]
}
})
}
}
} }
const version = Number(require('postcss/package.json').version.split('.')[0]) const version = Number(require('postcss/package.json').version.split('.')[0])
......
...@@ -33,6 +33,13 @@ body { ...@@ -33,6 +33,13 @@ body {
overflow-x: hidden; overflow-x: hidden;
} }
@media (prefers-color-scheme: dark) {
body {
background-color: #191919;
color: hsla(0, 0%, 100%, 0.8);
}
}
[class^="uni-icon-"], [class^="uni-icon-"],
[class*=" uni-icon-"] { [class*=" uni-icon-"] {
display: inline-block; display: inline-block;
......
...@@ -41,6 +41,13 @@ body { ...@@ -41,6 +41,13 @@ body {
background-color: white; background-color: white;
} }
@media (prefers-color-scheme: dark) {
body {
background-color: #191919;
color: hsla(0, 0%, 100%, 0.8);
}
}
[class^="uni-icon-"], [class^="uni-icon-"],
[class*=" uni-icon-"] { [class*=" uni-icon-"] {
display: inline-block; display: inline-block;
......
...@@ -23,6 +23,13 @@ uni-page-body { ...@@ -23,6 +23,13 @@ uni-page-body {
box-sizing: border-box; box-sizing: border-box;
width: 100%; width: 100%;
} }
@media (prefers-color-scheme: dark) {
uni-page-body {
background-color: #191919;
color: hsla(0, 0%, 100%, 0.8);
}
}
</style> </style>
<script> <script>
import appendCss from 'uni-platform/helpers/append-css' import appendCss from 'uni-platform/helpers/append-css'
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册