The Wayback Machine - https://web.archive.org/web/20090826040124/http://cssmake.ru:80/component/content/article/7/108.html

Красивые css input (поля ввода)

( 0 - user rating )

Данная статья посвященна тому, как с помощью одного лишь css и без использования скриптов научится создавать красивые поля ввода, поля выбора (input,select). Для этого нам понадобится не только знания css, но и изображения, которые будут служить фоном полей. К сожалению, на чистом css пока еще невозможно делать такие вещи как закругление углов, поэтому нам остается два выбора: либо прибегать к использованию скриптов, либо пытатся сделать это при помощи css и фоновых изображений. У каждого способа конечно же есть свои недостатки и преймущества. Так как данная статья не о скриптах, мы на них и не будем останавливатся, детально рассмотрим метод с использованием css, для которого мы можем определить пусть не все, но многие преймущества и недостатки.

Недостатки:

- Наверно самым большим недостатком использования фона в качестве оформления поля ввода является его непрактичность. В нынешнее время большинство сайтов в сети интернет используют cms, в которых все поля ввода генерируются без участия человека, веб-мастеру доступен лишь css для установки стилей элементов. Поэтому очень часто бывает просто невозможно использовать дополнительные контейнеры (div), чтоб создать так называемую css обвязку для css input. Выходов из этой ситуации несколько: можно отказатся от красивых css input и select и для оформления использовать стандартные css свойства, можно указать одинаковую фиксированную ширину и высоту для всех css input и select, тогда можно использовать одно изображение для оформления, а можно использовать css input в связке с кнопкой ввода, что немного развяжет нам руки и позволит сделать красивые, относительно эластичные, поля ввода. Почему я их назвал "относительно эластичные", Вы поймете дальше, при рассмотрении примеров.

Преймущества:

Преймущество у этого способа одно, но самое главное - это позволит нам избежать использования скриптов для оформления.

Создавать красивый css input мы будем с помощью следующего изображения:

css input

А для создания формы поиска мы используем это изображение:

css input

Красивый css input без скриптов

Первым шагом на пути к красивому и оригинальному input у нас будет установка базовых значений css стилей...
input{
width:206px;
height:24px;
border:none;
background:url('/images/sample_input.gif') 0 0 no-repeat;
}
<input type="text" />

Как видите, мы указали основные css стили для нашего input. Обязательно нужно установить ширину и высоту равными размерам фонового изображения. А также мы обнулили значение свойства border, так как по умолчанию у всех полей ввода установлена граница border. Ну и конечно же указали путь к изображению, которое будет использоватся в качестве фона для css input. Посмотрим, что из этого получилось:

Выглядит неплохо, правда? А попробуйте набрать текст в поле. Как видите выглядит не очень. Поэтому второе, что мы сделаем - это установим свойства для шрифта и внутренние отступы для текста от границ input.

input{
font-family:Arial, Helvetica, sans-serif;
font-size:12px;
line-height:normal;
color:#A7ADB6;
padding:4px 10px 4px 10px;
border:none;
width:186px;
height:24px;
background:url('/images/sample_input.gif') 0 0 no-repeat;
}
<input type="text" />

Вот теперь, если ввести текст, то все выглядит хорошо. Как Вы могли заметить, по сравнению с первым вариантом css для input, изменились значения ширины и высоты. Так как мы применили внутренние отступы (padding) для поля ввода, к ширине и высоте input автоматически прибавились значения указанные в свойстве padding, поэтому мы уменьшили размеры, чтоб сумма их стала такой же как и раньше.

Хочу повторить, что этот способ подходит, если все поля ввода, для которых он применяется, будут одинаковых размеров.
Если же на сайте ширина input будет изменятся динамически, то этот способ не подходит.

Эластичный красивый css input

Если на сайте есть возможность "обвязать" input контейнерами div, то с его красивым оформлением проблем вообще не возникает. Единственная большая проблема - это вес страницы, так как для каждого поля ввода прийдется использовать до 8 контейнеров div. Почему до 8? - потому, что для самой сложной css обвязки необходимо максимум 8 слоев.

На нашем сайте существует статьи, в которых подробно описываются способы создания css обвязки, поэтому в данной статье мы на этом останавливатся подробно не будем, Вы можете самостоятельно ознакомится с этими статьями: Создание простой css обвязки блока., Создание css обвязки блока на градиентном фоне.. Я лишь покажу, как применить это в случае с полями ввода.

Изображения для эластичного css input

Для того, чтоб сделать эластичное поле ввода, необходимо разрезать представленное выше изображения для фона на 3 части:
  1. sample_input_02.gif - изображение для заполнения input по всех ширине -
  2. sample_input_01.gif - левый уголок для поля ввода -
  3. sample_input_03.gif - правый уголок для поля ввода -

Стили для обвязки css input

.fill-input{
background:url('/images/sample_input_02.gif') 0 0 repeat-x;
width:100%;
border:none;
height:24px;
padding:4px 0;
}
.left-input{
background:url('/images/sample_input_01.gif') left top no-repeat;
width:50%;
}
.right-input{
background:background:url('/images/sample_input_03.gif') right top no-repeat;
padding:0 14px 0 16px;
}
.right-input input{
font-family:Arial, Helvetica, sans-serif;
font-size:12px;
line-height:normal;
color:#A7ADB6;
padding:0 0 0 10px;
border:none;
width:95%;
height:16px;
background:none;
}
<div class= "left-input">
<div class= "right-input">
<div class= "fill-input">
<input type="text" />
</div>
</div>
</div>
Примечание:

В приципе все должно быть понятно, но хотелось бы остановится на некоторых моментах:

.fill-input {width:50%} - это свойство указывает, какой будет ширина нашего input. Естественно можно использовать как точные значения, так и значения в других доступных измерениях.

.right-input input {width:95%} - так как для отступа слева от обвязки используется padding слева, то ширину равную 100% использовать нельзя, поэтому для отступа справа мы установили ширину равную 95%.

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

Эластичная форма поиска

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

Разрезаем изображение на составные части

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



Хочу заметить, что удленения изображения не приведет к сильному росту размера, так как используется формат .gif, у которого есть свойство сжимать размер, если в изображении есть повторяющиеся части.

css стили для формы

.input-text{
font-family:Arial, Helvetica, sans-serif;
font-size:12px;
line-height:normal;
color:#A7ADB6;
padding:4px 0 0 10px;
border:none;
width:210px;
height:20px;
vertical-align:top;
background:url('/images/sample_form_01.gif') 0 0 no-repeat;
}
.input-button{
background:url('/images/sample_form_02.gif') 0 0 no-repeat;
width:130px;
height:24px;
border:0;
vertical-align:middle;
}
<input class="input-text" type="text" /><input class="input-button" type="button" />

Следует отметить, что для css input нужно использовать vertical-align:top, а для кнопки vertical-align:middle - это позволит выровнять по вертикали эти два элемента.

В итоге мы имеем форму, в которой можно изменять ширину поля ввода.

Выводы:

В данной статье мы рассмотрели 3 способа оформления для css input. У каждого из способов есть свои плюсы и минусы, но для создания красивых форм без использования криптов эти способы наиболее оптимальные.

Комментарии  

 
+20 # Dizel 2009-02-13 11:25 Спасибо за эластичность input'ов Ответить | Ответить с цитатой | Цитировать
 
 
+2 # booper 2009-02-19 15:00 Это все хорошо, но бэкраунд "уежает" если само поле инпуть длинее чем фон Ответить | Ответить с цитатой | Цитировать
 
 
-1 # ni_x 2009-02-19 15:46 Это все хорошо, но вопрос не правильно задан.

Если имеется ввиду пример "ластичная форма поиска", то оно так и должно быть, потому что даже в css прописано no-repeat для фона. Поэтому возмущения ваше мне не понятны. Если я не правильно понял, тогда уточните вопрос.
Ответить | Ответить с цитатой | Цитировать
 
 
0 # booper 2009-02-19 16:11 Это не возмущение, разочарование.
Я искал решение для изменение search без JS. Но и это не подходит. Будем искать дальше
Ответить | Ответить с цитатой | Цитировать
 
 
-5 # ni_x 2009-02-19 17:55 Мне жаль. Тут представлены не все способы "для изменения search без JS" , только парочка. Удачи в поисках. Ответить | Ответить с цитатой | Цитировать
 
 
0 # AlexP 2009-07-21 17:18 Эластичный красивый css input - ничего никуда не уезжает.
хоть в дивы обертывайте, хоть в таблицу трехячеечную. прокручиваться будет только вон середины
Ответить | Ответить с цитатой | Цитировать
 
 
0 # booper 2009-02-19 16:26 небольшая ошибочка :
.right-input{
background:background:url('/images/sample_input_03.gif') right top no-repeat;
padding:0 14px 0 16px;
}
Ответить | Ответить с цитатой | Цитировать
 
 
+2 # ni_x 2009-02-19 17:56 спасибо исправлю. Ответить | Ответить с цитатой | Цитировать
 
 
-3 # solid 2009-03-06 01:10 так и не исправили. Ответить | Ответить с цитатой | Цитировать
 
 
-2 # booper 2009-02-19 18:04 Уже победил, будет интересно. Выложу Ответить | Ответить с цитатой | Цитировать
 
 
-1 # ni_x 2009-02-19 21:34 конечно интересно. Всегда интересно. Ответить | Ответить с цитатой | Цитировать
 
 
-2 # solid 2009-03-06 01:11 Сижу через сафари, а он подсвечивает активные поля, некрасиво смотрится.
)
Ответить | Ответить с цитатой | Цитировать
 
 
0 # ni_x 2009-03-06 13:50 Да, смотрится не очень. Но это уже проблема браузера и я с этим ничего поделать не смогу.
А вообще самое главное, что при таких далеко не стандартных эффектах не разлазится.
Ответить | Ответить с цитатой | Цитировать
 
 
-3 # qik 2009-04-10 16:11 Нужно делать как у Темы Ответить | Ответить с цитатой | Цитировать
 
 
-4 # alex 2009-03-07 18:30 ээх, а вы не пробовали смотреть на свой инпут в исчадии ада в ИЕ? Если ввести текст больший длины инпута. Ответить | Ответить с цитатой | Цитировать
 
 
0 # Арчик 2009-04-18 13:54 Цитирую alex:
ээх, а вы не пробовали смотреть на свой инпут в исчадии ада в ИЕ? Если ввести текст больший длины инпута.

Да как это профиксить ?
Ответить | Ответить с цитатой | Цитировать
 
 
+2 # Жир 2009-04-27 21:47 Цитирую Арчик:
Цитирую alex:
ээх, а вы не пробовали смотреть на свой инпут в исчадии ада в ИЕ? Если ввести текст больший длины инпута.

Да как это профиксить ?


ставь background-attachment: fixed; и потом подправь background-position
Ответить | Ответить с цитатой | Цитировать
 
 
+1 # _bm 2009-04-22 16:03 И всё таки это лучший из найденных мной вариантов "красивого" инпута! Спасибо Ответить | Ответить с цитатой | Цитировать
 
 
+2 # Ljowuk 2009-06-13 22:00 как background-position подправить, потому что "убегает" в IE ( Ответить | Ответить с цитатой | Цитировать
 
 
+1 # ni_x 2009-06-14 19:57 ставье фон на дивку, а в дивке уже инпут без бордера, если беграунд ставить на инпут тогда будет уезжать. Ответить | Ответить с цитатой | Цитировать
 
 
0 # Илья 2009-08-01 15:05 Особое спасибо за эластичный инпут. Но у меня никак не получается изменить input="file". Есть ли способ? Ответить | Ответить с цитатой | Цитировать
 
 
0 # booper 2009-08-01 17:33 Способы есть, но как показала практика, они не адекватны. Вот посмотри пример :
http://valums.com/wp-content/uploads/ajax-upload/demo-jquery.htm
Я уже давно использую, намного лучше и быстрее, ставишь див а в нем уже рисуешь любой контент, и кнопка загрузки будет выглядеть везде одинаково. Вот сайт проекта
http://valums.com/ajax-upload/
Ответить | Ответить с цитатой | Цитировать
 
 
0 # tyta 2009-08-05 23:49 Спасибо большое автору! Я решил проблему с IE закинув БГ поляв див и наложил на него input залитый фоном в прозрачном gif размером 1 px. Ответить | Ответить с цитатой | Цитировать
 

Добавить комментарий


Защитный код
Обновить

odnaknopka.ru/kolyan.cz
Morty Proxy This is a proxified and sanitized view of the page, visit original site.

Переводы


Продам Кредитов САР очень дешево.
предлагаем ресепшн

Selectutorial

Селекторы в действии

listutorial

Изображения для маркеров списка

cоздать функциональный сайт продуктивно в Санкт-Петербурге
статьи
Morty Proxy This is a proxified and sanitized view of the page, visit original site.