Кросбраузерные input и textarea — Xiper
Автор: Евгений Рыжков Дата публикации:
Задача
Задать оформление для полей input[type=»text/password»] и textarea максимально одинаковое во всех популярных браузерах.
Теория
По умолчанию разные браузеры по разному отображают текстовые поля форм — различны:
- внутренние отступы (padding), сброс отступов через универсальный селектор тут не помогает
- шрифт (только для <textarea>) и его размер (хорошо видно в Safari)
- горизонтальное выравнивание текста (текст не на одной горизонтальной линии) в полях и рядом стоящих элементах (например, <label>)
поля в FF 3.5 |
поля в IE 6 |
поля в Opera 9.6 |
поля в Safari 3.2 |
Разница становится заметней, когда привязываем необычное оформление полей.
Решение
Явно задаем для input[type=»text»], input[type=»password»] и textarea размер шрифта (font-size), внутренние отступы (padding). Для textarea так же указываем имя шрифта (font-family).
input[type="text"], input[type="password"] { font-size: 100%; padding: 0; } textarea { font-size: 100%; padding: 0; font-family: arial; }
Код для IE 6, который не понимает в CSS атрибуты (добавляем в ie6.css и подключаем к странице условными комментариями):
.formText { font-size: 100%; padding: 0; } input { z-index: expression( runtimeStyle.zIndex = 1, type == "text" ? (className += " formText") : 0, type == "password" ? (className += " formText") : 0 ) }
Update: Дополнительные проблемы могут возникнуть, если полю нужно указать высоту и/или верхний внутренний отступ (padding-top).
Для примера сделаем поле, которое должно быть высотой 24px, шириной 200px и отступом от верхней границы 3px:input { height: 24px; width: 200px; border: 1px solid #0000CC; background: #99CCFF; font-size: 12px; padding: 3px 0 0 2px; }
В итоге видим, что в разных браузерах текст в поле выравнивается по разному плюс размеры самого поля отличается:
FF 3.5 | opera 10 | ie6 |
На размерах поля останавливаться не будем — нужно вспомнить просто о блочной модели и том, что ие6 ее не так понимает. А вот чтобы выровнять текст, нужно следующее:
- указать высоту поля
- явно указать верхний и нижний отступы (padding-top / padding-bottom)
- ну и не забыть явно указать размер шрифта (font-size)
- задать высоту строки (line-height) равную высоте поля (height) — update by Константин
input { height: 16px; /* высота с учетом бордюр, внутренних отступов */ width: 196px; /* ширина с учетом бордюр, внутренних отступов */ border: 1px solid #0000CC; background: #99CCFF; font-size: 12px; padding: 3px 0 3px 2px; /* обязательно наличие как верхнего так и нижнего отступа */ font-family: Arial, Helvetica, sans-serif; line-height: 16px; /* должно быть равно height, пригодится как минимум для ie6 */ } * html input { /* update by Nikita Zhukov хак нужен только если IE6 работает в режиме обратной совместимости (в таком режиме он работает например, если используется xml-декларация) */ height: 24px; width: 200px; }
Результат.
Проверено в :- IE 6-8
- Firefox 2-3
- Opera 9.5 — 10
- Safari 4
Update так же следует упомянуть, что поля в Safari и Chrome имеют по умолчанию внешние отступы (похоже на резервирование места для подсветки поля в фокусе). Иногда это мешает, например, когда требуется выровнять поля разных типов по одной линии (пример как это должно выглядеть можно увидеть в статье «Убираем отступы у checkbox и radio»). Чтобы было все тип-топ, достаточно обнулить отступы для этих полей.
Textarea | HTML | CodeBasics
Часто мы хотим дать пользователю возможность набрать не одну строчку текста, а сразу несколько. Например, если пользователь хочет оставить отзыв. Для этого используется элемент <textarea>
, позволяющий вводить несколько строчек текста.
Оставьте свой отзыв
<form> <textarea></textarea> </form>
Заметьте, что <textarea>
является парным тегом.
По умолчанию высота и ширина <textarea>
зависит от настроек браузера. Это значит, что в разных браузерах высота и ширина может меняться. Для того, чтобы установить одинаковое значение, используются атрибуты rows
и cols
, означающие количество строк и столбцов соответственно.
<form> <textarea rows="5" cols="30">textarea с 5 строками и 30 столбцами</textarea> </form>textarea с 5 строками и 30 столбцами
Создайте форму, у которой файл с обработчиком данных лежит по адресу /people
. Внутри формы создайте поле для многострочного ввода. Количество строк для ввода: 4. Количество столбцов: 30
- Обязательно приложите вывод тестов, без него практически невозможно понять что не так, даже если вы покажете свой код. Программисты плохо исполняют код в голове, но по полученной ошибке почти всегда понятно, куда смотреть.
Тесты устроены таким образом, что они проверяют решение разными способами и на разных данных. Часто решение работает с одними входными данными, но не работает с другими. Чтобы разобраться с этим моментом, изучите вкладку «Тесты» и внимательно посмотрите на вывод ошибок, в котором есть подсказки.
Мой код отличается от решения учителя 🤔Это нормально 🙆, в программировании одну задачу можно выполнить множеством способов. Если ваш код прошел проверку, то он соответствует условиям задачи.
В редких случаях бывает, что решение подогнано под тесты, но это видно сразу.
Создавать обучающие материалы, понятные для всех без исключения, довольно сложно. Мы очень стараемся, но всегда есть что улучшать. Если вы встретили материал, который вам непонятен, опишите проблему в «Обсуждениях». Идеально, если вы сформулируете непонятные моменты в виде вопросов. Обычно нам нужно несколько дней для внесения правок.
Кстати, вы тоже можете участвовать в улучшении курсов: внизу есть ссылка на исходный код уроков, который можно править прямо из браузера.
←Предыдущий
Следующий→
Нашли ошибку? Есть что добавить? Пулреквесты приветствуются https://github.com/hexlet-basics
Более 1 строки в
спросил
Изменено 9 месяцев назад
Просмотрено 360 тысяч раз
У меня возникли проблемы с тем, чтобы мой
имел более 1 строки,
Я попытался добавить свойства в html, как вы сделали бы с обычным вот так:
Я даже пытался сделать это в CSS, но не получилось. Я искал по всему Интернету решение, но нигде не могу найти тему, касающуюся моей точной проблемы.
Текстовые области, с которыми я столкнулся, находятся на этом веб-сайте: Vilduhelst
Когда вы нажмете кнопку «Lav dit eget dilemma», они появятся.
Я ищу решение для HTML или CSS.
- ввод
- текстовое поле
- строк
- строк
4
Почему бы не использовать тег ?
5
Хотя
игнорирует атрибут rows
, вы можете воспользоваться тем, что
не обязательно должно находиться внутри тегов
, но все же может быть частью формы, если указать идентификатор формы: