【问题标题】:Need css switch assistance需要css切换帮助
【发布时间】:2016-03-12 00:41:36
【问题描述】:

我想主要使用 css 进行切换。开关的左侧会显示颜色,右侧会显示黑白。我所需要的只是一个简单的动画,它涵盖了单击开关时正在使用的选项。我在 codepen 上查找了示例,但一切都与 SASS 或其他不同类型的代码有关,我真的不知道如何编辑或实现到我自己的代码中。

【问题讨论】:

    标签: javascript html css


    【解决方案1】:

    有一个不错的库可供您使用。 Click Here

    /* ============================================================
      COMMON
    ============================================================ */
    
    #wrapper {
      min-width: 600px;
    }
    .settings {
      display: table;
      width: 100%;
    }
    .settings .row {
      display: table-row;
    }
    .settings .question,
    .settings .switch {
      display: table-cell;
      vertical-align: middle;
      padding: 10px;
    }
    .settings .question {
      width: 600px;
      font-family: "Roboto Slab", serif;
      font-size: 20px;
    }
    /* ============================================================
      COMMON
    ============================================================ */
    
    .cmn-toggle {
      position: absolute;
      margin-left: -9999px;
      visibility: hidden;
    }
    .cmn-toggle + label {
      display: block;
      position: relative;
      cursor: pointer;
      outline: none;
      -webkit-user-select: none;
      -moz-user-select: none;
      -ms-user-select: none;
      user-select: none;
    }
    /* ============================================================
      SWITCH 1 - ROUND
    ============================================================ */
    
    input.cmn-toggle-round + label {
      padding: 2px;
      width: 120px;
      height: 60px;
      background-color: #dddddd;
      -webkit-border-radius: 60px;
      -moz-border-radius: 60px;
      -ms-border-radius: 60px;
      -o-border-radius: 60px;
      border-radius: 60px;
    }
    input.cmn-toggle-round + label:before,
    input.cmn-toggle-round + label:after {
      display: block;
      position: absolute;
      top: 1px;
      left: 1px;
      bottom: 1px;
      content: "";
    }
    input.cmn-toggle-round + label:before {
      right: 1px;
      background-color: #f1f1f1;
      -webkit-border-radius: 60px;
      -moz-border-radius: 60px;
      -ms-border-radius: 60px;
      -o-border-radius: 60px;
      border-radius: 60px;
      -webkit-transition: background 0.4s;
      -moz-transition: background 0.4s;
      -o-transition: background 0.4s;
      transition: background 0.4s;
    }
    input.cmn-toggle-round + label:after {
      width: 58px;
      background-color: #fff;
      -webkit-border-radius: 100%;
      -moz-border-radius: 100%;
      -ms-border-radius: 100%;
      -o-border-radius: 100%;
      border-radius: 100%;
      -webkit-box-shadow: 0 2px 5px rgba(0, 0, 0, 0.3);
      -moz-box-shadow: 0 2px 5px rgba(0, 0, 0, 0.3);
      box-shadow: 0 2px 5px rgba(0, 0, 0, 0.3);
      -webkit-transition: margin 0.4s;
      -moz-transition: margin 0.4s;
      -o-transition: margin 0.4s;
      transition: margin 0.4s;
    }
    input.cmn-toggle-round:checked + label:before {
      background-color: #8ce196;
    }
    input.cmn-toggle-round:checked + label:after {
      margin-left: 60px;
    }
    /* ============================================================
      SWITCH 2 - ROUND FLAT
    ============================================================ */
    
    input.cmn-toggle-round-flat + label {
      padding: 2px;
      width: 120px;
      height: 60px;
      background-color: #dddddd;
      -webkit-border-radius: 60px;
      -moz-border-radius: 60px;
      -ms-border-radius: 60px;
      -o-border-radius: 60px;
      border-radius: 60px;
      -webkit-transition: background 0.4s;
      -moz-transition: background 0.4s;
      -o-transition: background 0.4s;
      transition: background 0.4s;
    }
    input.cmn-toggle-round-flat + label:before,
    input.cmn-toggle-round-flat + label:after {
      display: block;
      position: absolute;
      content: "";
    }
    input.cmn-toggle-round-flat + label:before {
      top: 2px;
      left: 2px;
      bottom: 2px;
      right: 2px;
      background-color: #fff;
      -webkit-border-radius: 60px;
      -moz-border-radius: 60px;
      -ms-border-radius: 60px;
      -o-border-radius: 60px;
      border-radius: 60px;
      -webkit-transition: background 0.4s;
      -moz-transition: background 0.4s;
      -o-transition: background 0.4s;
      transition: background 0.4s;
    }
    input.cmn-toggle-round-flat + label:after {
      top: 4px;
      left: 4px;
      bottom: 4px;
      width: 52px;
      background-color: #dddddd;
      -webkit-border-radius: 52px;
      -moz-border-radius: 52px;
      -ms-border-radius: 52px;
      -o-border-radius: 52px;
      border-radius: 52px;
      -webkit-transition: margin 0.4s, background 0.4s;
      -moz-transition: margin 0.4s, background 0.4s;
      -o-transition: margin 0.4s, background 0.4s;
      transition: margin 0.4s, background 0.4s;
    }
    input.cmn-toggle-round-flat:checked + label {
      background-color: #8ce196;
    }
    input.cmn-toggle-round-flat:checked + label:after {
      margin-left: 60px;
      background-color: #8ce196;
    }
    /* ============================================================
      SWITCH 3 - YES NO
    ============================================================ */
    
    input.cmn-toggle-yes-no + label {
      padding: 2px;
      width: 120px;
      height: 60px;
    }
    input.cmn-toggle-yes-no + label:before,
    input.cmn-toggle-yes-no + label:after {
      display: block;
      position: absolute;
      top: 0;
      left: 0;
      bottom: 0;
      right: 0;
      color: #fff;
      font-family: "Roboto Slab", serif;
      font-size: 20px;
      text-align: center;
      line-height: 60px;
    }
    input.cmn-toggle-yes-no + label:before {
      background-color: #dddddd;
      content: attr(data-off);
      -webkit-transition: -webkit-transform 0.5s;
      -moz-transition: -moz-transform 0.5s;
      -o-transition: -o-transform 0.5s;
      transition: transform 0.5s;
      -webkit-backface-visibility: hidden;
      -moz-backface-visibility: hidden;
      -ms-backface-visibility: hidden;
      -o-backface-visibility: hidden;
      backface-visibility: hidden;
    }
    input.cmn-toggle-yes-no + label:after {
      background-color: #8ce196;
      content: attr(data-on);
      -webkit-transition: -webkit-transform 0.5s;
      -moz-transition: -moz-transform 0.5s;
      -o-transition: -o-transform 0.5s;
      transition: transform 0.5s;
      -webkit-transform: rotateY(180deg);
      -moz-transform: rotateY(180deg);
      -ms-transform: rotateY(180deg);
      -o-transform: rotateY(180deg);
      transform: rotateY(180deg);
      -webkit-backface-visibility: hidden;
      -moz-backface-visibility: hidden;
      -ms-backface-visibility: hidden;
      -o-backface-visibility: hidden;
      backface-visibility: hidden;
    }
    input.cmn-toggle-yes-no:checked + label:before {
      -webkit-transform: rotateY(180deg);
      -moz-transform: rotateY(180deg);
      -ms-transform: rotateY(180deg);
      -o-transform: rotateY(180deg);
      transform: rotateY(180deg);
    }
    input.cmn-toggle-yes-no:checked + label:after {
      -webkit-transform: rotateY(0);
      -moz-transform: rotateY(0);
      -ms-transform: rotateY(0);
      -o-transform: rotateY(0);
      transform: rotateY(0);
    }
    <!DOCTYPE html>
    
    <html class="no-js" lang="en">
    
    <head>
      <!-- title and meta -->
      <meta charset="utf-8">
      <meta content="width=device-width,initial-scale=1.0" name="viewport">
    
      <title>CSS Toggle Switch</title>
    
      <link href="css/style.css" rel="stylesheet">
    
      <!-- js -->
      <!--[if lt IE 9]><script src="js/html5shiv.min.js"></script><![endif]-->
    </head>
    
    <body>
    
      <div id="wrapper">
    
        </header>
    
        <div id="main">
          <div class="container">
    
            <div class="settings">
    
              <div class="row">
                <div class="question">
                  Color Option?
                </div>
                <div class="switch">
                  <input id="cmn-toggle-1" class="cmn-toggle cmn-toggle-round" type="checkbox">
                  <label for="cmn-toggle-1"></label>
                </div>
              </div>
              <!-- /row -->
    
            </div>
    
          </div>
        </div>
        <!-- #main -->
    
    
      </div>
      <!-- /#wrapper -->
    
    
    </body>
    
    </html>

    【讨论】:

      【解决方案2】:

      你不能用javascript吗?还是必须是 CSS?

      如果您使用 javascript,您可以使用 document.getElementById('x').style.[ccstag] 来更改元素 CSS 属性的状态

      我用它来显示和隐藏菜单中的一个选项。

      function Showelement(id,n1){
      
          document.getElementById(id).style.display = "inline";
          document.getElementById(n1).style.display = "";
      
      }
      

      你可以用同样的东西,但是有你的

      被隐藏的元素。 "" 会将元素的 CSS 返回到它在 JS 更改之前在您的 CSS 或样式中设置的内容。

      希望这会有所帮助:)

      【讨论】:

        猜你喜欢
        • 2015-03-20
        • 1970-01-01
        • 2010-12-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-07-14
        相关资源
        最近更新 更多