2013-03-15 3 views
7

На моем сайте пользователи могут публиковать статьи и помечать их соответствующим образом с помощью некоторых предварительно установленных тегов. Эти теги представлены в виде флажков. Пример ниже:Флажки стиля как кнопки Toggle

<input type="checkbox" name="wpuf_post_tags[]" class="new-post-tags" value="Aliens" /> Aliens 
<input type="checkbox" name="wpuf_post_tags[]" class="new-post-tags" value="Ghosts" /> Ghosts 
<input type="checkbox" name="wpuf_post_tags[]" class="new-post-tags" value="Monsters" /> Monsters 

Как вы знаете, флажками будет выглядеть примерно так:

[] Aliens

[о] Призраки

[] Монстры

Хотелось бы, чтобы флажок был одной большой кнопкой со значением внутри него. А затем сделайте эффект «переключения».

[Aliens] [Призраки] [Монстры]

Как бы я идти об этом?

+0

У вас есть пример онлайн, который вдохновляет вас? – blackhawk

+0

Когда вы говорите «эффект переключения», это то, что на hover ?, на клик? он перемещает чекбокс? – blackhawk

+0

@blackhawk У меня нет примера онлайн, который вдохновил меня. С эффектом переключения я имею в виду, что при нажатии кнопки флажок будет «отмечен» и останется таким, пока форма не будет отправлена. Впоследствии все отмеченные флажки будут использоваться в качестве тегов для статьи. – Swen

ответ

6

Проверить this из

HTML

<input id="chk_aliens" type="checkbox" name="wpuf_post_tags[]" class="vis-hidden new-post-tags" value="Aliens" /> 
<label for="chk_aliens">Aliens</label> 

<input id="chk_ghosts" type="checkbox" name="wpuf_post_tags[]" class="vis-hidden new-post-tags" value="Ghosts" /> 
<label for="chk_ghosts">Ghosts</label> 

<input id="chk_monsters" type="checkbox" name="wpuf_post_tags[]" class="vis-hidden new-post-tags" value="Monsters" /> 
<label for="chk_monsters">Monsters</label> 

CSS

.vis-hidden { 
    border: 0; 
    clip: rect(0 0 0 0); 
    height: 1px; 
    margin: -1px; 
    overflow: hidden; 
    padding: 0; 
    position: absolute; 
    width: 1px; 
} 

label { 
    margin: 10px; 
    padding: 5px; 
    border: 1px solid gray; 
} 

input:focus + label { 
    border-color: blue; 
} 

input:checked + label { 
    border-color: red; 
} 

input:focus:checked + label { 
    border-color: green; 
} 

Обратите внимание, что последний селектор может не работать в старых IE.

+3

У меня есть аналогичный пример [здесь] (http://jsfiddle.net/cherryflavourpez/r7vXE/), основанный на [этой статье ниндзя CSS] (http://www.thecssninja.com/css/custom-inputs-using -css). В соответствии с этой статьей IE8 и ниже не поддерживают псевдокласс класса ': checked', поэтому это разваливается в этих браузерах. Таким образом, вам нужно убедиться, что вы только обслуживаете эти стили в подходящих браузерах - одним из способов является использование псевдо-класса 'not()' или помещать их в медиа-запрос. – CherryFlavourPez

+0

@CherryFlavourPez Я просто посмотрел на ваш пример, и мне это очень нравится. Однако мне интересно, если бы мне было лучше использовать CSS, чтобы сделать эффект переключения или использовать javascript/jquery. Что вы бы посоветовали? – Swen

+0

Вы также можете использовать [условный класс тела IE] (http://css-tricks.com/snippets/html/add-body-class-just-for-ie/) и применять эти стили для браузеров, новее IE8. Таким образом, в IE8 - вы увидите обычные флажки, а для более нового браузера у вас будут стильные ярлыки. – Simon

3

Checkboxes, radio кнопки и SELECT элементы имеют очень ограниченные возможности стилизации и широко варьируются в разных браузерах.

Вам лучше выполнить их с помощью стилизованных ссылок или кнопок, а затем с помощью JavaScript установить фактические значения включения/выключения и формы.

+1

Это именно то, что я бы сказал, стилистические элементы формы - это боль в шее, особенно если она должна быть кросс-браузером. – Adrenaxus

+0

Перемещенные кнопки должны быть отправлены через форму. Я не уверен, как это возможно, используя стилизованные ссылки или кнопки. – Swen

+1

Не только это, но каждый из них имеет хорошо принятые варианты использования. Создание флажков, таких как переключатели, нарушает стандарты пользовательского опыта. – isherwood

0

Возможно, у вас есть фото с javascript onclick, которое изменит атрибут img source. Затем поместите скрытый контроль с данными id и в том же onclick событии используйте document.getElementById('hiddencontrol').value = 1 - document.getElementById('hiddencontrol').value (с 0 или 1 по умолчанию).

Однако я не знаю, как это сделать без Javascript.

1

Вы можете заимствовать идеи от этого page! Попытайтесь связать свой текст и флажок. Затем попробуйте использовать jquery для «переключения» метки, связанной с этим флажком.

Затем вы можете использовать стили и изображения, чтобы метки выглядели как контейнеры для флажков. Это то, что я сделал бы.

5

Это можно сделать с помощью флажков и меток, смежного селектора для сестер, и псевдонима класса CSS3 :selected.

HTML:

<span><input type="checkbox" id="c1"><label for="c1">[ Aliens ]</label></span> 
<span><input type="checkbox" id="c2"><label for="c2">[ Ghosts ]</label></span> 
<span><input type="checkbox" id="c3"><label for="c3">[ Monsters ]</label></span> 

CSS:

input { display:none; } 
input:checked ~ label { color:red; } 

http://jsfiddle.net/drTg2/

Но следует помнить, что это будет легко потерпеть неудачу в старых браузерах - потому что они не знают ~ или :checked. И более старый IE имеет проблемы с флажками, установленными на display:none, - не будет передавать их при отправке формы (хотя это можно преодолеть с помощью других способов скрытия, т. Е. Абсолютного позиционирования экрана).

Если вы не настаиваете на чистом решении HTML/CSS - там много скриптов/{js-framework-of-your-choice} -plugins, которые помогают достичь такого же эффекта.

+0

Это именно то, что я пытался сделать! Как «опасно» использовать это на моем сайте? (скрытие флажков и использование меток для их проверки или снятия с них) – Swen

+0

Это зависит от того, насколько важно, чтобы он работал в каждом браузере - или если вы можете жить с ним, не работая в браузерах, которые немного старше ... – CBroe

+0

Обратите внимание, что вы не можете вставлять флажки, если вы устанавливаете отображение: none, также их значение не будет представлено в форме. Вы должны использовать класс скрытности видимости. – Simon

Смежные вопросы