引导程序如何确定复选框/单选按钮的选中状态

Posted

技术标签:

【中文标题】引导程序如何确定复选框/单选按钮的选中状态【英文标题】:How does bootstrap determine checked state of checkbox/radiobutton 【发布时间】:2020-06-05 18:59:57 【问题描述】:

我目前正在尝试调试一个使用引导 html 和 CSS 并将其转换为不同文档格式的应用程序。当使用 'custom-control-input' 类对复选框进行样式设置时,会显示复选框,但会丢失 'checked' 属性,我最终会得到一个未选中的引导复选框。

我确定应用程序会检查是否设置了属性,并且正常的复选框会被正确解析。

我知道当使用 bootstrap 以如下方式创建复选框时:

<div class="custom-control custom-checkbox">
<input type="checkbox" class="custom-control-input" id="defaultUnchecked">
<label class="custom-control-label" for="defaultUnchecked">Default unchecked</label>

bootstrap 使用 opacity 隐藏复选框,然后使用“自定义控件标签”显示 bootstrap 复选框。

我似乎无法弄清楚引导程序如何确定是否应该选中复选框。它是否只使用 CSS 规则,还是涉及一些 javascript/JQuery?

【问题讨论】:

是的,肯定涉及到 JavaScript。这就是它如何能够改变页面的外观和感觉超出 CSS 所能做的。很多时候,底层控件(在这种情况下为复选框)是隐藏的,并添加了额外的 HTML(并设置了样式)来代替控件 没有javascript,这是只用css实现的,:checked伪类 【参考方案1】:

我检查了 bootstrap 在这种情况下是如何工作的,这是在 :checked 伪类的帮助下完成的。链接https://developer.mozilla.org/ru/docs/Web/CSS/:checked。

这里是引导实现的相对所有代码。

.custom-control 
    position: relative;
    display: block;
    min-height: 1.5rem;
    padding-left: 1.5rem;


.custom-control-input 
    position: absolute;
    left: 0;
    z-index: -1;
    width: 1rem;
    height: 1.25rem;
    opacity: 0;


.custom-control-label 
    position: relative;
    margin-bottom: 0;
    vertical-align: top;


label 
    display: inline-block;
    line-height: 1.5;


.custom-control-input:checked~.custom-control-label::before 
    color: #fff;
    border-color: #007bff;
    background-color: #007bff;

.custom-checkbox .custom-control-label::before 
    border-radius: .25rem;

.custom-control-label::before, .custom-file-label, .custom-select 
    transition: background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;

.custom-control-label::before 
    position: absolute;
    top: .25rem;
    left: -1.5rem;
    display: block;
    width: 1rem;
    height: 1rem;
    pointer-events: none;
    content: "";
    background-color: #fff;
    border: #adb5bd solid 1px;


.custom-checkbox .custom-control-input:checked~.custom-control-label::after 
    background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3e%3c/svg%3e");

.custom-control-label::after 
    position: absolute;
    top: .25rem;
    left: -1.5rem;
    display: block;
    width: 1rem;
    height: 1rem;
    content: "";
    background: no-repeat 50%/50% 50%;

*, ::after, ::before 
    box-sizing: border-box;
<div class="custom-control custom-checkbox">
  <input type="checkbox" class="custom-control-input" id="exampleCheck1">
  <label class="custom-control-label" for="exampleCheck1">Check me out</label>
</div>

【讨论】:

嘿,白痴,你是完全正确的!遗憾的是,我没有时间等待,所以我自己也已经弄清楚了。似乎转换器应用程序没有正确使用通用同级组合器“~”,因此它没有将 SVG 图标作为背景以及背景颜色应用 :) 感谢您的回答!

以上是关于引导程序如何确定复选框/单选按钮的选中状态的主要内容,如果未能解决你的问题,请参考以下文章

MFC的单选按钮、复选框问题

MFC如何给单选框或复选框初始化时就被选中

自定义单选按钮:如何取消选中? (复选框黑客)[重复]

选择单选按钮后将复选框设置为选中状态

html中<radio>单选按钮控件标签用法解析及如何设置默认选中

html中<radio>单选按钮控件标签用法解析及如何设置默认选中