Главная > Формы, CSS/Style Sheets > Разработка и оформление пользовательских форм авторизации
Разработка и оформление пользовательских форм авторизации30 октября 2012, 11:30. Разместил: Design FactoRy |
Привет, друзья! Сегодня мы хотим предложить вам очередное CSS-руководство! После всевозможных переключателей и выпадающих списков, позвольте нам перейти к разработке форм. В целом, мы будем создавать формы авторизации. Сегодня практически каждый веб-сервис, приложение, игра и так далее предлагает (а иногда даже требует) нам подписку, что означает необходимость иметь какую-нибудь форму, посредством которой пользователь регистрируется или авторизуется. Учитывая это, мы попробовали разработать несколько разных форм авторизации, некоторые из которых были созданы под вдохновением от дизайн-идей с просторов интернета. Нашей целью было придать каждой из них какую-то особенность. Кое-что перед тем, как начать: * В отрывках CSS-кода вы не увидите браузерных префиксов, но все они есть в исходниках. * Цель данного руководства заключается в том, чтобы показать вам потенциал CSS, в особенности CSS3, и поэтому рендер в IE8 и ниже может отличаться. Если вы планируете организовывать поддержку этих браузеров, постарайтесь предоставить запасные варианты. * Мы не используем на теге формы атрибуты вроде action или method, так как наша цель – сосредоточиться на дизайне. * Здесь мы используем box-model, где [ширина]=[ширина элемента]+[отступы]+[границы]. Эту модель можно активировать следующим отрывком кода:
Пару слов о дружественности с пользователем Вам нужны формы для различных ситуаций, где взаимодействие с пользователем и вашим приложением неизбежно: авторизация, комментарии, обратная связь и многие другие случаи. Если вы что-то напартачите со своей формой, будьте уверены, что вы напартачили и с пользователем. С учетом этого было выработано несколько правил, которые вам следует соблюдать для того, чтобы сделать свои формы лучше, более дружественными с пользователями. Давайте ознакомимся с небольшой подборкой. * Ярлыки: ярлыки очень важны. Мы не говорим сейчас о теге 'label', мы говорим о том, что нужно четко и ясно дать пользователю понять назначение того или иного поля. Давайте поясним: все поля одинаковы. И только потому, что пользователь видит ярлыки, он понимает, что нужно вписывать в какое поле. Используйте ярлыки, или иконки, или что угодно, лишь бы пользователь понял все сразу и точно. * Поля: чем более привлекательны ваши поля ввода, тем приятнее на них смотреть и, соответственно, тем более довольным останется пользователь. Создайте немного пространства вокруг полей ввода. Не встраивайте их в контент. Поля ввода должны быть достаточно большими (они должны хотя бы вмещать в себя то, что в них заполняют). Не делайте поля ввода миниатюрными, вынуждая пользователей перемещаться по ним при помощи клавиш стрелок. * Ярлыки + поля: создайте привязку между вашими полями ввода и соответствующими ярлыками. К ярлыкам примените атрибут 'for'. Нажимать на поля ввода текста очень просто даже на мобильных устройствах. Нажатие же на чекбокс может вызвать осложнения, особенно если речь идет о мобильной навигации. Если вы реализуете возможность кликать по ярлыку, чтобы поставить отметку в чекбоксе, вы в значительной степени облегчите жизнь пользователей. Также рекомендуем вам делать поля ввода достаточно большими, чтобы их было хорошо видно при просмотре через мобильное устройстве. * Положения: CSS позволяет нам определять элемент по его текущему положению: hovered, focused, active, default и т.д. Важно показать пользователю, что он наводит курсор на что-то, на что можно кликнуть, либо выделить то, что он может заполнить. * Кнопка подтверждения: кнопка подтверждения – это последний этап при заполнении формы. Она должна быть хорошо видна. Не забывайте про элементы, побуждающие к действию. Не используйте тот же стиль для кнопки подтверждения, сделайте ее веселее, привлекательнее! Никогда не используйте надпись «Submit»! Она смущает! Если это форма авторизации, то используйте соответствующую надпись «Sign in» или «Log in». Если же это форма комментариев, используйте что-нибудь в жанре «Опубликовать» или «Оставить комментарий». Сообщайте пользователю, для чего предназначена кнопка. * Атрибуты и поля ввода в HTML5: HTML5 предоставляет нам множество удобных новых атрибутов и полей ввода, что в значительной степени облегчает нам работу с формами. Используйте эти атрибуты и поля ввода по необходимости и, конечно же, не забывайте о запасных вариантах для браузеров без поддержки. Подробнее об этом вы можете прочесть на Wufoo. Итак, мы рассказали вам всю нужную информацию! Пора приступать к разработке форм, друзья! Пример 1 Как мы говорили ранее, мы постарались делать каждую форму отличной от других, придать им специфику. В данном примере мы рассмотрим кнопку подтверждения, которая имеет закругленные углы и создает впечатление независимости от экрана. Разметка
Итак, первый наш пример будет довольно миниатюрным, здесь мы не будем использовать ярлыки. Но нам, конечно же, необходимо рассказать пользователям о том, что им следует вписывать в эти поля, поэтому мы используем… иконки! Маленькие теги «i». Примечание: как обычно, здесь мы не будем рассказывать о том, как использовать иконические шрифты вроде FontAwesome. Если вы хотите изучить эту тему, то можете проверить примеры на официальном веб-сайте. У нас есть два контейнера, которые будут оборачивать поле ввода и иконку. Кнопка подтверждения будет в отдельном контейнере, и мы используем «button» вместо «input» с иконкой внутри. Мы также задействуем заглушки для того, чтобы все было еще больше понятным для поддерживаемых браузеров. Больше информации по поводу браузерной поддержки атрибута placeholder вы можете найти на сайте CanIUse.com. CSS-код Давайте начнем со стилизации самого элемента формы. Форма будет основной оболочкой наших демо, поэтому задайте ей ширину и центрируйте при помощи полей.
Важно: мы выставили ей относительное позиционирование для того, чтобы кнопку подтверждения позиционировать абсолютно. Мы делаем то же самое с контейнерами .field для того, чтобы также иконки расположить абсолютно. Говоря об иконках, давайте сразу и сделаем их.
Мы добавляем небольшую линию в правую сторону иконки, выставив правую границу и тень блока. Так как мы хотим поиграть с их цветами для положений :hover и :focus, мы задаем им плавный переход. Прибавка «pointer-events: none» позволяет нам кликать по области иконки и переносить фокус на поле ввода, которое расположено ниже (то есть, мы как будто кликаем по самому полю). Теперь нам нужно задать стилизацию полям ввода:
Нам нужно удостовериться в том, что ни иконка, ни кнопка ввода не перекрывают текст. Это можно сделать, задав полю ввода хорошие отступы. Мы также выставляем нижнее поле первому полю ввода для того, чтобы избежать перекрытия второго поля. Перед тем, как пойти дальше, давайте зададим некоторую стилизацию для положений при наведении и при активном положении.
Здесь важно отметить две вещи: мы используем родственный селектор (~) для того, чтобы изменить цвет иконок при взаимодействии с полями ввода: светло-голубой для положения при наведении, темно-синий для активного положения. И для браузера Chrome мы исключаем контур. Последнее, что нам нужно оформить, это кнопка подтверждения. По причине не очень привлекательного наложения (чертов параметр z-index), нам пришлось обернуть её в контейнер для того, чтобы все работало. Мы, вероятно, можем убрать этот контейнер, но тогда нам придется прибегнуть к другим хитрым CSS-трюкам, а нам это ни к чему.
Здесь все довольно просто: мы создаем окружность, и располагаем ее поверх нашей формы, немного правее. Тени блока помогут акцентировать этот эффект наложения. Проблема: тени блока акцентируют этот эффект наложения, но они также могут и испортить его. На самом деле, мы можем видеть тень у рамки формы (пространство между полями и правым отступом у формы). В целом, мы можем скрыть эти тени масками с тем же фоновым цветом формы. И работа эта предназначена для псевдо-элемента!
У нас есть три тени, которые нужно скрыть, так как наш окружный элемент находится в месте пересечения пространства между полями и правым отступом от формы. Мы располагаем первую поверх окружного элемента. И посредством параметра box-shadow мы имитируем две другие маски. Нам кажется, что это довольно сложно объяснить, поэтому мы рекомендуем вам открыть ваш инструмент для разработки и отключить строку box-shadow на .submit:after для того, чтобы понять, что здесь происходит. Последнее, но не менее важное, это сама кнопка подтверждения:
Наконец, мы оформляем положения кнопки при наведении, фокусировки и активном положении (нажатое состояние):
Все довольно просто: сплошной цвет для положений при наведении и фокусировке. Но погодите, здесь ведь больше! Так как мы используем градацию при стандартном положении, и градации не могут плавно перейти в сплошной текст, браузер сначала отключает градацию, потом применяет фоновый цвет. Такое поведение вызывает вспышку белого цвета, когда вы наводите на кнопку, что, как нам кажется, выглядит классно! Как будто вспышка света! Пример 2 Следующий пример не такой простой, и предусматривает некоторые новые опции: кнопку «Sign in with Twitter», и переключатель «Show password». Здесь нам потребуется некоторый код javascript. Разметка
Здесь мы будем использовать заголовок. Мы использовали h1, но вы можете использовать что захотите. Мы также использовали ярлыки, привязанные к полям ввода посредством атрибута 'for'. CSS-код Давайте начнем с того, что зададим некоторые основные стили всей форме:
Мы создадим полу-прозрачную границу, применив тени блока. Теперь, когда мы задали нашей форме базовую стилизацию, давайте поработаем над заголовком. В заголовке у нас три разных стиля: bold (полужирный), caps (заглавные буквы) и dark grey (темно-серый); bold (полужирный), caps (заглавные буквы) и orange (оранжевый), а также light (уточненный), low (прописные буквы) и light grey (светло-серый). Итак, основной стиль + 2 добавочных:
Далее мы используем два параграфа, которые будут расположены рядом друг с другом. Каждый будет занимать 50% доступного пространства в элементе 'form\ и, благодаря “border-box” box-sizing, отступы будут высчитываться внутри этих 50%. Поэтому мы можем создать промежуток между этими двумя элементами.
Наши оболочки выставлены. Давайте стилизуем элементы внутри них! У нас есть ярлык и поле ввода. В данном примере иконка внутри ярлыка:
Примечание: использование cursor: pointer на ярлыках помогает пользователям понять, что они могут кликнуть по этому элементу. Это очень важный момент.
Не забудьте о положениях при наведении и фокусировании:
Посмотрите, как мы используем родственный селектор (~) для того, чтобы запустить положение hover у полей ввода тогда, когда мы наводим курсор на ярлыки. Круто, не правда ли? Теперь, что касается кнопок подтверждения. Но погодите, так как они обе плавают в собственном контейнере, нам ведь нужно применить к ним clearfix. Не забыли, как мы должны это делать?
Обе кнопки имеют в ширине 49%, а также левые/правые поля, что позволяет создать между ними небольшой промежуток. Теперь мы прибавим к ним положение при наведении (hover) и активное положение.
Благодаря относительному позиционированию, мы можем применить top: 1px к кнопкам в активном положении для того, чтобы они создавали впечатление, будто мы их нажимаем. Важно: для браузеров, которые не поддерживают box-shadow (а такие все еще остались), мы используем изменение в background-color. Класс 'no-boxshadow' будет применяться к HTML посредством Modernizr в случае, если браузер не поддерживает тени блоков. Это очень хороший пример того, как мы можем быстренько создать запасной вариант для старых браузеров:
javascript-код Эй, не забыли ли мы о нашей маленькой функции отображения пароля? Как раз ей мы сейчас и займемся! Для начала давайте выясним, знали ли вы, что мы не можем изменить атрибут 'type' у элемента ввода? Невозможно! Для того, чтобы сделать надпись 'show password' переключателем, нам нужно удалить имеющееся поле пароля, и вместо него создать поле текстового ввода. Мы нашли небольшой сниппет от Aaron Saray, который поможет нам справиться с этой задачей. Давайте посмотрим:
Что же выполняет данный скрипт? Несколько вещей: Он обозначает все элементы ввода классом .showpassword. Создает новый контейнер (.opt). Внутри этого контейнера он создает чекбокс с ярлыком, привязанным к нему. Он вставляет контейнер после родительского элемента поля .showpassword. Когда по чекбоксу производится клик, он удаляет элемент ввода .showpassword, и создает вместо него еще один, но уже с соответствующим атрибутом 'type'. Давайте не будем забывать о стилизации чекбокса и нового ярылка.
Последнее, но не менее важное то, что нам нужно добавить несколько строк кода jQuery, чтобы изменить иконку тогда, когда в чекбоксе будет стоять отметка! Просто очень просто, но невероятно эффективно!
Пример 3 Этот пример был создан под вдохновением от старой работы от Virgil Pana на Dribbble. К сожалению, он, по всей видимости, убрал эту работу с сайта, поэтому мы не сможем показать вам оригинальную идею. В любом случае, вы наверное догадались, что данный пример наглядно показывает нам, как можно создать невероятный световой эффект при помощи CSS. Разметка
Посмотрите, как мы представляем новую функцию в этой форме: опция 'Remember Me'. Это нечто конкретное для форм авторизации, так как эта опция позволяет приложению запоминать авторизовавшихся пользователей. CSS-код
Тень под формой авторизации выглядит особенным образом из-за отрицательного радиуса. Мы можем примерно так использовать тень. Давайте немного углубимся в структуру нашей формы. Что касается полей, то здесь мы используем два тега p, обволакивающих ярлык и элемент ввода, оба из которых плавающие. Это означает, что нам нужно к нашим контейнерам применить clearfix (смотрите предыдущий пример). Давайте добавим стилизацию к нашим ярлыкам и полям ввода текта и пароя, а также доведем до ума их положения при наведении и фокусировании:
Теперь, когда у нас есть привлекательные поля ввода, нам нужно создать небольшой чекбокс для опции 'Remember Me', а также кнопку подтверждения. Эти две вещи будут выравнены друг за другом:
Мы воспользуемся расширенными CSS-селекторами для их определения, но вы можете использовать класс, если хотите (либо если вам приходится, для поддержки устаревших браузеров). В любом случае, давайте приступим к разработке чекбокса и его ярлыка:
Так как данный ярлык сильно отличается от других, нам нужно изменить пару вещей, чтобы он был полностью корректен. Лучше всего будет сначала исключить все ранее выставленные стили. Что касается чекбокса, то мы добавляем маленькое поле к его правой стороне, чтобы ярлык к нему не «прилипал», а также немного подправим вертикальное выравнивание. Наконец, наша кнопка подтверждения с положением при наведении курсора:
Но где же обещанный световой эффект? Итак, друзья, давайте теперь им и займемся. Нам понадобятся три элемента: * один для линии градации от верхней части формы * один для небольшой вспышки в предыдущей строке * один для большого отражения правой части формы Начнем с первых двух элементов с псевдо-элементами в теге form.
Наконец, наше световое отражение. Погодите, у нас ведь нет достаточного количества псевдо-элементов? Не беспокойтесь, для этого мы используем наш первый элемент параграфа.
Важно: вам нужно будет отключить события при кликах при помощи параметра pointer-events. Если вы не сделаете этого, то вы не сможете нажимать на поля ввода, так как поверх них будет расположен еще один слой. Нам нужно будет убрать отражение в браузерах, которые не поддерживают pointer-events:
Пример 4 Особенность этого примера заключается в отсутствии ярлыков. Или иконок. Да, мы знаем, что раньше говорили о том, что нам необходимо иметь что-то, что сообщает пользователям предназначение полей. И у нас здесь все будет! У нас будут заглушки. А для браузеров, которые их не поддерживают, мы сделаем видимые ярлыки! Разметка
Позвольте нам представить 'required' атрибут. Когда он поддерживается, он позволяет браузеру проверить, заполнено ли поле или нет, а также соответствующим образом подтвердить форму. Важно: рекомендуем вам всегда создавать проверку подтверждаемой формы на стороне сервера. С помощью веб-инспектора без труда можете исключить атрибут, а также может быть отключена поддержка javascript, поэтому мы не рекомендуем вам полагаться только на проверку на стороне клиента. CSS-код Как обычно, давайте начнем с формы и заголовка, так как здесь все очень просто.
Дальше мы переходим к элементам ввода:
Давайте изменим стиль заглушек (где это возможно):
Далее, давайте добавим стилизацию элементов при наведении и фокусировании:
А также кнопку подтверждения:
А теперь, давайте разберемся с нашим запасным вариантом на случай отсутствия поддержки элемента 'placeholder'. Заглушка или 'placeholder' не является критически важным элементом, насколько нам известно, пока вы не полностью полагаетесь только не него. В данном случае, нам как раз нужно предоставить запасной вариант.
Все очень просто: если не поддерживаются заглушки, то ярлыки становятся видимыми. Конец истории. Пример 5 Последний пример представляет нам минималистичную форму в стеклянном стиле. Мы не будем использовать ярлыки, и все здесь будет выглядеть компактно. Мы будем вращать текст кнопки подтверждения и сделаем так, чтобы стрелочка появлялась при наведении. Разметка
Минималистичная разметка для минималистичной формы. CSS-код
Давайте оформим наши параграф и поля ввода:
Давайте добавим сюда немного стилизации при наведении и заглушки:
А теперь, пришло время перейти к кнопке подтверждения. Маленький i-элемент будет содержать иконку стрелки, но сейчас мы не будем делать ее видимой, только при наведении. Обратите внимание на то, что мы используем span-элемент внутри кнопки для того, чтобы вращать текст без вращения кнопки.
В случае, если браузер не поддерживает параметр 'transform', текст просто не будет вращаться. Невелика потеря. Мы также добавили незначительную текстуру к кнопке, применив два фона: текстуру и радиальную градацию, которая расположена под текстурой. Теперь давайте перейдем к эффекту при наведении, фокусировании и активном положении. При наведении мы сделаем так, чтобы span-элемент сдвигался влево и растворялся, и появлялась стрелка:
Когда мы кликаем по кнопке, нам не требуется никаких переходов, поэтому все выглядит довольно опрятно. javascript-код Давайте здесь используем немного javascript для того, чтобы имитировать работу HTML5-параметра Placeholder в браузерах, которые не имеют соответствующей поддержки. Мы воспользуемся jQuery-плагином от Mathias Bynens. За подробностями обратитесь к репозиторию на GitHub. После включения jQuery и скрипта, мы просто вызываем его следующим образом:
И это добавит имитацию заглушки в старые версии браузеров. Смотреть демо | Скачать архивом Внимание! У вас нет прав для просмотра скрытого текста.
Вернуться назад |