是否可以使用伪类来设置样式组件。我有一个复选框,它应该显示SVG图像:选中/未选中以显示状态为选中/未选中。我可以通过父母传递道具来做到这一点。但我被告知只有css(样式组件)才有可能。 我的代码的一部分:
const CheckboxInput = styled.input`
&:checked, &:not(:checked) {
display: none;
}`;
const CheckboxLabel = styled.label`
cursor: pointer;
-webkit-user-select: none; /* Chrome/Safari */
-moz-user-select: none; /* Firefox */
-ms-user-select: none; /* IE10+ */
`;
function Checkbox(props) {
return (
<CheckboxLabel htmlFor="id" onChange={() => { props.onchange(); }}>
<CheckboxInput id="id" type="checkbox" checked={props.checked} value="cb" name="cb" />
<Span><SVG glyph={checked} width={17} height={17} /></Span>
<Span><SVG glyph={unchecked} width={17} height={17} /></Span>
{props.children}
</CheckboxLabel>
);
}
答案 0 :(得分:3)
使用styled-components
中的跟随选择器,您可以使用输入/复选框的状态来仅使用CSS修改样式:
&:checked + ${Label} {
/* your CSS */
}
以下是一个完整的例子:
import React from 'react';
import { render } from 'react-dom';
import styled from 'styled-components';
const Label = styled.label`
background: red;
display: block;
padding: 1rem;
`;
const Input = styled.input`
&:checked + ${Label} {
background: blue;
}
`;
const App = () => (
<div>
<Input id="input" type="checkbox" />
<Label for="input" />
</div>
);
render(<App />, document.getElementById('root'));
您可以在此处查看预览:https://codesandbox.io/s/oYQ21A4wz
这应该为您提供如何仅使用CSS更改样式的基本知识。