Ruby on Rails 7 在浅色和深色主题之间切换时的闪烁效果

Ruby on Rails 7 flickering effect while switching between light and dark theme

提问人:Volkan 提问时间:7/14/2023 最后编辑:tadmanVolkan 更新时间:10/29/2023 访问量:50

问:

我使用这个 youtube 教程来介绍在主题(浅色、深色或系统默认)之间切换的能力。一切正常,但是存在闪烁效果形式的错误。 例如,我在 LIGHT 主题上,我访问其他子页面,都很好,显示浅色主题。 我切换到深色主题。它有效,但是在访问其他子页面时,在应用深色主题之前,浅色主题会显示一秒钟,从而产生一些闪烁。

本教程中给出的代码更改,用于此主题切换工作:

application.html.erb(可点击链接):

<%= cookies[:theme] %>
<%= link_to 'Light', set_theme_path(theme: 'light') %>
<%= link_to 'Dark', set_theme_path(theme: 'dark') %>
<%= link_to 'System default', set_theme_path %>

theme.scss:

@media (prefers-color-scheme: dark) {
    .home {
      background:black;
      color: white;
    }

    .home.light {
        background: silver;
        color: black;
    }
  }


  @media (prefers-color-scheme: light) {
    .home {
        background: silver;
        color: black;

    }

    .home.dark {
        background:black;
        color: white;
    }
  }

routes.rb

  get 'set_theme', to: 'theme#update'

theme_controller.rb

class ThemeController < ApplicationController
    def update
        cookies[:theme] = params[:theme]
        redirect_to(request.referrer || root_path )
    end
end

主题切换有效,但我想删除这种闪烁效果。谁能帮我解决这个问题?

谢谢

CSS Ruby-on-Rails 红宝石

评论


答:

1赞 Guillermo Aguirre 10/29/2023 #1

我认为您缺少直接在 HTML 中设置主题,因此它在加载开始时就在那里:

<html class="<%= cookies[:theme] == 'dark' ? 'dark' : 'light' %>">

除此之外,我建议使用 StimulusJS 通过 JS 添加切换和 cookie 设置。