【问题标题】:CSS - Selectors - extra content between the Checkbox and the LabelCSS - 选择器 - 复选框和标签之间的额外内容
【发布时间】:2018-08-30 01:48:48
【问题描述】:

我有以下 html 设置:

<fieldset>
  <div class="checkbox">
    <label class="justlabel"><input type="checkbox" value="movie"> Movies</label>
  </div>
  <div class="checkbox">
    <label class="justlabel"><input type="checkbox" value="music"> Music</label>
  </div>
  <div class="checkbox">
    <label class="justlabel"><input type="checkbox" value="books"> Books</label>
  </div>
</fieldset>

这是我的小提琴:https://jsfiddle.net/z7aymz5a/20/

我根据每个复选框的值来定位每个复选框,因为所有类都相同。

我想要实现的是在每个复选框后面放置一个彩色圆圈,就在标签之前,如下图所示

我已经把圆圈放进去,但我不知道如何正确设置它的样式,所以它位于复选框之后,但在标签之前。

谁能帮我破解这个?

【问题讨论】:

    标签: html wordpress css css-selectors


    【解决方案1】:

    您可以通过更简单的方式实现此目的。只需在标签中的文本之前添加一个标签并根据需要对其进行格式化。

    .checkbox {
      position: relative;
    }
    .circle {
      border-radius: 50%;
      width: 12px;
      height: 12px;
      display: inline-block;
      margin-right: 5px;
    }
    .movie {
      background-color: red;
     }
    
    .music {
      background-color: blue;
    }
    
    .books {
      background-color: green;
    }
    

    你的html:

    <fieldset>
      <div class="checkbox">
        <label class="justlabel"><input type="checkbox" value="movie"> 
        <i class="circle movie"></i>Movies</label>
      </div>
      <div class="checkbox">
        <label class="justlabel"><input type="checkbox" value="music"> 
        <i class="circle music"></i>Music</label>
      </div>
      <div class="checkbox">
        <label class="justlabel"><input type="checkbox" value="books"> 
        <i class="circle books"></i>Books</label>
      </div>
    </fieldset>
    

    小提琴:https://jsfiddle.net/kjcqqh44/13/

    更新

    对于插件提供的动态HTML,你可以使用这段代码你可以用javascript添加圆圈

    var checkCircle = document.body.querySelectorAll('input[value][type="checkbox"]');
    var checkbox = document.body.querySelectorAll('.checkbox');
    
    for (i=0; i < checkbox.length; i++)
    { 
        var inp = checkbox[i].querySelectorAll('input[value][type="checkbox"]')[0]
      var span = document.createElement('i');
      span.className = 'circle ' + inp.value;
      inp.parentNode.insertBefore(span, inp.nextSibling);
    }
    

    https://jsfiddle.net/kjcqqh44/32/

    【讨论】:

    • 谢谢 .. html 来自插件,所以我无法真正编辑 html,这就是为什么我纯粹在寻找 CSS 解决方案 ..
    • 你也可以用 jquery 添加 i 标签:D
    【解决方案2】:

    无需接触 html 并正确定位

        input {
            margin-right: 20px;
        }
    
        input::after {
            content: "\25CF";
            font-size: 30px;
            position: relative;
            top: -12px;
            right: -16px;
        }
        input[value="movie"]::after {
            color: red;
        }
    
        input[value="music"]::after {
            color: blue;
        }
    
        input[value="books"]::after {
            color: green;
        }
    

    【讨论】:

    • 老兄,你是个传奇!这很有效,看起来很完美。非常感谢您的帮助!
    【解决方案3】:

    你可以试试这个:

    input {
      width: 32px;
    }
    input::after {
      font-size: 19px;
      line-height: 12px;
      content: "\25CF";
      margin-left: 24px;
    }
    input[value="movie"]::after {
      color: red;
    }
    input[value="music"]::after {
      color: blue;
    }
    input[value="books"]::after {
      color: green;
    }
    

    【讨论】:

    • 嘿阿诺德,到目前为止最接近的一个。唯一的问题是我需要在复选框和标签之间获取彩色圆圈,并且我无法触摸 html,因为它来自不同的插件。您的解决方案在复选框顶部添加了圆圈。给它一点margin-left会有所帮助,但是我如何在两者之间画一个圆圈?
    【解决方案4】:

    你快到了,问题是输入元素不支持伪元素。这个答案有一些关于原因的更多细节:https://stackoverflow.com/a/4660434/5269101

    因此,您的问题的解决方案是: 1-将文本“音乐”、“电影”和“书籍”包装在跨度元素中 2-用::before替换css中的::after,而不是针对输入元素,而是使用兄弟选择器来定位span元素。

    你的 CSS 应该是这样的:

    input[value="movie"] ~ span::before {
    color: red;
    content: "\25CF";
    font-size: 2.5em;
    }
    
    input[value="music"] ~ span::before {
    color: blue;
    content: "\25CF";
    font-size: 2.5em;
    }
    
    input[value="books"] ~span::before {
    color: green;
    content: "\25CF";
    font-size: 2.5em;
    }
    

    您的 html 将是:

    <fieldset>
      <div class="checkbox">
      <label class="justlabel"><input type="checkbox" value="movie"> <span>Movies</span></label>
      </div>
      <div class="checkbox">
        <label class="justlabel"><input type="checkbox" value="music"> <span>Music</span></label>
      </div>
      <div class="checkbox">
        <label class="justlabel"><input type="checkbox" value="books"> <span>Books</span></label>
      </div>
    </fieldset>
    

    【讨论】:

    • 非常感谢您的帮助.. html 来自外部插件,其值的复选框是动态创建的,所以我不能真正触摸 html ..
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-28
    • 1970-01-01
    • 2017-02-12
    • 1970-01-01
    • 1970-01-01
    • 2017-04-08
    • 1970-01-01
    相关资源
    最近更新 更多