Можете ли вы пометить html-переключатель, чтобы он выглядел как флажок?
У меня есть html-форма, которую пользователь заполнит и распечатает. После печати эти формы будут отправлены по факсу или отправлены по почте в правительственное учреждение и должны выглядеть достаточно близко, как оригинальная форма, опубликованная указанным агентством, что правительственный чиновник не видит, что это воспроизведение. Данные, введенные в форму, не сохраняются нигде или даже не отправляются обратно на веб-сервер. Все что имеет значение, так это то, что наши пользователи могут легко найти эти формы на нашем сайте интрасети и ввести в форму для печати с их обычной клавиатурой.
На экране я хочу оставить переключатель "как есть", чтобы обеспечить использование и использование радиокнопки (выберите только один вариант). Однако, когда он распечатывается, мне нужно, чтобы он печатался с квадратным флажком, а не с круглым переключателем. Я знаю, как использовать селектор мультимедиа для установки стилей только для печати, так что это не проблема. Это просто, что я не знаю, смогу ли я настроить переключатель, как я хочу вообще.
Если я не могу получить эту работу, мне нужно будет создать флажок, чтобы затенять каждый переключатель, используйте javascript, чтобы сохранить флажки и переключатели в синхронизации, и css, чтобы показать тот, который мне очень нравится средний. Очевидно, если я смогу их просто стилизовать, это сэкономит много работы.
Ответы
Ответ 1
Спустя три года после публикации этого вопроса, и это почти доступно. Фактически, это вполне достижимо в Firefox 1+, Chrome 1+, Safari 3+ и Opera 15+ с помощью CSS3 appearance
.
В результате появляются элементы радио, которые выглядят как флажки:
input[type="radio"] {
-webkit-appearance: checkbox; /* Chrome, Safari, Opera */
-moz-appearance: checkbox; /* Firefox */
-ms-appearance: checkbox; /* not currently supported */
}
<label><input type="radio" name="radio"> Checkbox 1</label>
<label><input type="radio" name="radio"> Checkbox 2</label>
Ответ 2
В CSS3:
input[type=radio] {content:url(mycheckbox.png)}
input[type=radio]:checked {content:url(mycheckbox-checked.png)}
В действительности:
<span class=fakecheckbox><input type=radio><img src="checkbox.png" alt=""></span>
@media screen {.fakecheckbox img {display:none}}
@media print {.fakecheckbox input {display:none;}}
и вам понадобится Javascript, чтобы синхронизировать <img>
и радиоприемники (и в идеале вставлять их там в первую очередь).
Я использовал <img>
, потому что в браузерах обычно настроено не печатать background-image
. Лучше использовать изображение, чем другой элемент управления, поскольку изображение не является интерактивным и реже вызывает проблемы.
Ответ 3
Это мое решение, используя только CSS (Jsfiddle: http://jsfiddle.net/xykPT/).
![enter image description here]()
div.options > label > input {
visibility: hidden;
}
div.options > label {
display: block;
margin: 0 0 0 -10px;
padding: 0 0 20px 0;
height: 20px;
width: 150px;
}
div.options > label > img {
display: inline-block;
padding: 0px;
height:30px;
width:30px;
background: none;
}
div.options > label > input:checked +img {
background: url(http://cdn1.iconfinder.com/data/icons/onebit/PNG/onebit_34.png);
background-repeat: no-repeat;
background-position:center center;
background-size:30px 30px;
}
<div class="options">
<label title="item1">
<input type="radio" name="foo" value="0" />
Item 1
<img />
</label>
<label title="item2">
<input type="radio" name="foo" value="1" />
Item 2
<img />
</label>
<label title="item3">
<input type="radio" name="foo" value="2" />
Item 3
<img />
</label>
</div>
Ответ 4
Я изменил user2314737 ответ, чтобы использовать шрифт awesome для значка. Для тех, кто не знаком с fa, одним значительным преимуществом над img является рендеринг на основе вектора, присущий шрифтам. То есть нет изображения на любом уровне масштабирования.
Результат
![enter image description here]()
div.checkRadioContainer > label > input {
visibility: hidden;
}
div.checkRadioContainer {
max-width: 10em;
}
div.checkRadioContainer > label {
display: block;
border: 2px solid grey;
margin-bottom: -2px;
cursor: pointer;
}
div.checkRadioContainer > label:hover {
background-color: AliceBlue;
}
div.checkRadioContainer > label > span {
display: inline-block;
vertical-align: top;
line-height: 2em;
}
div.checkRadioContainer > label > input + i {
visibility: hidden;
color: green;
margin-left: -0.5em;
margin-right: 0.2em;
}
div.checkRadioContainer > label > input:checked + i {
visibility: visible;
}
<div class="checkRadioContainer">
<label>
<input type="radio" name="radioGroup" />
<i class="fa fa-check fa-2x"></i>
<span>Item 1</span>
</label>
<label>
<input type="radio" name="radioGroup" />
<i class="fa fa-check fa-2x"></i>
<span>Item 2</span>
</label>
<label>
<input type="radio" name="radioGroup" />
<i class="fa fa-check fa-2x"></i>
<span>Item 3</span>
</label>
</div>
Ответ 5
Я не думаю, что вы можете сделать элемент управления похожим на элемент управления с CSS.
Лучше всего сделать это, чтобы кнопка PRINT переместилась на новую страницу с графикой вместо выбранного переключателя, затем откройте окно .print().
Ответ 6
Свойство внешний вид не работает во всех браузерах. Вы можете сделать следующее:
input[type="radio"]{
display: none;
}
label:before{
content:url(http://strawberrycambodia.com/book/admin/templates/default/images/icons/16x16/checkbox.gif);
}
input[type="radio"]:checked+label:before{
content:url(http://www.treatment-abroad.ru/img/admin/icons/16x16/checkbox.gif);
}
<input type="radio" name="gender" id="test1" value="male">
<label for="test1"> check 1</label>
<input type="radio" name="gender" value="female" id="test2">
<label for="test2"> check 2</label>
<input type="radio" name="gender" value="other" id="test3">
<label for="test3"> check 3</label>
Ответ 7
Да, CSS может сделать это:
input[type=checkbox] {
display: none;
}
input[type=checkbox] + *:before {
content: "";
display: inline-block;
margin: 0 0.4em;
/* Make some horizontal space. */
width: .6em;
height: .6em;
border-radius: 0.6em;
box-shadow: 0px 0px 0px .5px #888
/* An outer circle. */
;
/* No inner circle. */
background-color: #ddd;
/* Inner color. */
}
input[type=checkbox]:checked + *:before {
box-shadow: 0px 0px 0px .5px #888
/* An outer circle. */
, inset 0px 0px 0px .14em #ddd;
/* An inner circle with above inner color.*/
background-color: #444;
/* The dot color */
}
<div>
<input id="check1" type="checkbox" name="check" value="check1" checked>
<label for="check1">Fake Checkbox1</label>
</div>
<div>
<input id="check2" type="checkbox" name="check" value="check2">
<label for="check2">Fake Checkbox2</label>
</div>
<div>
<input id="check2" type="radio" name="check" value="radio1" checked>
<label for="check2">Real Checkbox1</label>
</div>
<div>
<input id="check2" type="radio" name="check" value="radio2">
<label for="check2">Real Checkbox2</label>
</div>
Ответ 8
Очень простая идея с использованием таблицы и без Javascript.
Я слишком упрощен?
<style type="text/css" media="screen">
#ageBox {display: none;}
</style>
<style type="text/css" media="print">
#ageButton {display: none;}
</style>
<tr><td>Age:</td>
<td id="ageButton">
<input type="radio" name="userAge" value="18-24">18-24
<input type="radio" name="userAge" value="25-34">25-34
<td id="ageBox">
<input type="checkbox">18-24
<input type="checkbox">25-34
</td></tr>