Vuetify: [Bug Report] Theme loading issue

Created on 29 Oct 2019  路  8Comments  路  Source: vuetifyjs/vuetify

Environment

Vuetify Version: 2.1.7
Last working version: 2.1.4
Vue Version: 2.6.10
Browsers: Chrome 77.0.3865.120
OS: Windows 7

Steps to reproduce

  1. Open the attached reproduction link.
  2. Wait for build.
  3. Press the refresh icon in the embedded codesandbox browser.
  4. See the theme color is display black until 1-2 seconds.
  5. After fully load the page, then color is switched to the "red" primary color.

Expected Behavior

Immediately display the page with the appropriate theme colors.

Actual Behavior

The page theme color is black until 1-2 seconds. It is not so good.

Reproduction Link

https://codesandbox.io/s/nuxtjs-vuetify-217-b0dfj

Other comments

Thanks in advance for the fix. :-) @DRoet and @johnleider.

Theme

Most helpful comment

Asked about this in the vue-meta repo, https://github.com/nuxt/vue-meta/issues/481

All 8 comments

Asked about this in the vue-meta repo, https://github.com/nuxt/vue-meta/issues/481

Here is my workaround, snag this from the source of vuetify version 2.1.5

temp.sass
// Temporary until it gets fixed
// https://github.com/nuxt/vue-meta/issues/481
:root
    --v-anchor-base: #0D47A1
    --v-primary-base: #008940
    --v-primary-lighten3: #009546
    --v-secondary-base: #9f9f9f
    --v-secondary-lighten5: #ffffff
    --v-secondary-lighten4: #efefef
    --v-secondary-lighten3: #dfdfdf
    --v-secondary-darken2: #777777
    --v-secondary-darken3: #3e3e3e
    --v-secondary-darken5: #000000
    --v-accent-base: #0279d7
    --v-accent-lighten1: #23bfff
    --v-accent-darken3: #0d47a1
    --v-error-base: #b71c1c
    --v-error-lighten1: #ff5252
    --v-info-base: #0279d7
    --v-success-base: #28a745
    --v-success-lighten3: #4caf50
    --v-success-darken3: #00592a
    --v-warning-base: #ff8800
    --v-warning-lighten3: #fad53e
    --v-warning-darken3: #e65100

.v-application a
    color: var(--v-anchor-base)
.v-application .primary
    background-color: var(--v-primary-base) !important
    border-color: var(--v-primary-base) !important

.v-application .primary--text
    color: var(--v-primary-base) !important
    caret-color: var(--v-primary-base) !important

.v-application .primary.lighten-3
    background-color: var(--v-primary-lighten3) !important
    border-color: var(--v-primary-lighten3) !important

.v-application .primary--text.text--lighten-3
    color: var(--v-primary-lighten3) !important
    caret-color: var(--v-primary-lighten3) !important

.v-application .secondary
    background-color: var(--v-secondary-base) !important
    border-color: var(--v-secondary-base) !important

.v-application .secondary--text
    color: var(--v-secondary-base) !important
    caret-color: var(--v-secondary-base) !important

.v-application .secondary.lighten-5
    background-color: var(--v-secondary-lighten5) !important
    border-color: var(--v-secondary-lighten5) !important

.v-application .secondary--text.text--lighten-5
    color: var(--v-secondary-lighten5) !important
    caret-color: var(--v-secondary-lighten5) !important

.v-application .secondary.lighten-4
    background-color: var(--v-secondary-lighten4) !important
    border-color: var(--v-secondary-lighten4) !important

.v-application .secondary--text.text--lighten-4
    color: var(--v-secondary-lighten4) !important
    caret-color: var(--v-secondary-lighten4) !important

.v-application .secondary.lighten-3
    background-color: var(--v-secondary-lighten3) !important
    border-color: var(--v-secondary-lighten3) !important

.v-application .secondary--text.text--lighten-3
    color: var(--v-secondary-lighten3) !important
    caret-color: var(--v-secondary-lighten3) !important

.v-application .secondary.darken-2
    background-color: var(--v-secondary-darken2) !important
    border-color: var(--v-secondary-darken2) !important

.v-application .secondary--text.text--darken-2
    color: var(--v-secondary-darken2) !important
    caret-color: var(--v-secondary-darken2) !important

.v-application .secondary.darken-3
    background-color: var(--v-secondary-darken3) !important
    border-color: var(--v-secondary-darken3) !important

.v-application .secondary--text.text--darken-3
    color: var(--v-secondary-darken3) !important
    caret-color: var(--v-secondary-darken3) !important

.v-application .secondary.darken-5
    background-color: var(--v-secondary-darken5) !important
    border-color: var(--v-secondary-darken5) !important

.v-application .secondary--text.text--darken-5
    color: var(--v-secondary-darken5) !important
    caret-color: var(--v-secondary-darken5) !important

.v-application .accent
    background-color: var(--v-accent-base) !important
    border-color: var(--v-accent-base) !important

.v-application .accent--text
    color: var(--v-accent-base) !important
    caret-color: var(--v-accent-base) !important

.v-application .accent.lighten-1
    background-color: var(--v-accent-lighten1) !important
    border-color: var(--v-accent-lighten1) !important

.v-application .accent--text.text--lighten-1
    color: var(--v-accent-lighten1) !important
    caret-color: var(--v-accent-lighten1) !important

.v-application .accent.darken-3
    background-color: var(--v-accent-darken3) !important
    border-color: var(--v-accent-darken3) !important

.v-application .accent--text.text--darken-3
    color: var(--v-accent-darken3) !important
    caret-color: var(--v-accent-darken3) !important

.v-application .error
    background-color: var(--v-error-base) !important
    border-color: var(--v-error-base) !important

.v-application .error--text
    color: var(--v-error-base) !important
    caret-color: var(--v-error-base) !important

.v-application .error.lighten-1
    background-color: var(--v-error-lighten1) !important
    border-color: var(--v-error-lighten1) !important

.v-application .error--text.text--lighten-1
    color: var(--v-error-lighten1) !important
    caret-color: var(--v-error-lighten1) !important

.v-application .info
    background-color: var(--v-info-base) !important
    border-color: var(--v-info-base) !important

.v-application .info--text
    color: var(--v-info-base) !important
    caret-color: var(--v-info-base) !important

.v-application .success
    background-color: var(--v-success-base) !important
    border-color: var(--v-success-base) !important

.v-application .success--text
    color: var(--v-success-base) !important
    caret-color: var(--v-success-base) !important

.v-application .success.lighten-3
    background-color: var(--v-success-lighten3) !important
    border-color: var(--v-success-lighten3) !important

.v-application .success--text.text--lighten-3
    color: var(--v-success-lighten3) !important
    caret-color: var(--v-success-lighten3) !important

.v-application .success.darken-3
    background-color: var(--v-success-darken3) !important
    border-color: var(--v-success-darken3) !important

.v-application .success--text.text--darken-3
    color: var(--v-success-darken3) !important
    caret-color: var(--v-success-darken3) !important

.v-application .warning
    background-color: var(--v-warning-base) !important
    border-color: var(--v-warning-base) !important

.v-application .warning--text
    color: var(--v-warning-base) !important
    caret-color: var(--v-warning-base) !important

.v-application .warning.lighten-3
    background-color: var(--v-warning-lighten3) !important
    border-color: var(--v-warning-lighten3) !important

.v-application .warning--text.text--lighten-3
    color: var(--v-warning-lighten3) !important
    caret-color: var(--v-warning-lighten3) !important

.v-application .warning.darken-3
    background-color: var(--v-warning-darken3) !important
    border-color: var(--v-warning-darken3) !important

.v-application .warning--text.text--darken-3
    color: var(--v-warning-darken3) !important
    caret-color: var(--v-warning-darken3) !important

Okay, thanks.

Screenshot_20191111-183419

On mobile device look like this.

Screenshot_20191111-183908
...and after fully loaded the app, then look like this.

Now of course, I need to dynamically change the theme. So my "workaround" no longer works. Does anyone else have a hack?

Alright I have a new hacky workaround, so I took what I did before but created a bunch of different sass files with different themes like this:
steel-blue.sass

// Temporary until it gets fixed
:root
    --v-primary-base: #0E5E9E

And here this colour var can be changeed to whatever
parent.vue

    async created () {
        // Temporary until it gets fixed
        /* eslint-disable */
        // @ts-ignore  
        const colour = true ? 'steel-blue' : 'red'
        await import(`../assets/styles/themes/${colour}.sass`)
    }

Edit:
Scratch that, my workaround only seems to work in development, does not work in production

Alright found a new workaround https://github.com/vuetifyjs/vuetify/issues/9453#issuecomment-604217303

Was this page helpful?
0 / 5 - 0 ratings

Related issues

dschreij picture dschreij  路  3Comments

smousa picture smousa  路  3Comments

Antway picture Antway  路  3Comments

aaronjpitts picture aaronjpitts  路  3Comments

itanka9 picture itanka9  路  3Comments