Как совместить флажки и их метки последовательно в кросс-браузерах

Вы можете сделать это в RegEdit HKEY_CURRENT_USER \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Explorer \ Advanced изменить HideIcons на 1

    static void HideIcons()
    {
        RegistryKey myKey = Registry.CurrentUser.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced", true);
        if (myKey != null)
        {
            myKey.SetValue("HideIcons", 1);
            myKey.Close();
        }
    }

Использовать класс реестра, как описано здесь.

http://msdn.microsoft.com/en-us/library/microsoft.win32.registry.aspx

1632
задан 10 revs, 9 users 24% 23 February 2018 в 04:24
поделиться

15 ответов

После более чем часа тонкой настройки, тестирования и попытки различных стилей разметки, я думаю, что у меня может быть достойное решение. Требования для этого конкретного проекта были:

  1. Исходные данные должны быть на их собственной строке.
  2. исходные данные Флажка должны выровняться вертикально с текстом метки так же (если не тождественно) через все браузеры.
  3. , Если текст метки переносится, он должен быть расположен с отступом (так никакое обертывание вниз под флажком).

, Прежде чем я войду в любое объяснение, я просто дам Вам код:

label {
  display: block;
  padding-left: 15px;
  text-indent: -15px;
}
input {
  width: 13px;
  height: 13px;
  padding: 0;
  margin:0;
  vertical-align: bottom;
  position: relative;
  top: -1px;
  *overflow: hidden;
}
<form>
  <div>
    <label><input type="checkbox" /> Label text</label>
  </div>
</form>

Вот рабочий пример в JSFiddle.

Этот код предполагает использование сброса как Eric Meyer, который не переопределяет входные поля формы и дополняющий (следовательно помещение поля и дополнение сброса во входном CSS). Очевидно, в продуктивной среде Вы, вероятно, будете вложенным/переопределяющим материалом для поддержки других входных элементов, но я хотел сохранить вещи простыми.

Вещи отметить:

  • *overflow объявление является встроенным взломом IE (взлом звездообразного свойства). И IE 6 и 7 заметит его, но Safari и Firefox правильно проигнорируют его. Я думаю, что это мог бы быть действительный CSS, но Вы все еще более обеспечены с условными комментариями; просто используемый это для простоты.
  • , Поскольку лучше всего я могу сказать, [только 113] оператор, который был последователен через браузеры, был vertical-align: bottom. Установка этого и затем относительно располагающий вверх вела себя почти тождественно в Safari, Firefox и IE только с пикселем или двумя из несоответствия.
  • основная проблема в работе с выравниванием состоит в том, что IE засовывает набор таинственного пространства вокруг входных элементов. Это не дополняет или поле, и это прокляло персистентный. Установка ширины и высоты на флажке и затем overflow: hidden по некоторым причинам отключает дополнительное пространство и позволяет расположению IE действовать очень похоже к Safari и Firefox.
  • В зависимости от Вашей текстовой калибровки, необходимо будет несомненно скорректировать относительное расположение, ширину, высоту, и т.д для разбираний в вещах, смотрящих.

Hope это помогает кому-то еще! Я не попробовал эту определенную методику ни на каких проектах кроме того, который я работал этим утром, так определенно заговорите, находите ли Вы что-то, что работает более последовательно.

967
ответ дан 6 revs, 6 users 67% 23 February 2018 в 04:24
поделиться

Я обычно использую высоту строки, чтобы отрегулировать вертикальное положение моего статического текста:

label {
  line-height: 18px;
}
input {
  width: 13px;
  height: 18px;
  font-size: 12px;
  line-height: 12px;
}
<form>
  <div>
    <label><input type="checkbox" /> Label text</label>
  </div>
</form>

Hope, которая помогает.

20
ответ дан 2 revs, 2 users 69% 23 February 2018 в 04:24
поделиться

попробуйте vertical-align: middle

, также Ваш код кажется, что это должно быть:

<form>
    <div>
        <input id="blah" type="checkbox"><label for="blah">Label text</label>
    </div>
</form>
87
ответ дан 4 revs, 4 users 71% 23 February 2018 в 04:24
поделиться

У меня никогда не было проблемы с выполнением его как это:

<form>
  <div>
    <input type="checkbox" id="cb" /> <label for="cb">Label text</label>
  </div>
</form>
7
ответ дан John Topley 23 February 2018 в 04:24
поделиться

Я обычно оставляю флажок немаркированным и затем делаю его "маркировку" отдельным элементом. Это - боль, но существует такое различие перекрестного браузера между тем, как флажки и их маркировки отображены (как Вы заметили), что это - единственный способ, которым я могу близко подойти к управлению, как все смотрит.

я также заканчиваю тем, что делал это в разработке winforms по той же причине. Я думаю, что фундаментальная проблема с управлением флажком состоит в том, что это - действительно два различных средств управления: поле и маркировка. При помощи флажка Вы оставляете его до лиц, осуществляющих внедрение управления, чтобы решить, как те два элемента отображены друг рядом с другом (и они всегда понимают его превратно, где неправильно = не, что Вы хотите).

я действительно надеюсь, что у кого-то есть лучший ответ на Ваш вопрос.

2
ответ дан MusiGenesis 23 February 2018 в 04:24
поделиться

Попробуйте мое решение, я попробовал его в IE 6, FF2 и Chrome, и оно представляет попиксельно во всех этих трех браузерах.

* {
  padding: 0px;
  margin: 0px;
}
#wb {
  width: 15px;
  height: 15px;
  float: left;
}
#somelabel {
  float: left;
  padding-left: 3px;
}
<div>
  <input id="wb" type="checkbox" />
  <label for="wb" id="somelabel">Web Browser</label>
</div>
36
ответ дан 5 revs, 4 users 56% 23 February 2018 в 04:24
поделиться

Это работает хорошо на меня:

fieldset {
  text-align:left;
  border:none
}
fieldset ol, fieldset ul {
  padding:0;
  list-style:none
}
fieldset li {
  padding-bottom:1.5em;
  float:none;
  clear:left
}
label {
  float:left;
  width:7em;
  margin-right:1em
}
fieldset.checkboxes li {
  clear:both;
  padding:.75em
}
fieldset.checkboxes label {
  margin:0 0 0 1em;
  width:20em
}
fieldset.checkboxes input {
  float:left
}
<form>
  <fieldset class="checkboxes">
    <ul>
      <li>
        <input type="checkbox" name="happy" value="yep" id="happy" />
        <label for="happy">Happy?</label>
      </li>
      <li>
        <input type="checkbox" name="hungry" value="yep" id="hungry" />
        <label for="hungry">Hungry?</label>
      </li>
    </ul>
  </fieldset>
</form>
9
ответ дан 3 revs, 3 users 40% 23 February 2018 в 14:24
поделиться

Иногда вертикальный - выравнивают потребности два встроенных (промежуток, маркировка, вход, и т.д....) элементы друг рядом с другом для работы правильно. Следующие флажки правильно вертикально центрируются в IE, Safari, FF и Chrome, даже если размер текста является очень маленьким или большим.

они все плавают друг рядом с другом на той же строке, но nowrap означает, что целый текст метки всегда остается рядом с флажком.

оборотной стороной являются дополнительные бессмысленные Теги span.

.checkboxes label {
  display: inline-block;
  padding-right: 10px;
  white-space: nowrap;
}
.checkboxes input {
  vertical-align: middle;
}
.checkboxes label span {
  vertical-align: middle;
}
<form>
  <div class="checkboxes">
    <label for="x"><input type="checkbox" id="x" /> <span>Label text x</span></label>
    <label for="y"><input type="checkbox" id="y" /> <span>Label text y</span></label>
    <label for="z"><input type="checkbox" id="z" /> <span>Label text z</span></label>
  </div>
</form>

Теперь, если у Вас был очень длинный текст метки, для которого было нужно для обертывания, не переносясь под флажком, Вы будете использовать дополнение и отрицательный текстовый отступ на элементах маркировки:

.checkboxes label {
  display: block;
  padding-right: 10px;
  padding-left: 22px;
  text-indent: -22px;
}
.checkboxes input {
  vertical-align: middle;
}
.checkboxes label span {
  vertical-align: middle;
}
<form>
  <div class="checkboxes">
    <label for="x"><input type="checkbox" id="x" /> <span>Label text x so long that it will probably wrap so let's see how it goes with the proposed CSS (expected: two lines are aligned nicely)</span></label>
    <label for="y"><input type="checkbox" id="y" /> <span>Label text y</span></label>
    <label for="z"><input type="checkbox" id="z" /> <span>Label text z</span></label>
  </div>
</form>
196
ответ дан 5 revs, 5 users 58% 23 February 2018 в 14:24
поделиться

Yay Спасибо! Это также сводило меня с ума навсегда.

В моем особом случае, это работало на меня:

input {
    width: 13px;
    height: 13px;
    padding: 0;
    margin:0;
    vertical-align: top;
    position: relative;
    *top: 1px;
    *overflow: hidden;
}
label {
    display: block;
    padding: 0;
    padding-left: 15px;
    text-indent: -15px;
    border: 0px solid;
    margin-left: 5px;
    vertical-align: top;
}

я использую reset.css, который мог бы объяснить некоторые различия, но это, кажется, работает хорошо на меня.

1
ответ дан 3 revs, 3 users 57%Jeff 23 February 2018 в 14:24
поделиться

Просто хотел добавить к обсуждению атрибута 'for' на ярлыках (немного не по теме):

Пожалуйста, укажите его, даже если в этом нет необходимости, потому что это очень удобно использовать из javascript:

var label = ...
var input = document.getElementById(label.htmlFor);

Это намного удобнее, чем пытаться выяснить, имеет ли метка вход вложенный, или вход перед меткой, или после ... и т. д. И это никогда не повредит ... так что .

Всего мои 2 цента.

6
ответ дан 14 September 2019 в 06:12
поделиться

Отделываясь решения Одного Мелка, у меня есть что-то, что работает на меня и более просто:

.font2 {font-family:Arial; font-size:32px} /* Sample font */

input[type=checkbox], input[type=radio] {
  vertical-align: middle;
  position: relative;
  bottom: 1px;
}

input[type=radio] { 
  bottom: 2px; 
} 
<label><input type="checkbox" /> Label text</label>
<p class="font2">
  <label><input type="checkbox"/> Label text</label>
</p>

Пиксель для пикселя рендеринга то же в Safari (чья базовая линия я доверяю), и и Firefox и выезд IE7 как хороший. Это также работает на различные размеры шрифта маркировки, большие и маленькие. Теперь, для фиксации базовой линии IE на выборах и исходных данных...


Обновление: (Стороннее редактирование)

Надлежащее bottom положение зависит от семейства шрифтов и размера шрифта! Я нашел использование bottom: .08em; поскольку флажок и радио-элементы являются хорошим общим значением. Я протестировал его в Chrome/Firefox/IE11 в окнах со шрифтами Arial & Calibri с помощью нескольких маленьких/середин/больших размеров шрифта.

.font2, .font2 input {font-family:Arial; font-size:32px} /* Sample font */

input[type=checkbox], input[type=radio] {
  vertical-align: middle; 
  position: relative;
  bottom: .08em; /* this is a better value for different fonts! */
}
<label><input type="checkbox" /> Label text</label> 

<p class="font2">
  <label><input type="checkbox"/> Label text</label>
</p>
179
ответ дан 22 November 2019 в 20:09
поделиться

С помощью флажков входного типа, завернутый внутри этикетки и плавал влево, так как:

<label for="id" class="checkbox">
    <input type="checkbox" id="id">
    <span>The Label</span>
</label>

Это сработало для меня:

label.checkbox {
    display: block;
}
.checkbox input {
    float: left;
    height: 18px;
    vertical-align: middle;
}
.checkbox span {
    float: left;
    line-height: 18px;
    margin: 0 0 0 20px;
}

Убедитесь, что высота идентична линии Высота (BloedLevel).

3
ответ дан 22 November 2019 в 20:09
поделиться

Одна простая вещь, которая, кажется, хорошо работает, - это применить корректировку вертикального положения флажка с помощью vertical-align. Это все равно будет отличаться в разных браузерах, но решение несложное.

input {
    vertical-align: -2px;
}

Ссылка

137
ответ дан 22 November 2019 в 20:09
поделиться

input {
    margin: 0;
}

действительно помогает

-2
ответ дан 22 November 2019 в 20:09
поделиться

Это не лучший способ решения проблемы

vertical-align: middle

Добавление style="position:relative;top:2px;" к полю ввода переместит его вниз на 2px. Таким образом, в зависимости от размера шрифта, вы можете сдвинуть его вдоль.

0
ответ дан 22 November 2019 в 20:09
поделиться