在样式化模式下使用 PrimeReact 级联层的最佳实践。
CSS 层仅在样式化模式下使用,在非样式化模式下,不包含内置的 CSS 类,因此不定义层。本文档仅适用于样式化模式。
@layer 是一个标准的 CSS 功能,用于定义级联层以实现可自定义的优先级顺序。如果您需要更熟悉层,请访问 MDN 上的文档作为入门。在样式化模式下,PrimeReact 将内置样式类包装在 primereact 级联层下,以便轻松覆盖库样式。您应用程序中没有层的 CSS 具有最高的 CSS 特异性,因此无论位置如何,或者类的编写有多强,您都能够覆盖样式。
例如,假设您需要删除正在使用的主题定义的 InputSwitch 组件的圆角边框。为了实现这一点,需要覆盖 .p-inputswitch .p-inputswitch-slider 选择器。如果没有层,我们将不得不编写更强的 css 或使用 !important,但是,有了层,这不会出现问题,因为您的 CSS 始终可以使用更直接的类名(如 my-switch-slider)覆盖 PrimeReact。此方法的另一个优点是它不会强迫您找出组件的内置类名。
import React, { useState } from 'react';
import { InputSwitch } from 'primereact/inputswitch';
export function SpecificityDemo() {
const [checked, setChecked] = useState(false);
const css = `
.my-switch-slider {
border-radius: 0;
}
.my-switch-slider:before {
border-radius: 0;
}
`;
return (
<div className="card">
<InputSwitch
checked={checked}
onChange={(e) => setChecked(e.value)}
pt={{
slider: {
className: 'my-switch-slider'
}
}}
/>
<style>{css}</style>
</div>
);
}
层还可以使用 CSS 模块,有关示例,请查看 CSS 模块 指南。
如果您在 HTML 元素(如输入和按钮)上具有全局样式,而这些元素也由 PrimeReact 使用,那么自定义的便利性可能会出现问题,因为具有更广泛范围的全局样式(例如 button )且没有层的全局样式始终会覆盖 PrimeReact 组件,从而导致意外的结果。将全局样式应用于标准 HTML 元素的常见用例是 CSS 重置实用程序,以删除浏览器的默认样式。在这种情况下,最佳实践是将您的 CSS 包装在 reset 之类的层中,并确保 primereact 在您的层之后,因为定义在后的层具有更高的优先级。这样,您的重置 CSS 不会妨碍 PrimeReact 组件。
/* Order */
@layer reset, primereact;
/* Reset CSS */
@layer reset {
button,
input {
/* CSS to Reset */
}
}
PrimeReact 和 CSS 库之间的兼容性。
Tailwind CSS 在名为 preflight 的基础中包含一个重置实用程序。如果您正在使用此功能,请将基础和实用程序包装在单独的层中,并确保 primereact 层在基础之后。
@layer tailwind-base, primereact, tailwind-utilities;
@layer tailwind-base {
@tailwind base;
}
@layer tailwind-utilities {
@tailwind components;
@tailwind utilities;
}
Bootstrap 具有 reboot 实用程序来重置标准元素的 CSS。如果您要包含此实用程序,则可以在导入时为其指定一个层。
@layer bootstrap-reboot, primereact;
@import "bootstrap-reboot.css" layer(bootstrap-rebooot);
Normalize 是另一个用于重置标准元素 CSS 的实用程序。导入 CSS 文件时,将其分配给一个层,并定义层顺序,使 primereact 在规范化层之后。
@layer normalize, primereact;
@import "normalize.css" layer(normalize-reset);