Это одна из мелких проблем CSS, которая постоянно мучает меня. Как люди вокруг Stack Overflow выровнены по вертикали checkboxes
и labels
постоянно кроссбраузерны ? Всякий раз, когда я корректно выравниваю их в Safari (обычно использую vertical-align: baseline
на input
), они полностью отключаются в Firefox и IE. Исправьте это в Firefox, и Safari и IE неизбежно испортятся. Я трачу время на это каждый раз, когда кодирую форму.
Вот стандартный код, с которым я работаю:
<form>
<div>
<label><input type="checkbox" /> Label text</label>
</div>
</form>
Я обычно использую сброс Эрика Мейера, поэтому элементы формы относительно чисты от переопределений. Ждем любых советов или хитростей, которые вы можете предложить!
height
иline-height
атрибутов, посмотрите jsfiddle.net/wepw5o57/3position
иtop
решит эту проблему Пример: jsfiddle.net/ynkjc22sОтветы:
После более чем часа настройки, тестирования и разметки разных стилей, я думаю, у меня может быть достойное решение. Требования для этого конкретного проекта были:
Прежде чем я приведу какое-либо объяснение, я просто дам вам код:
Вот рабочий пример в JSFiddle .
В этом коде предполагается, что вы используете сброс, такой как Эрик Майер, который не переопределяет поля ввода формы и отступы (следовательно, вводит сброс полей и отступов во входном CSS). Очевидно, что в реальной среде вы, вероятно, будете вкладывать / переопределять материал для поддержки других элементов ввода, но я хотел, чтобы все было просто.
Что следует отметить:
*overflow
Декларация является встроенный IE хак (звезда-недвижимость хак). И IE 6 и 7 заметят это, но Safari и Firefox будут правильно игнорировать это. Я думаю, что это может быть действительный CSS, но вам все же лучше с условными комментариями; просто использовал это для простоты.vertical-align
утверждение, которое было одинаковым во всех браузерах, былоvertical-align: bottom
. Установка этого и затем относительного позиционирования вверх в Safari, Firefox и IE вела себя почти одинаково с разницей в один или два пикселя.overflow: hidden
по какой-то причине отсекает дополнительное пространство и позволяет позиционированию IE действовать очень похоже на Safari и Firefox.Надеюсь, это поможет кому-то еще! Я не пробовал эту конкретную технику на каких-либо проектах, кроме тех, над которыми я работал этим утром, поэтому определенно подготовьтесь, если найдете что-то, что работает более последовательно.
источник
Иногда для вертикального выравнивания требуются два встроенных элемента (span, label, input и т. Д.) Рядом друг с другом для правильной работы. Следующие флажки правильно отцентрированы по вертикали в IE, Safari, FF и Chrome, даже если размер текста очень маленький или большой.
Все они плавают рядом друг с другом в одной строке, но nowrap означает, что весь текст метки всегда остается рядом с флажком.
Недостатком являются дополнительные бессмысленные теги SPAN.
Теперь, если бы у вас был очень длинный текст метки, который нужно было переносить без переноса под флажком, вы бы использовали отступы и отступ для отрицательного текста на элементах метки:
источник
display: block; float: left;
кажется излишнимРаботая над решением One Crayon , у меня есть кое-что, что работает для меня и проще:
Отрисовывает пиксель за пикселем то же самое в Safari (базовый уровень которого я доверяю), и Firefox и IE7 проверяются как хорошие. Он также работает для шрифтов различных размеров, больших и маленьких. Теперь для исправления базовой линии IE на выборках и входах ...
Обновление: (стороннее редактирование)
Правильная
bottom
позиция зависит от семейства шрифтов и размера шрифта! Я нашел использованиеbottom: .08em;
for checkbox & radio elements - хорошая общая ценность. Я протестировал его в Chrome / Firefox / IE11 в Windows со шрифтами Arial и Calibri, используя несколько маленьких / средних / больших шрифтов.источник
Одна простая вещь, которая, кажется, работает хорошо, состоит в том, чтобы применить корректировку вертикального положения флажка с вертикальным выравниванием. Это будет по-разному в разных браузерах, но решение несложное.
Ссылка
источник
vertical-align
иposition: relative
потому что это также работает в IE9 правильно :)em
пытаться
vertical-align: middle
также ваш код выглядит так:
источник
<label for="blah">
необходимо только в том случае, если вы используете что-то, для чего не имеет смысла переносить метку (например, текстовое поле; я обычно буду использовать<label for="blah">Foo</label><input id="blah" type="text" />
в этом случае). С флажками я считаю, что это меньше разметки, чтобы обернуть его.Попробуйте мое решение, я попробовал его в IE 6, FF2 и Chrome, и он рендерит пиксель за пикселем во всех трех браузерах.
источник
Единственное идеально работающее решение для меня:
Протестировано сегодня в Chrome, Firefox, Opera, IE 7 и 8. Пример: Fiddle
источник
Я не полностью проверил свое решение, но, похоже, оно работает отлично.
Мой HTML просто:
Затем я установил все флажки
24px
для высоты и ширины. Для того, чтобы текст выровнен я сделать ярлык этоline-height
также24px
и правопреемникомvertical-align: top;
следующим образом:РЕДАКТИРОВАТЬ: После тестирования IE я добавил
vertical-align: bottom;
на вход и изменил CSS метки. Возможно, вам понадобится условный регистр IE css для сортировки заполнения, но текст и поле встроены.Если кто-нибудь обнаружит, что это не работает, пожалуйста, дайте мне знать. Вот оно в действии (в Chrome и IE - извинения за то, что скриншоты были сделаны на сетчатке и с использованием параллелей для IE):
источник
Я обычно использую высоту строки, чтобы отрегулировать вертикальное положение моего статического текста:
Надеюсь, это поможет.
источник
Хитрость заключается в том, чтобы использовать вертикальное выравнивание только в ячейках таблицы или встроенном блоке, если используется тег label.
источник
Давайте наконец посмотрим на источник проблемы
Флажки отображаются с помощью изображений (можно установить пользовательские с помощью CSS). Вот (не отмеченный) флажок в FireFox, выделенный инспектором DOM:
И вот такой же неустановленный флажок в Chrome:
Вы можете увидеть поле (оранжевый); отступа нет (будет показано зеленым). Так что же это за псевдо-поле справа и снизу флажка? Это части изображения, используемые для флажка . Вот почему с помощью просто
vertical-align: middle
не достаточно, и это является источником кросс-браузерных проблем.Так что мы можем с этим поделать?
Один очевидный вариант - заменить изображения! К счастью, это можно сделать с помощью CSS и заменить их внешними изображениями, изображениями base64 (in-CSS), SVG в CSS или просто псевдоэлементами. Это надежный (кросс-браузерный!) Подход, и вот пример такой настройки, украденной из этого вопроса :
Возможно, вы захотите прочитать более подробные статьи о таком стиле, как некоторые из перечисленных здесь ; это выходит за рамки этого ответа.
Хорошо, все же, что насчет решения «нет пользовательских изображений или псевдоэлементов»?
TL; DR: похоже, это не сработает, вместо этого используйте пользовательский флажок
Во-первых, давайте заметим, что если в других браузерах эти псевдо-поля внутри значка флажка были произвольными, единого решения не было. Чтобы создать его, мы должны изучить анатомию таких изображений в существующих браузерах.
Итак, какие браузеры имеют псевдо-поля в флажках? Я проверил Chrome 75, Vivaldi 2.5 (на основе хрома), FireFox 54 (не спрашивайте, почему такие устаревшие), IE 11, Edge 42, Safari ?? (одолжил одну на минуту, забыл проверить версию). Только Chrome и Vivaldi имеют такие псевдо-поля (я подозреваю, что все браузеры на основе Chromium, такие как Opera).
Каков размер этих псевдо-полей? Чтобы понять это, можно использовать увеличенный флажок:
мой результат составляет ~ 7% от ширины / высоты и, следовательно, 0,9-1,0px в абсолютных единицах. Точность может быть поставлена под сомнение, хотя: попробуйте различные значения
zoom
для флажка. В моих тестах как в Chrome, так и в Vivaldi относительный размер псевдо-поля сильно различался приzoom
значениях 10, 20 и 11–19 (??):scale
кажется более последовательным:поэтому, вероятно, ~ 14% и 2px - правильные значения.
Теперь, когда мы знаем (?) Размер псевдо-поля, отметим, что этого недостаточно. Являются ли размеры значков флажков одинаковыми для всех браузеров? Увы! Вот что показывает инспектор DOM для неустановленных флажков:
Теперь, прежде чем обсуждать какие-либо решения или хитрости, давайте спросим: что является правильным выравнивание? Чего мы пытаемся достичь? До определенного момента это дело вкуса, но в основном я могу думать о следующих «хороших» аспектах выравниваний:
текст и флажок на одной и той же базовой линии (я специально не настраиваю здесь размер флажка):
или иметь одинаковую среднюю строку в терминах строчных букв:
или та же средняя строка с точки зрения заглавных букв (легче увидеть разницу для разного размера шрифта):
а также мы должны решить, должен ли размер флажка быть равен высоте строчной буквы, заглавной буквы или чего-то еще (больше, меньше или между строчной и заглавной буквой).
Для этого обсуждения давайте назовем выравнивание хорошим, если флажок находится на той же базовой линии, что и текст, и имеет размер заглавной буквы (весьма спорный выбор):
Теперь, какие инструменты мы должны:
?
Что касается корректировки размера флажка : есть
width
,height
,size
,zoom
,scale
(у меня что - то пропустил?).zoom
иscale
не разрешают устанавливать абсолютный размер, поэтому они могут помочь только в адаптации к размеру текста, но не в кросс-браузерном размере (если мы не можем написать правила для браузера).size
не работает с Chrome (он работал со старым IE? в любом случае, это не так интересно).width
а такжеheight
работать в Chrome и других браузерах, поэтому мы можем установить общий размер, но опять же, в Chrome он устанавливает размер всего изображения, а не сам флажок. Примечание: это минимум (ширина, высота), который определяет размер флажка (если ширина ≠ высота, область вне квадрата флажка добавляется к «псевдо-полям»).К сожалению, псевдо-поля в Chrome не установлены на ноль для любой ширины и высоты, насколько я вижу.
Боюсь, в наши дни не существует надежного метода только для CSS .
Давайте рассмотрим вертикальное выравнивание.
vertical-align
не может дать согласованные результаты, когда установленоmiddle
илиbaseline
из-за псевдо-поля Chrome, единственная реальная возможность получить одинаковую «систему координат» для всех браузеров - это выровнять метку и ввести вtop
:(на картинке: выравнивание по вертикали: верх, низ и низ без тени)
Так какой результат мы получаем от этого?
Приведенный выше фрагмент кода работает с Chrome (браузеры на основе Chromium), но для других браузеров требуется меньший размер флажка. Кажется невозможным отрегулировать как размер, так и вертикальное выравнивание таким образом, чтобы обойти причуду изображения в Chromium. Мое последнее предложение: используйте вместо этого пользовательские флажки - и вы избежите разочарования :)
источник
Теперь, когда flexbox поддерживается во всех современных браузерах, что-то вроде этого кажется мне более простым подходом.
Вот полная демонстрационная версия с префиксом:
Показать фрагмент кода
источник
Я думаю, что это самый простой способ
источник
Мне не нравится относительное позиционирование, потому что оно делает элемент визуализированным над всем остальным на своем уровне (он может попасть поверх чего-либо, если у вас сложный макет).
Я обнаружил, что
vertical-align: sub
флажки выглядят достаточно хорошо выровненными в Chrome, Firefox и Opera. Не могу проверить Safari, так как у меня нет MacOS и IE10 немного отключен, но я нашел, что это достаточно хорошее решение для меня.Другое решение может заключаться в том, чтобы попытаться создать конкретный CSS для каждого браузера и настроить его с помощью вертикального выравнивания в% / пикселях / EM: http://css-tricks.com/snippets/css/browser-specific-hacks/
источник
Это хорошо работает для меня:
источник
Выбранный ответ с более чем 400 ответами не работал для меня в Chrome 28 OSX, возможно, потому, что он не был протестирован в OSX или что он работал в любом месте в 2008 году, когда на этот вопрос был дан ответ.
Времена изменились, и теперь возможны новые решения CSS3. Мое решение использует псевдоэлементы для создания собственного флажка . Таким образом, условия (плюсы или минусы, как ни крути) таковы:
Это решение скрывает флажок и добавляет и накладывает стили псевдоэлементов на метку, чтобы создать видимый флажок. Поскольку метка привязана к скрытому флажку, поле ввода все равно будет обновлено, а значение будет отправлено вместе с формой.
И если вам интересно, вот мое мнение о переключателях: http://jsfiddle.net/DtKrV/2/
Надеюсь, кто-то найдет это полезным!
источник
У меня никогда не было проблем с этим:
источник
Если вы используете ASP.NET Web Forms, вам не нужно беспокоиться о DIV и других элементах или фиксированных размерах. Мы можем выровнять
<asp:CheckBoxList>
текст, установивfloat:left
тип ввода CheckboxList в CSS.Пожалуйста, проверьте следующий пример кода:
.ASPX код:
источник
Если вы используете Twitter Bootstrap, вы можете просто использовать
checkbox
класс на<label>
:источник
С флажком типа ввода, обернутым внутри метки и смещенным влево, вот так:
это сработало для меня:
Убедитесь, что высота равна высоте строки (уровень блока).
источник
Жестко закодируйте высоту и ширину флажка, удалите его отступы и сделайте его высоту плюс вертикальные поля равными высоте строки метки. Если текст метки встроен, установите флажок. Firefox, Chrome и IE7 + одинаково отображают следующий пример: http://www.kornea.com/css-checkbox-align
источник
источник
Я обычно оставляю флажок без метки, а затем делаю его «метку» отдельным элементом. Это больно, но между браузерами так много различий в том, как отображаются флажки и их метки (как вы заметили), что это единственный способ приблизиться к контролю того, как все выглядит.
Я также заканчиваю тем, что делал это в разработке winforms по той же причине. Я думаю, что основная проблема с элементом управления checkbox заключается в том, что это действительно два разных элемента управления: поле и метка. Используя флажок, вы оставляете на усмотрение разработчиков элемента управления решать, как эти два элемента отображаются рядом друг с другом (и они всегда ошибаются, где неправильно = не то, что вы хотите).
Я действительно надеюсь, что у кого-то есть лучший ответ на ваш вопрос.
источник
CSS:
HTML:
Приведенный выше код поместит элементы списка в три протокола и просто изменит ширину в соответствии с вашими требованиями.
источник
Следующее обеспечивает безупречную согласованность между браузерами, даже IE9:
Подход довольно разумный, до такой степени очевидный:
Это приводит к общему применимому общему правилу:
С размером шрифта адаптируется для формы, набора полей или элемента.
Протестировано в последних версиях Chrome, Safari и Firefox для Mac, Windows, Iphone и Android. И IE9.
Этот метод, вероятно, применим ко всем типам ввода, которые не превышают одну строку текста. Примените правило типа, чтобы удовлетворить.
источник
Поэтому я знаю, что на это уже много раз отвечали, но я чувствую, что у меня есть более элегантное решение, чем те, которые уже были предоставлены. И не только 1 элегантное решение, но и 2 отдельных решения для щекотки. С учетом всего сказанного, все, что вам нужно знать и видеть, содержится в 2 JS Fiddle's с комментариями.
Решение № 1 опирается на собственный «флажок» данного браузера, хотя и с изюминкой ... Он содержится в элементе div, который легче позиционировать в кросс-браузерном режиме, с переполнением: скрыт, чтобы отбросить избыток растянутого флажка на 1 пиксель (это так, что вы не можете видеть уродливые границы FF)
Простой HTML: (перейдите по ссылке, чтобы просмотреть css с комментариями, кодовый блок предназначен для удовлетворения стекового потока) http://jsfiddle.net/KQghJ/
Решение № 2 использует «Переключатель флажков», чтобы переключать состояние CSS DIV, который был правильно расположен в браузере, и настраивается с помощью простого спрайта для состояний флажков, не отмеченных и отмеченных. Все, что нужно, это отрегулировать положение фона с помощью указанного флажка Toggle Hack. Это, на мой взгляд, более элегантное решение, поскольку у вас больше контроля над флажками и радио, и вы можете гарантировать, что они выглядят одинаково в браузере.
Простой HTML: (перейдите по ссылке, чтобы просмотреть CSS с комментариями, блок кода должен удовлетворить StackOverflow) http://jsfiddle.net/Sx5M2/
Если кто-то не согласен с этими методами, пожалуйста, оставьте мне комментарий, я хотел бы услышать некоторые отзывы о том, почему другие не сталкивались с этими решениями, или, если они есть, почему я не вижу здесь ответов относительно них? Если кто-то увидит, что один из этих методов потерпел неудачу, было бы неплохо это увидеть, но они были протестированы в последних браузерах и полагаются на методы HTML / CSS, которые являются довольно старыми и универсальными, насколько я видел.
источник
Yay спасибо! Это тоже сводило меня с ума навсегда.
В моем конкретном случае это сработало для меня:
Я использую reset.css, который может объяснить некоторые различия, но мне кажется, что это хорошо работает.
источник
position: relative;
имеет некоторые проблемы в IE с z-index и анимациями, такими как slideQp / slideDown в jQuery.CSS:
JQuery:
Стиль, вероятно, нуждается в настройках в зависимости от размера шрифта, используемого в
<label>
PS:
я использую ie7js, чтобы заставить css работать в IE6.
источник
Использовать просто
vertical-align: sub
, так как покришка уже предложена.скрипка
HTML-код:
Код CSS:
источник
Простое решение:
Протестировано в Chrome, Firefox, IE9 +, Safari, iOS 9+
источник