Flexbox 样式在 React 样式组件中不起作用
Flexbox styles not working in React Styled Component
我一直在努力使用 StyledComponents 为我的 React 应用程序设置样式,但是我已经成功地重新创建并修复了此代码笔中的问题:
https://codepen.io/simoncunningham/pen/mdwMgyL
(基本上使用 flex: 1
)来确保复选框扩展到父级的整个宽度)但是我不能用我的 StyledComponents 反映这个变化,任何人都可以看到我可能遗漏了什么吗?
const StyledWrapper = styled.div`
position: relative;
display: inline-flex;
min-height: 1.5rem;
margin-right: 1rem;
padding: 0.5rem
width: 200px;
`;
const StyledHiddenInput = styled.input`
position: absolute;
z-index: -1;
visibility: hidden;
&[type="checkbox"]:checked ~ label::after {
background-image: url("${checkboxImage}");
width: 20px;
height: 20px;
}
`;
const StyledLabel = styled.label`
position: relative;
margin-bottom: 0;
display: flex;
margin-left: 0;
margin-right: 24px;
flex-direction: row-reverse;
justify-content: space-between;
flex: 1;
&::before {
display: block;
top: 4px;
width: 20px;
height: 20px;
content: "";
background-color: #fff;
border: 1px solid black;
border-radius: 4px;
}
&::after {
position: absolute;
display: block;
top: 4px;
height: 20px;
content: "";
background-repeat: no-repeat;
background-position: center center;
background-size: 80%;
}
`;
const StyledLabelWrapper = styled.div`
margin-left: 24px;
margin-right: 0;
`;
<StyledWrapper>
<StyledHiddenInput />
<StyledLabel>
<StyledLabelWrapper>{label}</StyledLabelWrapper>
</StyledLabel>
</StyledWrapper>
Codepen 的输出屏幕截图(按预期工作,复选框显示在尽可能靠右的位置)::
样式化组件的输出屏幕截图:
试试这个(最后添加的 2 个属性):
.label::before {
display: block;
width: 20px;
height: 20px;
content: "";
background-color: #fff;
border: 1px solid black;
border-radius: 4px;
position: relative;
right: 0;
}
通过像这样更新 StyledWrapper 上的 width
解决了问题:
const StyledWrapper = styled.div`
display: inline-flex;
min-height: 1.5rem;
padding: 0.5rem
width: 100%;
`;
允许内容增长到其容器的整个宽度。
我一直在努力使用 StyledComponents 为我的 React 应用程序设置样式,但是我已经成功地重新创建并修复了此代码笔中的问题:
https://codepen.io/simoncunningham/pen/mdwMgyL
(基本上使用 flex: 1
)来确保复选框扩展到父级的整个宽度)但是我不能用我的 StyledComponents 反映这个变化,任何人都可以看到我可能遗漏了什么吗?
const StyledWrapper = styled.div`
position: relative;
display: inline-flex;
min-height: 1.5rem;
margin-right: 1rem;
padding: 0.5rem
width: 200px;
`;
const StyledHiddenInput = styled.input`
position: absolute;
z-index: -1;
visibility: hidden;
&[type="checkbox"]:checked ~ label::after {
background-image: url("${checkboxImage}");
width: 20px;
height: 20px;
}
`;
const StyledLabel = styled.label`
position: relative;
margin-bottom: 0;
display: flex;
margin-left: 0;
margin-right: 24px;
flex-direction: row-reverse;
justify-content: space-between;
flex: 1;
&::before {
display: block;
top: 4px;
width: 20px;
height: 20px;
content: "";
background-color: #fff;
border: 1px solid black;
border-radius: 4px;
}
&::after {
position: absolute;
display: block;
top: 4px;
height: 20px;
content: "";
background-repeat: no-repeat;
background-position: center center;
background-size: 80%;
}
`;
const StyledLabelWrapper = styled.div`
margin-left: 24px;
margin-right: 0;
`;
<StyledWrapper>
<StyledHiddenInput />
<StyledLabel>
<StyledLabelWrapper>{label}</StyledLabelWrapper>
</StyledLabel>
</StyledWrapper>
Codepen 的输出屏幕截图(按预期工作,复选框显示在尽可能靠右的位置)::
样式化组件的输出屏幕截图:
试试这个(最后添加的 2 个属性):
.label::before {
display: block;
width: 20px;
height: 20px;
content: "";
background-color: #fff;
border: 1px solid black;
border-radius: 4px;
position: relative;
right: 0;
}
通过像这样更新 StyledWrapper 上的 width
解决了问题:
const StyledWrapper = styled.div`
display: inline-flex;
min-height: 1.5rem;
padding: 0.5rem
width: 100%;
`;
允许内容增长到其容器的整个宽度。