我正在制作一个 hamburger menu
作为组件并修复了 fixed
属性,它具有菜单特征的三行,这些是白色的,我需要的是当它处于白色部分变为黑色,即使我占用了 Methods for Contrasting Text Against Backgrounds 但它也不起作用,因为 bg
必须在组件的父 div
中,而不是在何处我发送它来调用它,所以如果有人可以帮助我如何让它改变颜色,或者如果已经有一些 npm
的汉堡包相对于 bg
改变颜色。
此外,有必要考虑到在每个不同的页面中它都有不同的 bg
,并且在我命令的所有页面中都将 nav
作为组件调用。
这将是我在菜单上的代码,其中包含 nextjs
和 typescript
import { StyledHamburger } from "./Hamburger.styled";
export type Props = {
open: boolean;
setOpen: (v: boolean) => void;
};
const Hamburger = (props: Props) => (
<StyledHamburger open={props.open} onClick={() => props.setOpen(!props.open)}>
<div />
<div />
<div />
</StyledHamburger>
);
export default Hamburger;
样式:
import styled from "styled-components";
import { colors } from "../global";
export const StyledHamburger = styled.button<{ open: boolean }>`
position: fixed;
width: 2rem;
height: 2rem;
padding: 0;
background: transparent;
display: flex;
flex-direction: column;
align-items: center;
justify-content: space-around;
border: none;
cursor: pointer;
outline: none;
z-index: 2;
div {
position: relative;
width: 2rem;
height: 0.25rem;
border-radius: 0px;
transition: all 0.3s linear;
transform-origin: 1px;
background-color: ${({ open }) =>
open ? colors.pearl : colors.pearl};
:first-child {
transform: ${({ open }) => (open ? "rotate(45deg)" : "rotate(0)")};
}
:nth-child(2) {
opacity: ${({ open }) => (open ? "0" : "1")};
transform: ${({ open }) => (open ? "translateX(20px)" : "translateX(0)")};
}
:nth-child(3) {
transform: ${({ open }) => (open ? "rotate(-45deg)" : "rotate(0)")};
}
}
p {
position: relative;
border-radius: 0px;
transition: all 0.3s linear;
transform-origin: 1px;
background-color: ${({ open }) =>
open ? colors.pearl : colors.pearl};
transform: ${({ open }) => (open ? "translateX(20px)" : "translateX(0)")};
}
`;
答案 0 :(得分:0)
我不确定是否有一个简单的解决方案来检查元素的背景并进行更改。
我会使用 intersection observer 来检查每个部分及其背景颜色。然后将正确的样式应用到汉堡包元素。它不像您所说的自动对比工具那样自动化,但应该相当容易控制和使用。
答案 1 :(得分:0)
如果每个汉堡包菜单都在不同背景的自己的页面上,您可以使用 CSS 为每页菜单设置样式。您可以做的是为每个页面分配一个附加到正文的 id,然后在 CSS 中调用该 ID 和汉堡菜单来设置样式。
示例:
<body id="homepage">
<nav class="hamburger">
</body>
对于第 2 页:
<body id="about-us">
<nav class="hamburger">
</body>
然后在 CSS 中:
#homepage .hamburger {
your styles
}
#about-us .hamburger {
your styles
}