【问题标题】:CSS not rendered correctlyCSS 未正确呈现
【发布时间】:2020-10-21 19:49:50
【问题描述】:

我有一个使用 Material UI 的 React.js 网络应用。但是,此应用程序中的一个组件管理我们的网站并提供自定义内容的预览。该网站使用 Bootstrap 和 Font Awesome,因此我在 HTML 预览中将这些 CSS 以及我们的网站 CSS 导入到此组件的 jsx 中,如下所示(忽略导入路径,它们被隐藏但确认正确):

我还尝试在 scss 文件中而不是在 jsx 中导入相同的文件,并在预览组件中使用 ES6 导入该文件。这产生了相同的结果。

在预览中,css 没有在浏览器中正确呈现。我试过 Chrome 和 Edge,它们的功能是一样的。页面上有几个元素的样式不正确,这里只是一个应该是橙色的按钮示例:

这是 Chrome 中的计算样式,它显示了背景颜色的正确十六进制值 #ff4c00(但不知何故具有不正确的 rgb 等效值)。 rgb 值似乎随着每次重新加载而改变,有时是正确的。但是,无论 rgb 值如何,按钮始终为蓝色并带有橙色边框。

按钮有以下类:btn btn-brand btn-round mr-2 mb-2 align-bottom。

以下是适用于按钮的 CSS 规则:

.ContentManager .btn {
    border-width: 2px;
    border-radius: 0;
    font-family: "Poppins", Arial, serif;
    text-transform: uppercase;
    letter-spacing: 0.09375rem;
    font-weight: 600;
    font-size: 0.625rem;
    padding: 0.9375rem 1.75rem 0.9375rem 1.75rem;
    -webkit-transition: all 0.3s ease-out;
    transition: all 0.3s ease-out;
}
.ContentManager .btn:focus,
.ContentManager .btn.focus,
.ContentManager .btn.active.focus,
.ContentManager .btn.active:focus,
.ContentManager .btn:active.focus,
.ContentManager .btn:active:focus {
    outline: 0;
}
.ContentManager .btn.btn-circle {
    border-radius: 30px;
}
.ContentManager .btn.btn-round {
    border-radius: 2px;
}
.ContentManager .btn.btn-shadow {
    box-shadow: 0 1px 30px rgba(0, 0, 0, 0.1);
}
.ContentManager .btn.btn-brand {
    background-color: #ff4c00;
    border-color: #ff4c00;
    color: #ffffff;
}
.ContentManager .btn.btn-brand:hover,
.ContentManager .btn.btn-brand:focus {
    background-color: #802600;
    border-color: #802600;
    color: #ffffff;
}
.ContentManager .btn.btn-brand.btn-outline {
    background: #fff;
    border-color: #ff4c00;
    color: #ff4c00;
}
.ContentManager .btn.btn-brand.btn-outline:hover,
.ContentManager .btn.btn-brand.btn-outline:focus {
    background: #ff4c00;
    border-color: #ffffff;
    color: #ffffff;
}

浏览器如何显示正确的背景颜色值但呈现不同的颜色?有没有更好的方法来导入仅用于一个组件的一部分的外部 css 文件?

【问题讨论】:

  • 您应该为按钮和相关的 CSS 规则提供实际的 HTML 输出。很可能有一个子元素使按钮保持蓝色。
  • 按钮 HTML 只是一个锚标记,它没有任何子标记。我在问题中添加了相关的 CSS 规则。我对浏览器如何在“样式”选项卡中显示正确的背景颜色但将其呈现为不同颜色感到困惑。
  • 我发现如果我将 css 规则更改为 background 而不是 background-color 它可以工作。然而,这不是一个可行的解决方案,因为引导程序和其他库将使用背景色。

标签: css reactjs bootstrap-4 material-ui


【解决方案1】:

您不应该在 JSX 中添加<style> 标签,文件应该通过import 语句导入。请参阅此处的文档:https://create-react-app.dev/docs/adding-a-stylesheet/

例如:

import '../../../[yourCssFile].css';

您还可以使用 makeStyles 方法和主题将 CSS 注入到 material-ui 组件中,或者根据 material-ui 文档覆盖全局 CSS 规则:https://material-ui.com/api/button/#css

【讨论】:

  • 我已经尝试过您在问题中提到的导入方法。这产生了相同的结果。我无法使用 makeStyles 方法或修改全局 css,因为该网站不使用 Material UI。 Webapp 提供但仅提供网站内容的预览,严格来说是 HTML 和 React 组件。我正在使用 html-react-parser 在 Webapp 预览和网站中呈现该内容。
猜你喜欢
  • 1970-01-01
  • 2019-07-22
  • 2018-06-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多