【发布时间】:2021-12-30 08:07:45
【问题描述】:
我试图将我的问题简化为以下内容:
.wrapper {
position: relative;
display: inline-flex;
min-height: 1.5rem;
border: 1px solid black;
margin-right: 1rem;
padding-right: 1.5rem;
}
.input {
position: absolute;
z-index: -1;
opactiy: 0;
}
.label-wrapper {
margin-left: 2rem;
}
.label {
position: relative;
margin-bottom: 0;
}
.label:before {
position: absolute;
top: 4px;
left: -24px;
display: block;
width: 20px;
height: 20px;
pointer-events: none;
content: "";
background-color: #fff;
}
.label:after {
position: absolute;
top: 4px;
left: -24px;
display: block;
height: 40px;
content: "";
background-repeat: no-repeat;
background-position: center center;
background-size: 50% 50%;
}
<div class="wrapper">
<input class="input" type="checkbox"></input>
<label class="label">
<div class="label-wrapper">
Option 1
</div>
</label>
</div>
除此之外,我还有以下 CSS(在 StyledComponent 中),当用户单击 .input 中隐藏的 input 时,它会在复选框中添加一个“检查”:
&[type="checkbox"]:checked ~ label::after {
background-image: url("${checkboxImage}");
top: -2px;
left: -29px;
width: 30px;
height: 30px;
}
这意味着它的行为应该像一个复选框 - 但是,我想交换我的元素,以便复选框位于文本的右侧而不是左侧,为此我尝试重新排序 input这样它就出现在label 之后,但随后隐藏的输入(处理实际点击行为与 CSS 复选框脱节?谁能指出我如何解决这个问题的方向?
总结:
使用:before & :after 创建一个可视复选框,但该复选框的逻辑实际上是由input 处理的(它是隐藏的) - 如何将可视输入和隐藏输入都移动到文本的右侧?
【问题讨论】:
标签: html css styled-components