Текст переключателя охватывает параметры ниже - PullRequest
0 голосов
/ 13 июля 2020

Я использую этот эффект переключателя - https://codepen.io/tomma5o/pen/grJyzL/, который работает нормально, но теперь я столкнулся с проблемой, когда некоторые из моих параметров являются более длинным текстом и выходят за нижний вариант (потому что есть 30 пикселей высота на li).

Вот пример - https://codepen.io/BrixyX/pen/OJMwjrN. Есть ли какое-нибудь простое решение для этого, потому что, что бы я ни попробовал, я испортил эффект?

@import url(https://fonts.googleapis.com/css?family=Roboto:400,300,500,700);
 ::selection {
  background: none;
}

body {
  background: #BADA55;
  font-family: 'Roboto';
  font-weight: 500;
  text-transform: uppercase;
  color: #2E8612;
  overflow: hidden;
  height: 100%;
}

h1 {
  font-weight: 100;
  text-align: center;
  margin: 0;
  padding: 0;
  font-size: 50px;
}

h4 {
  font-weight: 400;
  text-align: center;
  margin: 0;
  padding: 0;
  margin-bottom: 50px;
}

.continput {
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  margin: auto;
  width: 500px;
  height: 270px;
  padding: 16px;
  box-sizing: border-box;
}

ul {
  list-style-type: none;
  width: 220px;
  margin: auto;
}

li {
  position: relative;
  padding: 10px;
  padding-left: 40px;
  height: 30px;
}

label:before {
  content: "";
  width: 15px;
  height: 15px;
  background: #fff;
  position: absolute;
  left: 7px;
  top: calc(50% - 13px);
  box-sizing: border-box;
  border-radius: 50%;
}

input[type="radio"] {
  opacity: 0;
  -webkit-appearance: none;
  display: inline-block;
  vertical-align: middle;
  z-index: 100;
  margin: 0;
  padding: 0;
  width: 100%;
  height: 30px;
  position: absolute;
  left: 0;
  top: calc(50% - 15px);
  cursor: pointer;
}

.bullet {
  position: relative;
  width: 25px;
  height: 25px;
  left: -3px;
  top: 2px;
  border: 5px solid #fff;
  opacity: 0;
  border-radius: 50%;
}

input[type="radio"]:checked~.bullet {
  position: absolute;
  opacity: 1;
  animation-name: explode;
  animation-duration: 0.350s;
}

.line {
  position: absolute;
  width: 10px;
  height: 2px;
  background-color: #fff;
  opacity: 0;
}

.line.zero {
  left: 11px;
  top: -21px;
  transform: translateY(20px);
  width: 2px;
  height: 10px;
}

.line.one {
  right: -7px;
  top: -11px;
  transform: rotate(-55deg) translate(-9px);
}

.line.two {
  right: -20px;
  top: 11px;
  transform: translate(-9px);
}

.line.three {
  right: -8px;
  top: 35px;
  transform: rotate(55deg) translate(-9px);
}

.line.four {
  left: -8px;
  top: -11px;
  transform: rotate(55deg) translate(9px);
}

.line.five {
  left: -20px;
  top: 11px;
  transform: translate(9px);
}

.line.six {
  left: -8px;
  top: 35px;
  transform: rotate(-55deg) translate(9px);
}

.line.seven {
  left: 11px;
  bottom: -21px;
  transform: translateY(-20px);
  width: 2px;
  height: 10px;
}

input[type="radio"]:checked~.bullet .line.zero {
  animation-name: drop-zero;
  animation-delay: 0.100s;
  animation-duration: 0.9s;
  animation-fill-mode: forwards;
}

input[type="radio"]:checked~.bullet .line.one {
  animation-name: drop-one;
  animation-delay: 0.100s;
  animation-duration: 0.9s;
  animation-fill-mode: forwards;
}

input[type="radio"]:checked~.bullet .line.two {
  animation-name: drop-two;
  animation-delay: 0.100s;
  animation-duration: 0.9s;
  animation-fill-mode: forwards;
}

input[type="radio"]:checked~.bullet .line.three {
  animation-name: drop-three;
  animation-delay: 0.100s;
  animation-duration: 0.9s;
  animation-fill-mode: forwards;
}

input[type="radio"]:checked~.bullet .line.four {
  animation-name: drop-four;
  animation-delay: 0.100s;
  animation-duration: 0.9s;
  animation-fill-mode: forwards;
}

input[type="radio"]:checked~.bullet .line.five {
  animation-name: drop-five;
  animation-delay: 0.100s;
  animation-duration: 0.9s;
  animation-fill-mode: forwards;
}

input[type="radio"]:checked~.bullet .line.six {
  animation-name: drop-six;
  animation-delay: 0.100s;
  animation-duration: 0.9s;
  animation-fill-mode: forwards;
}

input[type="radio"]:checked~.bullet .line.seven {
  animation-name: drop-seven;
  animation-delay: 0.100s;
  animation-duration: 0.9s;
  animation-fill-mode: forwards;
}

@keyframes explode {
  0% {
    opacity: 0;
    transform: scale(10);
  }
  60% {
    opacity: 1;
    transform: scale(0.5);
  }
  100% {
    opacity: 1;
    transform: scale(1);
  }
}

@keyframes drop-zero {
  0% {
    opacity: 0;
    transform: translateY(20px);
    height: 10px;
  }
  20% {
    opacity: 1;
  }
  100% {
    transform: translateY(-2px);
    height: 0px;
    opacity: 0;
  }
}

@keyframes drop-one {
  0% {
    opacity: 0;
    transform: rotate(-55deg) translate(-20px);
    width: 10px;
  }
  20% {
    opacity: 1;
  }
  100% {
    transform: rotate(-55deg) translate(9px);
    width: 0px;
    opacity: 0;
  }
}

@keyframes drop-two {
  0% {
    opacity: 0;
    transform: translate(-20px);
    width: 10px;
  }
  20% {
    opacity: 1;
  }
  100% {
    transform: translate(9px);
    width: 0px;
    opacity: 0;
  }
}

@keyframes drop-three {
  0% {
    opacity: 0;
    transform: rotate(55deg) translate(-20px);
    width: 10px;
  }
  20% {
    opacity: 1;
  }
  100% {
    transform: rotate(55deg) translate(9px);
    width: 0px;
    opacity: 0;
  }
}

@keyframes drop-four {
  0% {
    opacity: 0;
    transform: rotate(55deg) translate(20px);
    width: 10px;
  }
  20% {
    opacity: 1;
  }
  100% {
    transform: rotate(55deg) translate(-9px);
    width: 0px;
    opacity: 0;
  }
}

@keyframes drop-five {
  0% {
    opacity: 0;
    transform: translate(20px);
    width: 10px;
  }
  20% {
    opacity: 1;
  }
  100% {
    transform: translate(-9px);
    width: 0px;
    opacity: 0;
  }
}

@keyframes drop-six {
  0% {
    opacity: 0;
    transform: rotate(-55deg) translate(20px);
    width: 10px;
  }
  20% {
    opacity: 1;
  }
  100% {
    transform: rotate(-55deg) translate(-9px);
    width: 0px;
    opacity: 0;
  }
}

@keyframes drop-seven {
  0% {
    opacity: 0;
    transform: translateY(-20px);
    height: 10px;
  }
  20% {
    opacity: 1;
  }
  100% {
    transform: translateY(2px);
    height: 0px;
    opacity: 0;
  }
}
<div class="continput">
  <h1>Jelly Radio btn</h1>
  <h4>I hope you enjoyed it</h4>
  <ul>
    <li>
      <input checked type="radio" name="1">
      <label>OMG a radio! Longer option text Longer option text Longer option text Longer option text Longer option text Longer option text Longer option text Longer option ...</label>
      <div class="bullet">
        <div class="line zero"></div>
        <div class="line one"></div>
        <div class="line two"></div>
        <div class="line three"></div>
        <div class="line four"></div>
        <div class="line five"></div>
        <div class="line six"></div>
        <div class="line seven"></div>
      </div>
    </li>
    <li>
      <input type="radio" name="1">
      <label>Uuuuh radio</label>
      <div class="bullet">
        <div class="line zero"></div>
        <div class="line one"></div>
        <div class="line two"></div>
        <div class="line three"></div>
        <div class="line four"></div>
        <div class="line five"></div>
        <div class="line six"></div>
        <div class="line seven"></div>
      </div>
    </li>
    <li>
      <input type="radio" name="1">
      <label>radio everywhere</label>
      <div class="bullet">
        <div class="line zero"></div>
        <div class="line one"></div>
        <div class="line two"></div>
        <div class="line three"></div>
        <div class="line four"></div>
        <div class="line five"></div>
        <div class="line six"></div>
        <div class="line seven"></div>
      </div>
    </li>
  </ul>
</div>

Ответы [ 2 ]

1 голос
/ 13 июля 2020

Я почистил несколько вещей и создал новую скрипку с вашего пера здесь .

Во-первых, я попытался удалить позиционирование absolute, которое используется во многих места. Я также использовал функцию, предоставляемую элементом label, которая представляет собой взаимодействие с элементами ввода.

Я переместил ваши элементы radio внутри метки, а также соответствующим образом переместил анимацию маркера .

В целом, элемент label теперь используется как оболочка для всех ваших элементов внутри него, и, следовательно, эти элементы будут выравниваться в зависимости от размера своего родителя.

PS, поскольку я попытался быстро закончить это, я выровнял пулю внутри вашей этикетки по центру, используя хак translate(-50%). Есть и другие более чистые способы сделать это, но сейчас это был просто более быстрый способ.

0 голосов
/ 13 июля 2020

Есть несколько способов решить проблему длинных текстов опций, охватывающих остальные опции.

Первый вариант - изменить ширину класса Continput на более высокую значение, чтобы больше текста могло поместиться внутри меток. Метки ограничены полями и отступами, включенными списком и элементами списка, внутрь которых помещаются переключатели. Следовательно, более широкая ширина будет означать, что можно аккуратно отобразить больше текста опции.

Второй вариант - установить свойство переполнения элементов списка как скрытое, как это (новое свойство в внизу определения):

li {
  position: relative;
  padding: 10px;
  padding-left: 40px;
  height: 30px;
  overflow: hidden;
}

Таким образом, текст, который не может быть отображен без выхода за пределы элементов списка, будет скрыт, а не будет перекрывать текст, принадлежащий переключателям ниже. Есть также больше вариантов настройки переполнения; в веб-документации Mozilla MDN есть небольшая статья об этом свойстве: https://developer.mozilla.org/en-US/docs/Web/CSS/overflow

Третий вариант представляет собой комбинацию этих опций, указанных выше. В результате должно получиться что-то, что выглядит и работает так, как вам нужно. Если вы еще не начали проверять и экспериментировать со своим собственным контентом, используя что-то вроде функции проверки Google Chrome, я рекомендую вам прочитать руководство для используемого вами браузера. У Zapier есть подробное руководство для Google Chrome здесь , и я вижу, что Microsoft включила те же инструменты, которые доступны в Google Chrome, в свой обновленный Microsoft Edge (с синим и зеленым lo go).

...