gpt4 book ai didi

javascript - 在具有仪表板和登陆的 React 应用程序中处理 CSS 样式冲突的最佳方法是什么?

转载 作者:可可西里 更新时间:2023-11-01 13:45:24 25 4
gpt4 key购买 nike

我不是很喜欢样式,我是一名程序员,所以也许我做错了什么,但我不知道如何处理这个问题:我在 reactjs 上有一个 SPA,它有管理仪表板和一个登陆页面。根据用户是否登录,在同一个域和 url 上呈现不同的模块。index.html 页面非常简单:

<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">

<title></title>

</head>
<body>

<div id="app">
</div>
</body>
</html>

在 index.js 中有一个 session 检查,如果用户登录,仪表板将呈现给应用程序 div 而不是登陆。我自己并没有创建仪表板样式,我从 Internet 上获取了一个 Bootstrap 模板,当然还有它的自定义样式。我还有包含以下内容的 styles.scss 文件:

@import "./custom";
@import "./font-awesome";
@import "./app/admin";
@import "./app/daterangepicker";
@import "./app/nprogress";
@import "./app/skin";
@import "./bootstrap";

此文件导入到 index.js。问题是仪表板的自定义样式与我的登录页面(也是使用 Bootstrap 构建的)css 样式冲突。

所以我的第一个想法是创建 2 个带有导入的 scss 文件,一个用于仪表板,一个用于登陆。但是有什么方法可以根据必须呈现应用程序的哪一部分来附加不同的 css 文件,并且能够在条件语句中执行此操作而无需在浏览器中重新加载整个页面?或者也许有一些更好的想法来解决这个问题?

最佳答案

这通常是一个事后很难很好解决的问题。根据我的经验,这些 css 特异性和阴影问题没有很好的解决方案,但您有一些选择。

您可以为这两个 View 的某些顶级组件提供一个基于页面的附加类名,然后在该类下确定您的 scss 包或您需要优先使用的特定自定义样式的范围。例如,假设 app.scss 具有所有样式:

#app {
// shared styles

&.landing-page {
// landing-page specific styles
.bootstrap-component {
color: blue;
}
}

&.dashboard {
// dashboard-specific styles
.bootstrap-component {
color: red;
}
}
}

这个问题的一个原因很简单,就是对于使用相同类的类似组件,您有两种不同的自定义样式。尽你所能,尝试在组件的 UI 中保持一致,以便同一组件使用相同的样式,并通过新类应用少量修改。如果那不可能,也许有不同的方法来处理这些组件的样式:

  • 对两个页面之间共享的 Bootstrap 样式所做的更改可以作为该类的自定义样式进行,但组件样式中的差异应该作为该组件的修饰符显示出来。使用 BEM 类命名约定确实帮助我做得更好:brief | more helpful
    • 例如,如果 Bootstrap 有一个 header 组件,而您的仪表板和着陆页都希望它是绿色而不是蓝色,请将其包含在您对 Bootstrap 样式的更改中。但是,如果标题在仪表板页面上较小而在着陆页上较大,则这些更改可以由新类一起应用。

如果服务器事先知道身份验证状态(通过一些 token - 它可能知道),您可以提供不同的 html 页面或不同版本的 css。这种结合了服务器端渲染和一些智能 css 缩小。我认为这不是您要找的东西,但可能取决于您的元素范围。不过,我认为提到的关于尝试将共享和独特的样式隔离到组件的观点是更好的方法。

关于javascript - 在具有仪表板和登陆的 React 应用程序中处理 CSS 样式冲突的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44916363/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com