Кнопка флажка Pure CSS без метки (возможное решение - jQuery) - PullRequest
0 голосов
/ 25 января 2019

Я пытаюсь заменить флажок и превратить его в кнопку.Я делал это раньше, но для этого сайта я использую Easy Digital Downloads Front End Submissions.Я искал и искал, также просмотрел несколько постов здесь на сайте.

Я не знаю, как это было сделано, но я не могу обернуться вокруг него, как кажется на этикеткеприйти перед классом.У него есть этот класс selectit, с которым я пытался возиться, но что бы я ни делал, я не могу сделать кнопку.

Когда я пытаюсь что-то вроде input[type=checkbox] + label, это на самом деле ни на что не влияет.Другие примеры будут .selectit input[type=checkbox]:before Этот работает.Как и .selectit input:checked:after Но опять же, я ничего не могу добавить с + label, кажется.

Ну, я могу сделать тот, у которого есть зависание, но не тот, с проверенным состоянием и изменением цвета дляпример.

Я должен отметить, что я не могу изменить любой HTML .Способ построения флажка, я должен придерживаться, , поэтому я пытаюсь сделать чистое решение CSS. Но я могу добавить jquery на страницу

Вот HTML-код дляфлажки.Я только хочу, чтобы родительский флажок зависел от состояния наведения и флажка.

<ul class="fes-category-checklist">
  <li id="download_category-156" data-open="false" style="display: list-item;"><label class="selectit"><input value="156" type="checkbox" name="download_category[]" id="in-download_category-156"> 2D Assets</label>
    <ul class="children">

      <li id="download_category-183" data-open="false"><label class="selectit"><input value="183" type="checkbox" name="download_category[]" id="in-download_category-183"> Motion Graphics</label></li>

      <li id="download_category-163" data-open="false"><label class="selectit"><input value="163" type="checkbox" name="download_category[]" id="in-download_category-163"> HDRI</label></li>

      <li id="download_category-162" data-open="false"><label class="selectit"><input value="162" type="checkbox" name="download_category[]" id="in-download_category-162"> Materials</label></li>

      <li id="download_category-161" data-open="false"><label class="selectit"><input value="161" type="checkbox" name="download_category[]" id="in-download_category-161"> Textures</label></li>
    </ul>
  </li>
</ul>

Надеюсь, у кого-то есть ответы Спасибо!

РЕДАКТИРОВАТЬ

Я былРекомендуется обновить мой вопрос, потому что я могу вставить JQuery на страницу.Хотя, это не то, что я имею большой опыт с собой.

1 Ответ

0 голосов
/ 25 января 2019

Оригинал, без javascript, сумасшедший ответ

Ваша проблема в том, что вы не можете выбрать родительский элемент элемента, и поэтому вы не можете сказать «если этот флажок установлен, измените метку родительского элемента.цвет."К сожалению, CSS-селектор :has ничем не поддерживается, или это может вас спасти.

Однако.Если вы безумны и ненавидите, когда все выглядит хорошо, вы можете делать сумасшедшие вещи с очертаниями и полями.Это Mucho Janky , но это вроде работает.Kinda.

Вы можете поиграть с этим в этом коде: https://codepen.io/anon/pen/WPQJgw

Последующее, не сумасшедшее, использует ответ jQuery

Хорошо, ваши изменения говорят, что вы можетеиспользуйте javascript или jQuery.Предположим, у вас уже есть jQuery, загруженный на страницу, поскольку это сокращенный код.

Кодовый код здесь: https://codepen.io/tobyinternet/pen/daYqJq

Я объясню, что здесь.

Вы не можете изменить HTML, но (с помощью JavaScript) вы МОЖЕТЕ назначить классы элементам.Итак, во-первых, мы создаем классы, которые модифицируют существующие элементы.

  • Убрать маркеры из элементов списка
  • Скрыть фактические флажки
  • Сделать метки в блочные элементы и датьих цвета и состояния при наведении
  • Создайте стиль, чтобы указать, когда «кнопка» «проверена»

Затем мы используем javascript, чтобы сначала применить стили кнопок при загрузке страницы, а затем применить соответствующиестиль отмечен / не отмечен при щелчке по элементу.

Цель этого способа заключается в том, что если пользователь не может (или не хочет) использовать JavaScript, он просто видит флажки.Все еще полностью годный к употреблению, хороший для доступности.Если у них do установлен javascript, то та-да!Кнопки.

$(document).ready(function(){
  $('.fes-category-checklist, .fes-category-checklist .children').addClass('nolist');
  
  $('.selectit').addClass('checkbutton');
  
  $('.checkbutton').click(function(){
    if( $(this).children('input:checkbox').is(':checked') ) {
         $(this).addClass('ischecked');
    } else {
      $(this).removeClass('ischecked');
    }
  });  
  
});
.nolist {
  list-style: none;
}

.nolist li {
  margin: 20px 0;
}

.checkbutton {
  padding: 8px 20px;
  text-align: center;
  display: block;
  width: 140px;
  height: 30px;
  line-height: 30px;
  margin-right: -130px;
  border: 1px solid black;
  border-radius: 6px;
  background-color: yellow;
  transition: all .2s;
  box-shadow: 0px 3px 8px rgba(50,50,50,.5);
}

.checkbutton:hover {
  background-color: #CCCC00;
}

.checkbutton:active {
  box-shadow: 0px 1px 2px rgba(50,50,50,.5);
}

.checkbutton input[type="checkbox"] {
  position: absolute;
  left: -99999px;
}

.ischecked {
  background-color: blue;
  color: white;
}

.ischecked:hover {
  background-color: lightblue;
  color: black;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<ul class="fes-category-checklist">
  <li id="download_category-156" data-open="false" style="display: list-item;"><label class="selectit"><input value="156" type="checkbox" name="download_category[]" id="in-download_category-156"> 2D Assets</label>
    <ul class="children">

      <li id="download_category-183" data-open="false"><label class="selectit"><input value="183" type="checkbox" name="download_category[]" id="in-download_category-183"> Motion Graphics</label></li>

      <li id="download_category-163" data-open="false"><label class="selectit"><input value="163" type="checkbox" name="download_category[]" id="in-download_category-163"> HDRI</label></li>

      <li id="download_category-162" data-open="false"><label class="selectit"><input value="162" type="checkbox" name="download_category[]" id="in-download_category-162"> Materials</label></li>

      <li id="download_category-161" data-open="false"><label class="selectit"><input value="161" type="checkbox" name="download_category[]" id="in-download_category-161"> Textures</label></li>
    </ul>
  </li>
</ul>
...