I want to put input placeholder on input border.
I manage to change color but not location.
.filter::placeholder {
color: gray;
}
<input type="text" class="filter">
Is there a way to do it?
VXp
11.4k6 gold badges33 silver badges44 bronze badges
asked Jan 15, 2018 at 10:19
3
You can’t do this by styling the ::placeholder
, it only supports a limited number of styles: https://css-tricks.com/almanac/selectors/p/placeholder/#article-header-id-4
You can add a span
that achieves a similar effect however.
.filter {
position: relative;
width: 195px;
height: 30px;
border-radius: 5px;
outline: none;
padding: 5px;
border: 1px solid lightblue;
}
.placeholder {
position: absolute;
left: 20px;
top: 0px;
background-color: white;
padding: 0 20px;
}
.filter:focus ~ .placeholder,
.filter:valid ~ .placeholder {
display: none;
}
<input required type="text" class="filter" />
<span class="placeholder">First Name..</span>
answered Jan 15, 2018 at 10:37
JesseJesse
3,4546 gold badges26 silver badges40 bronze badges
4
A more semantically correct approach would be to use labels instead of spans.
.group{
position:relative;
}
.group>label{
padding:0 0.2em;
position:absolute;
top:-0.5em;
left:1em;
background-color:white;
}
.group>input{
padding:0.8em;
border-radius: 0.5em;
border: 2px solid lightblue;
outline:none;
}
<form>
<div class="group">
<label>First name</label>
<input type="text" class="">
</div>
</form>
answered Jan 15, 2018 at 10:46
0
Атрибут placeholder
используется для создания подсказок внутри пустых полей ввода (теги <input>
и <textarea>
). В этой статье я рассмотрю способы стилизации плэйсхолдеров, а также, как сделать их более удобными в использовании.
Начнём с примера для тех, кто ещё не знает, что такое плэйсхолдер и как его использовать:
<input type="email" placeholder="example@gmail.com">
При разработке интерфейсов следует учитывать особенности поведения плэйсхолдеров. Текст плэйсхолдера исчезает, как только начинается ввод. Именно поэтому не стоит использовать их для передачи информации о самом поле ввода (сколько и какие именно символов оно должно содержать). Для данных целей лучше всего использовать тег <label>
или параграф с небольшой подсказкой. Подробнее об особенностях использования плэйсхолдеров можно почитать здесь.
Стилизация
Для стилизации плэйсхолдеров используются следующие правила:
::-webkit-input-placeholder { color: blue; }
::-moz-placeholder { color: blue; } /* Firefox 19+ */
:-moz-placeholder { color: blue; } /* Firefox 18- */
:-ms-input-placeholder { color: blue; }
Выглядит ужасно, не так ли? И на это есть причина — до сих пор CSS правила для плэйсхолдеров не были стандартизированы и имплементация в каждом браузере различная. Подробнее о всех необходимых префиксах можно узнать на caniuse.
Если вы используете CSS-препроцессор, то, скорее всего, для применения стилей к плэйсхолдерам вам будет удобнее всего написать простой миксин. Пример на Sass:
@mixin placeholder {
&::-webkit-input-placeholder { @content; }
&:-moz-placeholder { @content; }
&::-moz-placeholder { @content; }
&:-ms-input-placeholder { @content; }
}
В зависимости от контекста миксин можно использовать как для глобального применения стилей, так и для отдельных элементов (опробуйте на SassMeister):
// Глобально для каждого поля ввода
@include placeholder {
color: blue;
}
// Для определённых полей ввода
.input {
@include placeholder {
color: green;
}
}
Пример
Синий текст для плэйсхолдера (никогда так не делайте):
.blue-text::-webkit-input-placeholder {
color: #2e8ece;
}
.blue-text:-moz-placeholder {
color: #2e8ece;
}
.blue-text::-moz-placeholder {
color: #2e8ece;
}
.blue-text:-ms-input-placeholder {
color: #2e8ece;
}
Поддерживаемые свойства
Не каждое CSS свойство можно использовать с плэйсхолдерами. Вот полный список поддерживаемых свойств:
font
и все связанные свойства (font-size
,font-family
и т.д.)background
и все связанные свойства (background-color
,background-image
и т.д.)opacity
text-indent
text-overflow
color
text-transform
line-height
word-spacing
letter-spacing
text-decoration
vertical-align
Анимации
Идеи анимаций принадлежит блогу html5.by.
Все следующие примеры написаны с использованием препроцессора Sass. К каждому прилагается ссылка на SassMeister, по которой вы сможете найти скомпилированный CSS код.
Скорее всего, вы захотите применять анимации к плэйсхолдерам при фокусе на поле ввода. Делается всё это достаточно просто. Достаточно всего несколько раз использовать написанный ранее миксин placeholder
:
.input {
@include placeholder {
// Стили для нормального состояния
}
&:focus {
@include placeholder {
// Стили после события focus
}
}
}
Изменение прозрачности
Посмотреть на SassMeister
.input {
@include placeholder {
color: #aaa;
opacity: 1;
transition: opacity 300ms;
}
&:focus {
@include placeholder {
opacity: 0;
}
}
}
Сдвиг вправо и влево
Посмотреть на SassMeister
Чем больше ширина поля ввода, тем больше должно быть значение свойства text-indent
. Для стандартного поля ввода будет достаточно 500px
, для более широких стоит подбирать вручную. От ширины поля ввода и значения text-indent
зависит скорость анимации. Для сдвига влево нужно использовать отрицательные значения, например -500px
.
.input {
@include placeholder {
text-indent: 0px;
transition: text-indent 300ms;
}
&:focus {
@include placeholder {
text-indent: 500px;
}
}
}
Сдвиг вниз
Посмотреть на SassMeister
Как и в прошлом примере анимация зависит от размеров воля ввода, но в этом случае внимание своит обратить на высоту. Для подавляющего большинства полей ввода искомое значение line-height
будет находиться в пределах 100px
. К сожалению, с помощью свойства line-height
невозможно реализовать эффект сдвига вверх, так как свойство не принимает отрицательные значения.
.input {
@include placeholder {
text-indent: 0px;
transition: text-indent 300ms;
}
&:focus {
@include placeholder {
text-indent: 500px;
}
}
}
Всё вместе
Чтобы использовать код анимаций для плэйсхолдеров было приятно и удобно, можно написать небольшую библиотеку миксинов для любого препроцессора. Библиотека выглядит следующим образом (посмотреть на SassMeister):
@mixin placeholder {
&::-webkit-input-placeholder {@content}
&:-moz-placeholder {@content}
&::-moz-placeholder {@content}
&:-ms-input-placeholder {@content}
}
@mixin pl-shift($side: left, $position: 500px, $duration: 200ms) {
@include placeholder {
text-indent: 0;
transition: text-indent $duration;
}
&:focus {
@include placeholder {
text-indent: if($side == left, -$position, $position);
}
}
}
@mixin pl-slide-down($position: 5, $duration: 200ms) {
@include placeholder {
line-height: 1;
transition: line-height $duration;
}
&:focus {
@include placeholder {
line-height: $position;
}
}
}
@mixin pl-fade-out($duration: 200ms) {
@include placeholder {
opacity: 1;
transition: opacity $duration;
}
&:focus {
@include placeholder {
opacity: 0;
}
}
}
Использовать её очень просто. Достаточно подключить желаемый миксин к любому полю ввода или просто создать одно глобальное правило для всех пэйсхолдеров на странице:
// Для отдельных элементов
.pl-shift-right {
@include pl-shift( right );
}
.pl-fade-out {
@include pl-fade-out;
}
// Для всего остального
@include pl-shift( left );
Autoprefixer
Если вы не используете препроцессор и всё ещё не хотите, чтобы ваш исходный CSS файл превратился в кашу из префиксов для всех возможных браузеров, то обратите внимание на Autoprefixer. С его помощью чистый CSS можно сделать грязным (но уже в другом файле), добавив все необходимые префиксы ко всем свойствам. Чтобы заставить плагин работать с пэйсхолдерами достаточно использовать псевдоэлемент ::placeholder
:
::placeholder { color: orange; }
.input::placeholder { color: blue; }
После парсинга ваших стилей Autoprefixer создаст отдельный CSS файл, в котором пропишет все необходимые префиксы для всех указанных вами браузеров.
Что дальше
Как я уже писал выше, всё, что связано с применением стилей к плэйсхолдерам ещё не стандартизировано. Скоро это исправят. В спецификацию Selector Level 4 был добавлен псевдокласс :placeholder-shown
, который, наконец-то, приведёт к стандарту всю ту безумную смесь из псевдоклассов и псевдоэлементов, которая существует сейчас. Следить за поддержкой можно на caniuse (сейчас не поддерживается ни в одном браузере).
Применять стили с помощью :placeholder-shown
будет гораздо проще:
.input:placeholder-shown {
color: blue;
}
The ::placeholder pseudo-element allows styling the placeholder text of a form element. It can change from browser to browser.
The placeholder attribute is used to describe the expected value of an input field. Before entering a value, there is a short hint displayed in the field.
Placeholder texts are commonly aligned to the left in most browsers.
We use the text-align property to set the alignment of text in the placeholder.
In our snippet, we’ll demonstrate step by step how to center a placeholder text.
- Use a <form> element with action and method attributes.
- Use an <input> element with the type, class, «placeholder», name attributes.
<form action="/form/submit" method="POST">
<input type="email" class="emailField" placeholder="info@w3docs.com" name="email" />
</form>
- Set the text-align property to «center» for the input.
- Use ::-webkit-input-placeholder for Chrome, Opera, and Safari.
- Use :-moz-placeholder for Firefox 18-.
input {
text-align: center;
}
::-webkit-input-placeholder {
text-align: center;
}
:-moz-placeholder {
text-align: center;
}
Now, we can bring together the parts of our code.
Example of centering an input field’s placeholder text:
<!DOCTYPE html>
<html>
<head>
<title>Title of the document</title>
<style>
input {
text-align: center;
}
::-webkit-input-placeholder {
text-align: center;
}
:-moz-placeholder {
text-align: center;
}
</style>
</head>
<body>
<form action="/form/submit" method="POST">
<input type="email" class="emailField" placeholder="[email protected]" name="email" />
</form>
</body>
</html>
Result
Let’s see another example, where we use three <input> elements and use the text-align property set to «center», «right», and «left» respectively. In this example, we align both the input field’s placeholder and the placeholder value.
Example of aligning an input field’s placeholder and placeholder value:
<!DOCTYPE html>
<html>
<head>
<title>Title of the document</title>
<style>
input[type="email"] {
text-align: center;
}
input[type="text"] {
text-align: right;
}
input[type="tel"] {
text-align: left;
}
body {
text-align: center;
}
label {
display: block;
margin-bottom: 30px;
}
</style>
</head>
<body>
<form action="/form/submit" method="post">
<label>Center Alignment
<br>
<input type="email" placeholder="Email">
</label>
<label>Right Alignment
<br>
<input type="text" placeholder="Name">
</label>
<label>Left Alignment
<br>
<input type="tel" placeholder="Phone Number">
</label>
</form>
</body>
</html>
Now, we’ll demonstrate one more example, where our placeholder values are aligned to the center, right, and left, whereas the input starts from the left in all cases.
Example of aligning the placeholder text of an input field:
<!DOCTYPE html>
<html>
<head>
<title>Title of the document</title>
<style>
input[type="email"]::placeholder {
text-align: center;
}
input[type="text"]::placeholder {
text-align: right;
}
input[type="tel"]::placeholder {
text-align: left;
}
body {
text-align: center;
}
label {
display: block;
margin-bottom: 20px;
}
</style>
</head>
<body>
<h1>Placeholder Text Alignment</h1>
<form action="/form/submit" method="post">
<label>Center Alignment
<br>
<input type="email" placeholder="Email">
</label>
<label>Right Alignment
<br>
<input type="text" placeholder="Name">
</label>
<label>Left Alignment
<br>
<input type="tel" placeholder="Phone Number">
</label>
</form>
</body>
</html>
CSS псевдоэлемент ::placeholder
представляет собой текст placeholder (en-US) в <input>
или <textarea>
(en-US) элементах.
::placeholder {
color: blue;
font-size: 1.5em;
}
В ::placeholder
можно использовать только те CSS-свойства, которые разрешены в псевдоэлементе ::first-line
.
Примечание: В большинстве браузеров по умолчанию placeholder выглядит как полупрозрачный или светло-серый текст.
Синтаксис
Error: could not find syntax for this item
Примеры
Красный текст
HTML
<input placeholder="Введите что-нибудь!">
CSS
input::placeholder {
color: red;
font-size: 1.2em;
font-style: italic;
}
Результат
Зелёный текст
HTML
<input placeholder="Введите что-нибудь...">
CSS
input::placeholder {
color: green;
}
Результат
Проблемы доступности
Цветовой контраст
Контрастность
Текст placeholder обычно имеет более светлую расцветку и содержит информацию о том, какие введённые данные будут допустимы, но при этом не является текущими введёнными данными.
Важно обеспечить достаточный цветовой контраст между placeholder и фоном, чтобы люди со слабым зрением могли его прочитать, но при этом должна быть достаточная разница между введённым текстом и текстом placeholder, чтобы пользователь не путал их.
Коэффициент цветового контраста определяется путём сравнения яркости текста placeholder и цветом фона формы ввода. Чтобы соответствовать рекомендациям Web Content Accessibility Guidelines (WCAG), требуется соотношение 4.5:1 для основного текста и 3:1 для более крупного текста, например, заголовков. Крупный текст определяется как 18.66px и больше с жирным начертанием или 24px и больше с обычным начертанием.
- WebAIM: Color Contrast Checker
- MDN Understanding WCAG, Guideline 1.4 explanations
- Understanding Success Criterion 1.4.3 | W3C Understanding WCAG 2.0
Использование
Текст placeholder с высоким цветовым контрастом может быть воспринят как введённые данные. Текст placeholder исчезает, когда пользователь вводит что-либо в <input>
элемент. Эти обстоятельства могут помешать заполнить правильно форму, особенно людям с когнитивными проблемами.
Другой подход к представлению информации placeholder заключается в том, чтобы расположить её вне формы ввода в непосредственной близости от неё, а затем использовать aria-describedby
для программного связывания <input>
элемента с подсказкой.
В таком случае содержимое подсказки будет доступно даже в том случае, если что-то введено в форму. Большинство скринридеров используют aria-describedby
для чтения подсказок после того, как будет прочитан текст метки формы. Пользователь может отключить эту функцию, если дополнительная информация окажется ему ненужной.
<label for="user-email">Ваш email адрес</label>
<span id="user-email-hint" class="input-hint">Пример: jane@sample.com</span>
<input id="user-email" aria-describedby="user-email-hint" name="email" type="email">
- Placeholders in Form Fields Are Harmful — Nielsen Norman Group
Режим высокой контрастности Windows
Текст placeholder будет отображаться с теми же стилями, что и введённый пользователем текст при работе в режиме высокой контрастности Windows (en-US). Это вызовет затруднения с определением того какой текст был введён, а какой является placeholder.
- Greg Whitworth — How to use -ms-high-contrast
Метки
Placeholder не является заменой элемента <label>
. Без метки, которая программно связывается с формой с помощью for
и id
атрибутов, такие программы, как скринридеры не смогут анализировать элементы <input>
.
- MDN Basic form hints (en-US)
- Placeholders in Form Fields Are Harmful — Nielsen Norman Group
Спецификации
Specification |
---|
CSS Pseudo-Elements Module Level 4 # placeholder-pseudo |
Совместимость с браузерами
BCD tables only load in the browser
Смотрите также
- Псевдокласс
:placeholder-shown
, который позволяет применять стили к элементу с активным placeholder. - Связанные HTML-элементы:
<input>
,<textarea>
(en-US) - HTML-формы
Данное решение выполнено через псевдокласс :placeholder-shown
, который отображает текст подсказки, заданной атрибутом placeholder
.
Пример:
HTML:
<div class=«placeholder-form»> <div class=«placeholder-container»> <input type=«text» placeholder=» « /> <label>Фамилия</label> </div> <div class=«placeholder-container»> <input type=«text» placeholder=» « /> <label>Имя</label> </div> <div class=«placeholder-container»> <input type=«text» placeholder=» « /> <label>Отчество</label> </div> </div> |
Атрибут placeholder
является пустым, но он необходим, чтобы можно было использовать его псевдокласс:placeholder-shown
, при отсутвиии которого можно сдвинуть элемент куда угодно.
CSS:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
.placeholder-form { box-sizing: border-box; width: 320px; margin: 20px auto; } .placeholder-container { position: relative; width: 100%; margin-bottom: 20px; } .placeholder-container input { background-color: #FFF; border: 2px solid #BFE2FF; box-sizing: border-box; color: #000; font-size: 16px; line-height: 16px; height: 50px; outline: 0; padding: 0 20px; width: 100%; } .placeholder-container label { color: #000; font-family: Verdana, sans-serif; background-color: #FFF; font-size: 16px; line-height: 16px; padding: 5px 10px; pointer-events: none; position: absolute; transition: all 200ms; top: 12px; left: 10px; background-color: #FFF; } .placeholder-container input:focus + label, .placeholder-container input:not(:placeholder-shown) + label{ top: -10px; left: 10px; font-size: 11px; background-color: #BFE2FF; padding: 2px 10px; } |
- Опубликовано: 03.12.2020
- Рубрики: Формы
- Метки: CSS
- 9804 просмотра
Стилизация плэйсхолдеров
Атрибут placeholder
используется для создания подсказок внутри пустых полей ввода (теги <input>
и <textarea>
). В этой статье я рассмотрю способы стилизации плэйсхолдеров, а также, как сделать их более удобными в использовании.
Начнём с примера для тех, кто ещё не знает, что такое плэйсхолдер и как его использовать:
<input type="email" placeholder="example@gmail.com">
При разработке интерфейсов следует учитывать особенности поведения плэйсхолдеров. Текст плэйсхолдера исчезает, как только начинается ввод. Именно поэтому не стоит использовать их для передачи информации о самом поле ввода (сколько и какие именно символы оно должно содержать). Для данных целей лучше всего использовать тег <label>
или параграф с небольшой подсказкой. Подробнее об особенностях использования плэйсхолдеров можно почитать здесь.
Стилизация
Для стилизации плэйсхолдеров используются следующие правила:
::-webkit-input-placeholder { color: blue; } ::-moz-placeholder { color: blue; } /* Firefox 19+ */ :-moz-placeholder { color: blue; } /* Firefox 18- */ :-ms-input-placeholder { color: blue; }
Выглядит ужасно, не так ли? И на это есть причина — до сих пор CSS правила для плэйсхолдеров не были стандартизированы и имплементация в каждом браузере различная. Подробнее о всех необходимых префиксах можно узнать на caniuse.
Если вы используете CSS-препроцессор, то, скорее всего, для применения стилей к плэйсхолдерам вам будет удобнее всего написать простой миксин. Пример на Sass:
@mixin placeholder { &::-webkit-input-placeholder { @content; } &:-moz-placeholder { @content; } &::-moz-placeholder { @content; } &:-ms-input-placeholder { @content; } }
В зависимости от контекста миксин можно использовать как для глобального применения стилей, так и для отдельных элементов (опробуйте на SassMeister):
// Глобально для каждого поля ввода @include placeholder { color: blue; } // Для определённых полей ввода .input { @include placeholder { color: green; } }
Пример
Синий текст для плэйсхолдера (никогда так не делайте):
.blue-text::-webkit-input-placeholder { color: #2e8ece; } .blue-text:-moz-placeholder { color: #2e8ece; } .blue-text::-moz-placeholder { color: #2e8ece; } .blue-text:-ms-input-placeholder { color: #2e8ece; }
Поддерживаемые свойства
Не каждое CSS свойство можно использовать с плэйсхолдерами. Вот полный список поддерживаемых свойств:
font
и все связанные свойства (font-size
,font-family
и т.д.)background
и все связанные свойства (background-color
,background-image
и т.д.)opacity
text-indent
text-overflow
color
text-transform
line-height
word-spacing
letter-spacing
text-decoration
vertical-align
Анимации
Идеи анимаций принадлежит блогу html5.by.
Все следующие примеры написаны с использованием препроцессора Sass. К каждому прилагается ссылка на SassMeister, по которой вы сможете найти скомпилированный CSS код.
Скорее всего, вы захотите применять анимации к плэйсхолдерам при фокусе на поле ввода. Делается всё это достаточно просто. Достаточно всего несколько раз использовать написанный ранее миксин placeholder
:
.input { @include placeholder { // Стили для нормального состояния } &:focus { @include placeholder { // Стили после события focus } } }
Изменение прозрачности
Посмотреть на SassMeister
.input { @include placeholder { color: #aaa; opacity: 1; transition: opacity 300ms; } &:focus { @include placeholder { opacity: 0; } } }
Сдвиг вправо и влево
Посмотреть на SassMeister
Чем больше ширина поля ввода, тем больше должно быть значение свойства text-indent
. Для стандартного поля ввода будет достаточно 500px
, для более широких стоит подбирать вручную. От ширины поля ввода и значения text-indent
зависит скорость анимации. Для сдвига влево нужно использовать отрицательные значения, например -500px
.
.input { @include placeholder { text-indent: 0px; transition: text-indent 300ms; } &:focus { @include placeholder { text-indent: 500px; } } }
Сдвиг вниз
Посмотреть на SassMeister
Как и в прошлом примере анимация зависит от размеров воля ввода, но в этом случае внимание стоит обратить на высоту. Для подавляющего большинства полей ввода искомое значение line-height
будет находиться в пределах 100px
. К сожалению, с помощью свойства line-height
невозможно реализовать эффект сдвига вверх, так как свойство не принимает отрицательные значения.
.input { @include placeholder { color: #aaa; line-height: 15px; transition: line-height 300ms; } &:focus { @include placeholder { line-height: 50px; } } }
Всё вместе
Чтобы использовать код анимаций для плэйсхолдеров было приятно и удобно, можно написать небольшую библиотеку миксинов для любого препроцессора. Библиотека выглядит следующим образом (посмотреть на SassMeister):
@mixin placeholder { &::-webkit-input-placeholder {@content} &:-moz-placeholder {@content} &::-moz-placeholder {@content} &:-ms-input-placeholder {@content} } @mixin pl-shift($side: left, $position: 500px, $duration: 200ms) { @include placeholder { text-indent: 0; transition: text-indent $duration; } &:focus { @include placeholder { text-indent: if($side == left, -$position, $position); } } } @mixin pl-slide-down($position: 5, $duration: 200ms) { @include placeholder { line-height: 1; transition: line-height $duration; } &:focus { @include placeholder { line-height: $position; } } } @mixin pl-fade-out($duration: 200ms) { @include placeholder { opacity: 1; transition: opacity $duration; } &:focus { @include placeholder { opacity: 0; } } }
Использовать её очень просто. Достаточно подключить желаемый миксин к любому полю ввода или просто создать одно глобальное правило для всех плэйсхолдеров на странице:
// Для отдельных элементов .pl-shift-right { @include pl-shift( right ); } .pl-fade-out { @include pl-fade-out; } // Для всего остального @include pl-shift( left );
Autoprefixer
Если вы не используете препроцессор и всё ещё не хотите, чтобы ваш исходный CSS файл превратился в кашу из префиксов для всех возможных браузеров, то обратите внимание на Autoprefixer. С его помощью чистый CSS можно сделать грязным (но уже в другом файле), добавив все необходимые префиксы ко всем свойствам. Чтобы заставить плагин работать с плэйсхолдерами, достаточно использовать псевдоэлемент ::placeholder
:
::placeholder { color: orange; } .input::placeholder { color: blue; }
После парсинга ваших стилей Autoprefixer создаст отдельный CSS файл, в котором пропишет все необходимые префиксы для всех указанных вами браузеров.
Что дальше
Как я уже писал выше, всё, что связано с применением стилей к плэйсхолдерам ещё не стандартизировано. Скоро это исправят. В спецификацию Selector Level 4 был добавлен псевдокласс :placeholder-shown
, который, наконец-то, приведёт к стандарту всю ту безумную смесь из псевдоклассов и псевдоэлементов, которая существует сейчас. Следить за поддержкой можно на caniuse (сейчас не поддерживается ни в одном браузере).
Применять стили с помощью :placeholder-shown
будет гораздо проще:
.input:placeholder-shown { color: blue; }
На этом уроке вы узнаете, как заставить placeholder не исчезать, а переместится наверх при заполнении поля формы.
HTML разметка
Форма состоит из двух текстовых полей и кнопки «Подписаться». Для создания кнопки так же используется поле input, но с типом «submit».
<div class="container">
<h2>Premium Subscription</h2>
<form>
<div class="inputBox">
<<input type="text" name="" required="required">
<span>Full Name</span>
</div>
<div class="inputBox">
<input type="email" name="" required="required">
<span>Email Address</span>
</div>
<div class="inputBox">
<input type="submit" value="Subscribe" name="">
</div>
</form>
</div>
CSS стили
Поместим нашу форму в белый контейнер и выровняем по центру экрана.
@import url('https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;600;700;800;900&display=swap');
*{
margin: 0;
padding: 0;
font-family: 'Poppins', sans-serif;
}
body{
display: flex; / * отображать как гибкий контейнер * /
justify-content: center; / * горизонтальное выравнивание * /
align-items: center; / * вертикальное выравнивание * /
flex-direction: column; / * направление главной оси * /
min-height: 100vh; / * на всю высоту экрана * /
background: linear-gradient(45deg,#6190e8,#a7bfe8); / * градиентный общий фон * /
}
.container{
position: relative; / * относительное позиционирование * /
padding: 70px 40px; / * поля, чтобы текст не прилипал к краям * /
background: #fff; / * цвет фона * /
border-radius: 20px; / * скругление углов * /
box-shadow: 0 5px 25px rgba(0,0,0,0.2);/ * тень у блока * /
}
Далее красиво оформим поля формы.
.container h2{
color: #111; / * цвет заголовка * /
margin-bottom: 45px; / * отступ снизу * /
line-height: 1em; / * вертикальное выравнивание * /
font-weight: 500; / * толщина шрифта * /
padding-left: 10px; / * горизонтальное выравнивание * /
border-left: 5px solid #e91e63; / * красная линия слева от заголовка * /
}
.inputBox{
position: relative;
width: 300px; / * ширина поля * /
height: 46px; / * высота поля * /
margin-bottom: 35px; / * отступ снизу * /
}
.inputBox:last-child{
margin-bottom: 0; / * обнуление отступа под вторым полем * /
}
.inputBox input{
position: absolute;
top: 0;
left: 0;
width: 100%;
border: 1px solid #111; / * сплошная обводка поля * /
background: transparent; / * прозрачный фон * /
padding: 10px;
border-radius: 4px;
box-sizing: border-box;
outline: none;
font-size: 16px;
color: #111;
font-weight: 300;
}
.inputBox span{
position: absolute;
top: 1px;
left: 1px;
display: inline-block; / * отображать как строчно-блочный элемент * /
padding: 10px;
font-size: 16px;
color: #111;
font-weight: 300;
transition: 0.5s; / * плавный переход * /
pointer-events: none;
}
На картинке ниже, стрелочками обозначены Full Name и Email Address. Это и есть placeholder, что значит заполнители. Когда пользователь начинает заполнять форму, эти надписи исчезают. В этом нет ничего страшного, но было бы немного комфортнее, если надписи остаются в поле зрения.
Перемещение placeholder-ов.
В состоянии фокуса, произошло перемещение вверх.
.inputBox input:focus ~ span,
.inputBox input:valid ~ span{
font-size: 12px;
color: #111;
transform: translateX(-10px) translateY(-32px); / * перемещение placeholder-ов * /
}
Стилизация кнопки
.inputBox input[type="submit"]{
background: #2196f3;
color: #fff;
border: none;
max-width: 120px;
cursor: pointer;
font-weight: 500;
}
.inputBox input[type="submit"]:hover{
background: #e91e63;
}
Посмотрите пример на CodePen
-
Создано 24.09.2021 10:10:43
-
Михаил Русаков
Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!
Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.
Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления
Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.
Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):
-
Кнопка:
Она выглядит вот так:
-
Текстовая ссылка:
Она выглядит вот так: Как создать свой сайт
- BB-код ссылки для форумов (например, можете поставить её в подписи):
От автора: приветствую вас в нашей серии уроков CSS от А до Я! В этой серии я расскажу вам про CSS значения и свойства, начинающиеся с различных букв алфавита. Иногда обучающего ролика бывает недостаточно, и в этой статье я дам вам пару быстрых советов по стилизации плейсхолдеров.
Видеоурок и его текстовую версию по псевдоэлементам можно посмотреть по ссылке.
P значит плейсхолдер
Для создания сложных дизайнерских решений без лишнего раздувания разметки несемантическими элементами отлично подходят псевдоэлементы :before и :after. Другие псевдоэлементы типа :first-line и :first-letter позволяют стилизовать отдельные части элементов, которые не помечены в разметке документа.
В видеоуроке мы рассмотрели множество псевдоэлементов, однако мы не разобрали псевдоэлемент, позволяющий стилизовать текст в плейсхолдерах. Исправим же это упущение.
Как выбрать плейсхолдер
Представим следующий код:
Практический курс по верстке адаптивного сайта с нуля!
Изучите курс и узнайте, как верстать современные сайты на HTML5 и CSS3
Узнать подробнее
<input class=«name-field» type=«text» placeholder=«Enter your name»> |
Цвет вводимого текста можно сделать красным:
.name—field { color: red; } |
Также это поле можно было бы найти и стилизовать по атрибуту плейсхолдера:
input[placeholder=«Enter your name»] { color: red; } |
Однако так мы стилизуем вводимый текст, а не текст плейсхолдера. Тут нам поможет несколько селекторов с вендорными префиксами псевдоэлемента плейсхолдер.
::—webkit—input—placeholder { color: red; } :—moz—placeholder {/*Firefox 18-*/ color: red; } ::—moz—placeholder {/*Firefox 19+*/ color: red; } :—ms—input—placeholder { color: red; } |
Практический курс по верстке адаптивного сайта с нуля!
Изучите курс и узнайте, как верстать современные сайты на HTML5 и CSS3
Узнать подробнее
Вы можете сказать, что здесь код повторяется, однако другого более чистого способа просто нет. Код ниже работать не будет:
::—webkit—input—placeholder, :—moz—placeholder, ::—moz—placeholder, :—ms—input—placeholder { color: red; } |
Чтобы применить стили внутри фигурных скобок, браузер должен «понимать» каждый селектор, разделенный запятой.
Стилизация плейсхолдера с помощью Sass
Чтобы не повторять CSS код, можно написать Sass миксин. Миксин ниже я использую в 99% своих проектов:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
@mixin input—placeholder { ::—webkit—input—placeholder { @content; } :—moz—placeholder {/* Firefox 18- */ @content; } ::—moz—placeholder {/* Firefox 19+ */ @content; } :—ms—input—placeholder { @content; } } /* применение */ @include input—placeholder { color: red; } |
С его помощью я могу стилизовать плейсхолдеры во всех браузерах с помощью всего одного вызова @include, что позволяет сократить код и сделать его удобным для дальнейшего обслуживания.
Внимательно смотрите на объявления, когда стилизуете плейсхолдеры
В браузерах IE стили для самого поля формы могут переписывать стили плейсхолдера.
:—ms—input—placeholder { color: red; } input[type=«text»] { color: blue; /* В IE цвет плейсхолдера будет синий */ } |
Задавайте для стилей плейсхолдера в IE большую специфичность, чтобы они правильно применялись. Тут даже можно прибегнуть к !important, но будьте осторожны с таким мощным инструментом.
Не забывайте про прозрачность плейсхолдеров
В Firefox плейсхолдеры имеют по умолчанию прозрачность opacity примерно в 0.5. Таким образом, если сделать текст плейсхолдера красным, то на выходе вы получите приглушенный цвет. Или же можно задать свойство opacity: 1. В этом случае не поможет даже Normalize.css. Если в вашем проекте плейсхолдеры должны быть непрозрачными, помните об этом!
Автор: Guy Routledge
Источник: //www.sitepoint.com/
Редакция: Команда webformyself.
Практический курс по верстке адаптивного сайта с нуля!
Изучите курс и узнайте, как верстать современные сайты на HTML5 и CSS3
Узнать подробнее
PSD to HTML
Практика верстки сайта на CSS Grid с нуля
Смотреть