我有一个div组件:
const Parent = styled.div`
&:not(${Input}:focus):hover {
border-color: blue;
}
`;
和输入的孩子
const Input = styled.input``;
正如你所看到的,如果border-color
专注,我不想在Parent
上更改Input
。然而,大气的:hover
根本不起作用。寻求帮助,谢谢!
你可以利用:focus-within
来做到这一点。
div {
padding: 1em;
margin: 2em;
display: inline-block;
border-width: 3px;
border-style: solid;
}
div:hover {
border-color: red;
}
div,
div:focus-within,
div:focus-within:hover {
border: 3px solid blue;
}
<div>
<input type="text">
</div>
我不知道如何只使用选择器css来处理它,但你可以用javascript欺骗它。
你的风格组件:
const Input = styled.input``
const Parent = styled.div`
border: 1px solid blue;
:hover {
border-color: ${p => p.inputFocus ? "blue" : "yellow"};
}
`
并且在渲染中,您可以处理输入的状态焦点。
渲染:
state = {
inputFocus: false
}
setFocus = () => this.setState({inputFocus: true})
unsetFocus = () => this.setState({inputFocus: false})
render() {
const { inputFocus } = this.state
return (
<Container inputFocus={inputFocus}>
<Input
onBlur={this.unsetFocus}
onFocus={this.setFocus}
/>
</Container>
)
}