skip to Main Content

I’m designing an element for a plugin called elementor. This project is really just to help me learn the functionality of developing for wordpress.

What I’m making is a "toggle content" slider that can toggle between text or predefined html. I’ve used the slider according to this guide: https://www.w3schools.com/howto/howto_css_switch.asp
Right Now the size of a switch is very big. I want a small switch. How Can change it? Can anyone help me out? Thanks.

.switch {
  position: relative;
  display: inline-block;
  width: 60px;
  height: 34px;
}

.switch input { 
  opacity: 0;
  width: 0;
  height: 0;
}

.slider {
  position: absolute;
  cursor: pointer;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  background-color: #ccc;
  -webkit-transition: .4s;
  transition: .4s;
}

.slider:before {
  position: absolute;
  content: "";
  height: 26px;
  width: 26px;
  left: 4px;
  bottom: 4px;
  background-color: white;
  -webkit-transition: .4s;
  transition: .4s;
}

input:checked + .slider {
  background-color: #2196F3;
}

input:focus + .slider {
  box-shadow: 0 0 1px #2196F3;
}

input:checked + .slider:before {
  -webkit-transform: translateX(26px);
  -ms-transform: translateX(26px);
  transform: translateX(26px);
}

/* Rounded sliders */
.slider.round {
  border-radius: 34px;
}

.slider.round:before {
  border-radius: 50%;
}

<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
<style>

</style>
</head>
<body>

<h2>Toggle Switch</h2>

<label class=" switch">
  <input type="checkbox" checked>
  <span class=" slider round"></span>
</label>

</body>
</html> 

3

Answers


  1. You can change the size by changing the css

    .switch {
      position: relative;
      display: inline-block;
      width: 35px;
      height: 22px;
    }
    
    .switch input { 
      opacity: 0;
      width: 0;
      height: 0;
    }
    
    .slider {
      position: absolute;
      cursor: pointer;
      top: 0;
      left: 0;
      right: 0;
      bottom: 0;
      background-color: #ccc;
      -webkit-transition: .4s;
      transition: .4s;
    }
    
    .slider:before {
      position: absolute;
      content: "";
      height: 10px;
      width: 10px;
      left: 4px;
      bottom: 6px;
      background-color: white;
      -webkit-transition: .4s;
      transition: .4s;
    }
    
    input:checked + .slider {
      background-color: #2196F3;
    }
    
    input:focus + .slider {
      box-shadow: 0 0 1px #2196F3;
    }
    
    input:checked + .slider:before {
      -webkit-transform: translateX(16px);
      -ms-transform: translateX(16px);
      transform: translateX(16px);
    }
    
    /* Rounded sliders */
    .slider.round {
      border-radius: 34px;
    }
    
    .slider.round:before {
      border-radius: 50%;
    }
    <html>
    <head>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <style>
    
    </style>
    </head>
    <body>
    
    <h2>Toggle Switch</h2>
    
    <label class=" switch">
      <input type="checkbox" checked>
      <span class=" slider round"></span>
    </label>
    
    </body>
    </html>

    try to experiment with different widths and heights

    Login or Signup to reply.
  2. I used calc(); and var();, so you don’t have to do a lot of work

    Mozilla documentation: calc() explanation and var() explanation and –var: ; explanation .

    just change ONE value the height of switch for change all responsively!!!

    * {
        --switch-height: 34px; /* change the value */
          
        /* other code, pls see it then */
    }
    

    if you want a smaller switch, the 8px default padding, will take a lot of space,

    so I simplified it for you! just change the --switch-padding: 8px; to something smaller…

    automatically CSS calculates all things for you, for making the switch look good for all dimensions 🙂

    the same thing if you want the switch to be bigger, remember to make the padding also bigger (the padding var)

    enter image description here

    I know This is not a site "we-are-doing-your-work.com" but I really want to help you!

    here the complete fixed code:

    * {
      --switch-height: 34px;
      --switch-padding: 8px;
      --switch-width: calc((var(--switch-height) * 2) - var(--switch-padding));
      --slider-height: calc(var(--switch-height) - var(--switch-padding));
      --slider-on: calc(var(--switch-height) - var(--switch-padding));
    }
    
    .switch {
      position: relative;
      display: inline-block;
      width: var(--switch-width);
      height: var(--switch-height);
    }
    
    .switch input {
      opacity: 0;
      width: 0;
      height: 0;
    }
    
    .slider {
      position: absolute;
      cursor: pointer;
      top: 0;
      left: 0;
      right: 0;
      bottom: 0;
      background-color: #ccc;
      -webkit-transition: .4s;
      transition: .4s;
    }
    
    .slider:before {
      content: "";
      position: absolute;
      height: var(--slider-height);
      width: var(--slider-height);
      left: calc(var(--switch-padding) / 2);
      bottom: calc(var(--switch-padding) / 2);
      background-color: white;
      -webkit-transition: .4s;
      transition: .4s;
    }
    
    input:checked+.slider {
      background-color: #2196F3;
    }
    
    input:focus+.slider {
      box-shadow: 0 0 1px #2196F3;
    }
    
    input:checked+.slider:before {
      transform: translateX(var(--slider-on));
    }
    
    .slider.round {
      border-radius: var(--slider-height);
    }
    
    .slider.round:before {
      border-radius: 50%;
    }
    <!DOCTYPE html>
    <html lang="en">
    
    <head>
      <meta charset="UTF-8">
      <meta http-equiv="X-UA-Compatible" content="IE=edge">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>Document</title>
      <link rel="stylesheet" href="style.css">
    </head>
    
    <body>
    
      <h2>Toggle Switch</h2>
    
      <label class="switch">
            <input type="checkbox" checked>
            <span class="slider round"></span>
        </label>
    
    </body>
    
    </html>
    Login or Signup to reply.
  3.   * {
        box-sizing: border-box;
      }
    
      body{
        display: flex;
        justify-content: center;
        align-items: center;
        height: 100vh;
        margin: 0;
      }
    
      .label{
        background-color: #fea621;
        display: flex;
        border-radius: 50px;
        height: 26px;
        width: 50px;
        align-items: center;
        justify-content: space-between;
        padding: 5px;
        position: relative;
      }
    
      .checkbox{
        opacity: 0;
        position: absolute;
      }
    
      .checkbox + .label .ball{
        content: url(323329.png);
        background-color: #001e3d;
      }
    
      .checkbox:checked + .label .ball{
        content: url(flag-ukraine-circle.svg);
        background-color: #001e3d;
        transform: translateX(24px);
      }
    
      .ball{
        background-color: #001e3d;
        border-radius: 50%;
        height: 22px;
        width: 22px;
        position: absolute;
        top: 2px;
        left: 2px;
        transition: transform .2s linear;
      }
    
    .ball:before:checked{
        content: url(flag-ukraine-circle.svg);
        left: 50px;
    }
    
    .ball:checked:after{
        left: 0;
    }
    <div>
        <input type="checkbox" id="checkbox" class="checkbox">
        <label for="checkbox" class="label"> 
            <i class="ukraine"></i>
            <i class="usa"></i>
            <div class="ball"></div>
        </label>
    </div>
    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search