css - 自定义 CSS 复选框和多行对齐刻度
问题描述
我在 a 上使用:before
和:after
伪元素创建了一个自定义复选框<span>
,它在单行上效果很好,但是当<span>
.
我尝试使用相对值进行定位,但没有任何效果。
<ul class="calendar-filter-menu-cont">
<li>
<label>
<input type="checkbox">
<span>One line</span>
</label>
</li>
<li>
<label>
<input type="checkbox">
<span>This is the second item in the list</span>
</label>
</li>
<li>
<label>
<input type="checkbox">
<span>This is the third item in the list</span>
</label>
</li>
</ul>
ul.calendar-filter-menu-cont {
color: black;
column-count: 3;
max-width: 500px;
}
ul.calendar-filter-menu-cont > li {
break-inside: avoid-column;
}
ul.calendar-filter-menu-cont > li label {
display: flex;
position: relative;
}
ul.calendar-filter-menu-cont > li label:not(:last-child) {
margin-bottom: 10px;
}
ul.calendar-filter-menu-cont > li label input[type="checkbox"] {
margin-right: 1em;
opacity: 0;
}
ul.calendar-filter-menu-cont > li label input[type="checkbox"] + span:before {
content: '';
display: inline-block;
position: absolute;
top: 50%;
left: 0;
transform: translateY(-50%);
border: 1px solid #979797;
width: .8em;
height: .8em;
background-color: #f3f3f3;
box-shadow: inset 0 0 5px 0 rgba(0, 0, 0, 0.2);
}
ul.calendar-filter-menu-cont > li label input[type="checkbox"]:checked + span:after {
content: '';
position: absolute;
top: .7ex;
left: .35ex;
width: .9ex;
height: .45ex;
background: rgba(0, 0, 0, 0);
border: 3px solid blue;
border-top: none;
border-right: none;
transform: rotate(-45deg);
}
解决方案
所以问题是你的:before
和:after
没有与相同的属性对齐。:before
垂直居中并:after
顶部对齐。
如果要将复选框居中到输入框,如下所示:
您需要将复选标记与以下内容居中:
ul.calendar-filter-menu-cont > li label input[type="checkbox"]:checked + span:after {
content: '';
position: absolute;
top: .7ex;
left: .35ex;
width: .9ex;
height: .45ex;
background: rgba(0, 0, 0, 0);
border: 3px solid blue;
border-top: none;
border-right: none;
top: calc(50% - 1px); // Addition
transform: translateY(-50%) rotate(-45deg); // Change
}
更改包括添加top
属性和增加translateY
价值transform
如果您想让复选框顶部与输入对齐,如下所示:
只需删除transform
并将top
属性更改为静态值,如下所示:
ul.calendar-filter-menu-cont > li label input[type="checkbox"] + span:before {
content: '';
display: inline-block;
position: absolute;
top: .3ex; // Change
left: 0;
/* transform: translateY(-50%); */ // Remove
border: 1px solid #979797;
width: .8em;
height: .8em;
background-color: #f3f3f3;
box-shadow: inset 0 0 5px 0 rgba(0, 0, 0, 0.2);
}
推荐阅读
- discord.js - 错误“fn 不是函数”(discord.js 机器人)
- c# - 在 .NET Core 中使用 System.Management 获取 UUID
- python - 将两个 CSV 转换为一个 json
- android - 如何在 linphone 4.3.0 new SDK for android 中启用 G729 音频编解码器?
- swift - SwiftUI TapGesture onStart / TouchDown
- android - BLE readCharacteristic(characteristic) 返回 false (Accu Check Instant Gluco Meter)
- django - 使用聚合将原始 SQL 查询集成到 Django ORM 中
- angular - 垫日历的最大日期
- node.js - 为什么每个 npm ip 包都给我 127.0.0.1 而不是 192.168.xx.xx?
- swift - 矩形进度条swiftUI