43 примера css3
Все слышали про язык разметки css, с помощью которой верстальщику просто не обойтись. До недавнего времени с помощью этого языка возможно было только сделать разметку страницы (разместить блоки, задать шрифты, цвет текста и тд.), но с появлением новой версии css3, появились и новые возможности. Конечно все об этом слышали но так до конца и не знают на что он способен. Ведь появилась масса возможностей, для осуществления которых когда то использовался jquery.
Теперь с помощью css3 можно добиться многих эффектов, и вот перечень некоторых из них: анимация с помощью css3, 3d текст, фон с градиентом, закругление углов, тень для текста, внутренняя тень, тень для блока, слайдер с помощью css3, фильтры для изображений и тд.
Конечно самыми популярными и красивыми являются эффекты анимации и 3d.
Хочу уточнить, что css3 это новый язык разметки, и поэтому большинство старых браузеров некорректно его отображают. Но с новыми браузерами проблем не должно быть.
Как говориться лучше раз увидеть, чем 100 раз услышать. Поэтому переходим к основной части этого поста — примеры и использование css3.
1. Информация о продукте с помощью css3
Есть много способов чтобы при наведении на продукт или изображение показать о нем информацию, здесь представлено этот эффект с помощью 3d куба.
Скачать
Пример
2. Блок slideup
Похожий пример как и в первом примере, только информация показывает с помощью интересного эффекта внутри блока.
Скачать
Пример
3. Checkbox в стиле apple
Анимационный checkbox на css3 в стиле iphone.
Скачать
Пример
4. Анимационные кнопки с помощью css3
Чтобы сделать анимацию для кнопки, ненужно использовать JavaScript, достаточно выбрать нужный нам фон и несколько строк кода css3.
Скачать
Пример
5. Анимационные звезды css3
Красивые и необычные звезды с анимацией при наведении.
Скачать
Пример
6. Красивые и утонченные кнопки BonBon css3
Очень красивые и необычные кнопки с эффектом 3d, это хорошо видно при нажатии на кнопку.
Пример создания кнопок
7. Эффект 3D с помощью css3
Текст в виде 3D, который можно посмотреть с помощью 3D очков.
Скачать
Пример
8. 3d анимация с «чистым» css3
Интересная подача блоков в 3d с блоком описания.
Скачать
Пример
9. Речевые облака css3
Подборка речевых облаков для сайта которые выполнены с помощью css2.1 и дополнительно используется css3. И все это без использования javascript.
Скачать
Пример
10. Фотографии в стиле Polaroids
Делаем фотографии в стиле поляроид, и все это при помощи одного лишь css2.1 и css3.
Скачать
Пример
11. Блок со сложенным углом
Простые блоки с загнутым углом на css3 в стиле flat. Хорошо отображаются в современных браузерах.
Скачать
Пример
12. Тень для блоков с помощью css3
Тени для блока в разных стилях и на любой вкус с помощью css3 без использования изображений.
Скачать
Пример
13. Иконки css3
Иконки для вашего сайта в стиле flat, которые выполнены чистым css3. Иконки корректно отображаются в новых браузерах.
Пример
14. Стикеры css3
Список меню или же просто заметки для вашего сайта в виде стикера.
Скачать
15. Солнечная система css3
Модель солнечной системы, выполнена с точными пропорциями и без использования java скриптов и html.
Скачать
Пример
16. Иконки соц. сетей
Иконки социальных сетей с помощью css3. Это экспериментальные иконки, которые выполнены без единого изображения и java скриптов.
Скачать
Пример
17. Крутой Flip эффект
Хороший пример на котором можно показать работу rotateY. Смотрится очень эффектно и легко. И все это css3.
Скачать
Пример
18. Меню с помощью css спрайтов
Меню выполнено при помощи css спрайтов. Корректное отображение на всех популярных браузерах включая IE7+.
Скачать
Пример
19. Красивая и интересная таблица
Таблица которая хорошо подойдет для прайс листа на сайте, все выполнено на css2.1 и css3.
Скачать
Пример
20. Прозрачные границы с background-clip
Прозрачный border с помощью css3 и с background-clip.
Скачать
Пример
21. Размытие фона css3
Простой и красивый эффект для модального окна с эффектом размытия (матового стекла).
Скачать
Пример
22. Эффект 3d текста при наведении
Эффект 3d при наведении с помощью тени, смотрится достаточно интересно.
Скачать
Пример
23. Ленты 3d при помощи css3
3d ленты на основе одного лишь css3. Этого можно добиться с помощью тени и правильном подборе цветовой гаммы.
Скачать
Пример
24. Прозрачные накладки css3
Красивые и интересные накладки, которые можно использовать как угодно, в виде рекламы или подсказок.
Пример
Красивые кнопки без использования изображений. Скачать
Пример
26. Вертикальное меню css3
Интересная подача вертикального меню с помощью анимации.
Скачать
27. Необычный поиск для сайта
Существуют много подач полей поиска и вот еще одна идея с помощью css3 и jquery с 3d эффектом.
Скачать
Пример
28. Слайдер — витрина средством css3
Очень эффектная презентационная страница с помощью слайдера выполненного на css3.
Скачать
Пример
29. Подсказки css3
Подсказки хорошо подойдут для сайта продажи шаблонов или презентации.
Скачать
Пример
30. Слайдер css3 с эффектом Parallax
Слайдер с эффектом паралакс. Смотрится слайдер легко и выполнено все при помощи css3.
Скачать
Пример
31. Вкладки с анимацией css3
Табы для сайта с помощью css3 и с разными анимациями. В примере представлены 4 вида вкладок.
Скачать
Пример
32. Форма входа
Форма входа и регистрации с помощью css3 и HTML5. В примере представлены 3 разных анимации при нажатии на кнопку Join us.
Скачать
Пример
33. Аккордеон для сайта
Аккордеон css3 с разными видами анимации при нажатии на один из пунктов.
Скачать
Пример
34. Переход между страницами css3
Эффект перехода между страницами, но в большой степени это напоминает вкладки css3.
Скачать
Пример
35. Панель изображений css3
Переход между изображениями с эффектом «жалюзи» и с разной их подачей.
Скачать
Пример
36. Анимационный баннер
С появлением css3 появилась новая возможность создавать интересные и информативные баннеры с помощью css3.
Скачать
Пример
36. Галерея с фильтром на css3
Галерея с фильтром для изображений, который работает с помощью css3 и html5.
Скачать
Пример
37. Эффект для миниатюры средствами css3 и jquery
Интересная подача превью при наведении. Есть интересные идеи и подачи в примере.
Скачать
Пример
38. Фоновый слайд шоу на весь экран css3
Слайд шоу для заднего фона на сайте с помощью одного лишь css3. Смотрится это все очень легко и сочно!
Скачать
Пример
39. Лайтбокс для изображений css3
Лайтбокс для изображений. В примере показаны несколько вариантов, которые точно вам приглянуться.
Скачать
Пример
40. Угловые формы с помощью css3
С помощью css3 можно сделать многое, тут вы можете увидеть интересные подачи текстовой страницы с помощью кривых линий.
Скачать
Пример
41. Эффект «брызги» css3
Эффекты которые напоминают брызги, он достаточно хорошо смотрится и можно использовать на любой вкус. Корректно оно будет работать только в новых браузерах.
Скачать
Пример
42. Эффекты типографии css3
Красивые и необычные эффекты при наведении с помощью css3 и jquery. Пример говорит сам за себя.
Скачать
Пример
43. Кнопки с анимацией css3
Красивые и интересные анимации для кнопок, используя css3.
Скачать
Пример
ЕЩЕ ОДНА ПОДБОРКА ПРИМЕРОВ CSS3 —>
Оформление блока. Div + class
Для создания кнопки, которая выполняет какой-либо JavaScript-код отлично подходят блоки div. Но изначально они не оформлены должным образом. Это и нужно исправить начинающему верстальщику. Для начала допустим, что мы уже создали html (хоть на рабочем столе). Запишем в него, например, это:1 2 3 4 5 6 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
1 2 3 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
|
Если статья Вам показалась незаконченной или Вы знаете как её улучшить, пожалуйста сообщите мне [email protected]
Адаптивные блоки с анимацией для одностраничного сайта
Любая продающая страница строится из определенных блоков, благодаря которым у посетителя складывается общее мнение о продукте, который на ней предлагается. Каждый из этих блоков можно оформить красиво и в итоге вся продающая страница будет выглядеть как нечто уникальное. В этом уроке я оформил на чистом CSS красивый блок с выгодами. Потому что данный элемент встречается на любом одностраничнике и его необходимо выделить.
Еще оформление элементов на сайте:
Описание эффекта: у блока есть скрытая часть и видимая. Видимая часть — это иконка и название выгоды, а скрытая часть — это подробное описание выгоды, которое появляется при наведении. Также при наведении добавляется активному блоку для создания эффекта объема.
Чтобы увидеть эффекты перейдите на страницу с примером:
Посмотреть примерСкачать
Если у Вас есть трудности с созданием лендинга, тогда начните с данного мини-курса: «Лендинг за 60 минут».
Вот как выглядит блок при наведении:
Как сделать красивое оформление для своего продающего сайта?
1 HTML структура
Сперва подключаем иконки от FontAwesome между тегами <head></head>, которые будем использовать для описания:
HTML КОД
1 | <link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/font-awesome/4.3.0/css/font-awesome.min.css"> |
У нас есть один общий блок, в котором находятся все 3 блока с описанием и иконками:
HTML КОД
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <div> <div> <span></span> <p>Выгода 1</p> <p>Дополнительный<br>скрытый текст 1</p> </div> <div> <!-- Содержимое 2-го блока --> </div> <div> <!-- Содержимое 3-го блока --> </div> </div> |
Несколько слов по структуре:
- Строки: с 1 по 15 — общий блок, который содержит 3 блока с описанием.
- Строки: со 2 по 6 — один отдельный блок с описанием выгоды.
- Строка: 3 — иконка блока.
- Строка: 4 — видимая часть с описанием выгоды.
- Строка: 5 — скрытая часть с подробным описанием выгоды.
Структура прозрачна и проста. Переходим к оформлению и создании анимации.
2 CSS стили
Для создания анимации нам понадобится лишь CSS3 и никакого Javascript.
Прописываем общие стили для 3-х блоков:
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 | .bulletsBlock:after { content: ""; display: table; clear: both; } .bulletsBlock > div { width: 30%; float: left; background: rgba(0,0,0,0.3); margin-left:5%; text-align: center; position: relative; padding-bottom: 31.7%; cursor: pointer; -webkit-transition:all 0.35s linear; transition:all 0.35s linear; } .bulletsBlock > div:first-child { margin-left:0; } /*Тень снизу у блока при наведении*/ .bulletsBlock > div:hover { -webkit-box-shadow: 0 35px 35px -35px #000000; -moz-box-shadow: 0 35px 35px -35px #000000; box-shadow: 0 35px 35px -35px #000000; } |
Далее идет иконка и ее анимация при наведении:
CSS КОД
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | .bullet-item span{ line-height: 1.5em; font-size: 12.5em; color:#fff; position: absolute; top:0; left:0; display: block; width: 100%; -webkit-transition:all 0.35s ease; transition:all 0.35s ease; } /*Анимация иконки при наведении - уменьшение и сдвиг вверх*/ .bulletsBlock > div:hover span.iconBullet{ line-height: 1.35em; font-size: 10.625em; top:-2.7%; } |
Далее напишем стили для блоков с текстовым описанием:
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 | .titleBullet, .hideText { position: absolute; left:0; bottom:0; text-align: center; width: 100%; margin: 0; color: #fff; -webkit-transition:all 0.35s ease; transition:all 0.35s ease; } .titleBullet { line-height: 2.5em; font-size: 2.1875em; background:#3B3B3B; z-index: 10; } .hideText { line-height: 1.3em; font-size: 1.25em; padding: 1em 0; background:#3B3B3B; font-weight: 300; z-index: 8; height: 50px; -webkit-transition:all 0.35s linear 0.2s; transition:all 0.35s linear 0.2s; } /*Анимация при наведении видимого текстового блока*/ .bulletsBlock > div:hover p.titleBullet{ bottom:80px; } /*Анимация при наведении скрытого текстового блока*/ .bulletsBlock > div:hover p.hideText{ background:#454545; } |
На этом всё!
Вывод
Анимация «оживляет» сайт и делает его более современным. Нельзя переборщить с анимацией, иначе Ваш сайт будет выглядеть не совсем красиво и эффекты будут лишь отпугивать посетителей. Вы смело можете скачать исходные файлы и изменить их под свой проект.
ВНИМАНИЕ: я понимаю что не у всех получается установить эффекты, скрипты и плагины, которые находятся на сайте, поэтому я сделал возможность проконсультироваться по любому вопросу в сайтостроении здесь: SKYPE Консультация!
Успехов!
С Уважением, Юрий Немец
Варианты оформления блока «Наша команда» и профиля пользователя
В этой статье вы найдете подборку примеров кода с ресурса codepen.io, которые предлагают интересные решения с точки зрения дизайна и кода для таких блоков вашего сайта (одной из страниц), как «Наша команда» («Our Teams») и профиль пользователя или автора статьи.
Блок «Наши профессионалы»
Блок с эффектом появления прямоугольника с ссылками на соцсети
Автор shamim khan
See the Pen meet our team by shamim khan (@shamim539) on CodePen.18892
Фото в профиль + социконки
Изначально на странице можно увидеть только фото, причем в профиль. При наведении картинка поднимается вверх или разворачивается в другую сторону, и мы видим имя и должность человека, а также ссылки на соцсети в виде квадратных или круглых иконок.
Автор neil pearce
See the Pen UI Profile Cards by neil pearce (@2975) on CodePen.18892
Фото команды с интересным hover-эффектом
Разметка строится на основе Bootstrap 4.1.2 и иконках Font Awesome 4.7.0, которые мы видим при наведении на блок.
Автор FrankieDoodie
See the Pen Profile Card UI Design Cool Hover Effect by FrankieDoodie (@FrankieDoodie) on CodePen.18892
Блок «Наша команда» с затемнением
При наведении на фото все остальные затемняются. Пример сделан на Vue.js, информация о пользователях подтягивается из JavaScript.
Автор Mert Cukuren
See the Pen our team showcase by Mert Cukuren (@knyttneve) on CodePen.18892
Блок «Meet Our Team»
Вариант, ставший почти классическим, т.к. довольно часто встречается. При наведении на фото мы видим затемненный фон с соц. иконками и информацией.
Автор Aly
See the Pen Meet Our Team by Aly (@afasanistan) on CodePen.18892
Второй вариант оформления с несколько иным эффектом при наведении.
Автор Aashima
See the Pen Meet our team by Aashima (@Aashima) on CodePen.18892
Белые прямоугольники вместо черных.
Автор Nodws
See the Pen Team page hover profiles by Nodws (@nodws) on CodePen.18892
И еще один подобный вариант, но с красным фоном при наведении и забавными фото.
Автор Mauritius D’Silva
See the Pen Team member profile display by Mauritius D’Silva (@mauritiusdsilva) on CodePen.18892
Векторные фото вместо изображений и прикольный hover-эффект.
Автор Baahubali
See the Pen Our Team by Baahubali (@anupkumar92) on CodePen.18892
И еще один подобный блок от того же автора Baahubali:
See the Pen Our Team by Baahubali (@anupkumar92) on CodePen.18892
Вариант для профиля моделей
Автор Aashima
See the Pen Pure Css Team Showcase by Aashima (@Aashima) on CodePen.18892
Переворачивающиеся при наведении карточки
Автор Pop Razvan
See the Pen CSS Flip Cards by Pop Razvan (@roppazvan) on CodePen.18892
Блок «Our Team» с анимацией
Не все фото в этом блоке ассоциируются с командой, но эффект постоянного перемещения смотрится необычно на фоне остальных примеров.
Автор Paulina Hetman
See the Pen Meet our team by Paulina Hetman (@pehaa) on CodePen.18892
Блок «Meet Our Team»
Интересный подход к расположению фото и информации о каждом из участников команды
Автор shamim khan
See the Pen Meet our team by shamim khan (@shamim539) on CodePen.18892
Отзывчивые блоки «Наша команда» в стиле «Material Design»
Восхищает подход автора к созданию этого примера — он не только подобрал интересные фото известных американских актеров, но и добавил интересную информацию о них (на английском языке, разумеется). При клике на иконку-гамбургер мы можем прочитать о любом актере. Для разметки был использован Bootstrap 3 и Font Awesome 4.2. Есть также небольшой код на jQuery.
Автор David Foliti
See the Pen Material Design — Responsive card by David Foliti (@marlenesco) on CodePen.18892
Информация о команде (пользователях) с несколькими вариантами пролистывания
Каждый пользователь как отдельный слайд с 4-мя эффектами появления.
Автор Arafat Hussein
See the Pen Pure CSS Sliders by Arafat Hussein (@rfthusn) on CodePen.18892
Команда (профиль пользователей) в виде карточек
Вы пролистываете карточки, которые выглядывают друг из под друга, чтобы посмотреть информацию о каждом из пользователей. Управление — белыми стрелками справа и слева от карточек.
Автор Tobias
See the Pen Daily UI #006 User Profile by Tobias (@Tbgse) on CodePen.18892
Профиль пользователя в светлой и темной теме
Одни и те же данные реализованы на темном и светлом фоне.
Автор Wanderson Jackson
See the Pen Profile-card-ui by Wanderson Jackson (@Wandersonjack) on CodePen.18892
Профиль пользователя с градиентным фоном и скошенным углом
Очень приятное решение для профиля активного пользователя Dribble, Twitter и Instagram. Вверху есть иконки, которые оставляют место для добавления кода, позволяющего отправить сообщение или посмотреть более подробную информацию. Фото затенено градиентным фоном-оверлеем с помощью псевдоэлемента ::after.
Автор Arafat Hussein
See the Pen Profile Card with Slanted Edge by Codeshape (@codeshape) on CodePen.18892
Несколько вариантов профиля пользователя со скосом
Профиль с кнопкой для фильтрации данных. Хорош для мобильного приложения.
Автор Arjun Amgain
See the Pen Filter Menu by Arjun Amgain (@arjunamgain) on CodePen.18892
Профиль актера с видео-фоном и прокручиваемыми постерами от того же автора.
Автор Arjun Amgain
See the Pen User Profile by Travis Williamson (@travisw) on CodePen.18892
Здесь тоже использован градиент в качестве оверлея, но фото не сверху, а слева + добавлена анимация появления блока с профилем.
Автор Gabrielle Wee
See the Pen #dailyui 006: User Profile by Gabrielle Wee 🧧 (@gabriellewee) on CodePen.18892
Автор Genaro Colusso
See the Pen Daily UI #6 — Profile by Genaro Colusso (@genarocolusso) on CodePen.18892
Автор Paraskevas Dinakis
See the Pen User Profile (DailyUI #006) by Paraskevas Dinakis (@perry_nt) on CodePen.18892
Профиль пользователя соцсетей
В профиль подтягивается информация о количестве постов, лайков и подписчиков.
Автор Matthias Martin
See the Pen 006 — Profile by Matthias Martin (@roydigerhund) on CodePen.18892
Профиль пользователя с пролистыванием информации в виде слайдера
Автор Arafat Hussein
See the Pen CSS Profile Card by Arafat Hussein (@rfthusn) on CodePen.18892
Профиль пользователя с информацией по клику
Вам необходимо кликнуть по фото пользователя, чтобы увидеть ряд ссылок с информацией о нем. Используются HTML, CSS, SVG и jQuery.
Автор Gerry
See the Pen User Profile by Gerry (@PixelatedOre) on CodePen.18892
Разноплановая информация о пользователе в виде 3-х карточек
Автор Rosa
See the Pen User Profile Cards by Rosa (@RRoberts) on CodePen.18892
Просмотров: 321
Блоки в документах — Вёрстка
Рис. 7.1 Главная страница сайта www.artel.by, разбитая на блоки
Я выделил 7 блоков, на рисунке они обозначены цифрами в кружочках. Пройдемся по всем блокам:
- Блок с логотипом. Иногда его еще называют блок для бренда. Логотип обычно располагается в левом верхнем углу.
- Блок с меню. Меню на сайте нестандартное, расположенное в три столбика.
- Блок новостей или лента новостей. Новости выводятся достаточно стандартно в один столбик. Каждая новость имеет дату и ссылку «подробнее».
- Два информационных блока. Один с последней работой, а второй с рекламой системы.
- Блок для распечатки информации о компании. Обычная форма с чекбоксами и графической кнопкой.
- Блок подписки на новости. Поле для ввода электронного адреса и графическая кнопка.
- Блок входа для клиентов. Форма с полями для ввода логина и пароля с графической кнопкой.
Дизайн страницы на рис. 7.1 строится именно на оформлении отдельных блоков и на небольшом количестве ярких картинок. Так бывает нечасто, поэтому обычно блоки на странице несколько сложнее идентифицировать.
Мы сейчас можем как бы структурировано взглянуть на верстку отдельной страницы. Можно выделить две задачи:
- создание общей структуры страницы
- создание отдельных блоков
Процесс верстки в таком случае можно разбить два этапа. На первом этапе верстальщик создает структуру (каркас). Обычно для этого используются таблицы. После того, как структура страницы создана, можно приступать к верстке отдельных блоков, которые заполняют пустой каркас.
Я, например, перемешиваю два этапа. Я не сразу создаю весь каркас, а только какую-то его часть. Затем имеющуюся часть каркаса я заполняю блоками и перехожу к созданию следующего элемента каркаса. Однако в самом начале я прикидываю общую структуру страницы и методы ее реализации. Если этого не сделать, то можно наткнуться на проблему, для решения которой потребуется полностью переделывать весь каркас.
В качестве небольшой тренировки давайте придумаем каркас для страницы, показанной на рис. 7.1. Видно, что блоки 1 и 2 можно вынести в отдельную таблицу. Вообще существует общее правило для табличной верстки: использовать как можно больше отдельных таблиц. Если все содержимое страницы поместить в одну таблицу, то посетитель увидит содержание только тогда, когда загрузится все содержимое таблицы. Если же разбить содержимое страницы на несколько разных таблиц, то они будут загружаться последовательно, и посетитель увидит некоторую часть информации раньше. Так вот, блок 1 и 2 можно вынести в одну таблицу, которая может состоять из четырех столбцов.
Остальные блоки отлично укладываются во вторую таблицу из трех столбцов, они просто сами в нее просятся, так что логично удовлетворить их желание. В итоге у нас получится две отдельных таблицы, одна из которых содержит блоки 1 и 2, а вторая – все остальные блоки.
Как видите, в приведенном примере продумать заранее каркас страницы очень просто. Конечно, подобные ситуации бывают не всегда. Иногда приходится проводить много времени, решая какую-нибудь принципиальную проблему, касающуюся структуры. Воображение дизайнеров (особенно тех, которые с HTML не знакомы) создает порой такие шедевры, которые перевести в HTML невероятно сложно.
Итак, чтобы верстать сайты, необходимо научится делать две вещи: создавать каркас страницы и отдельные блоки. В большинстве случаев создание каркаса задача более сложная, но исключения бывают и нередко. Я решил все же сначала поговорить об отдельных блоках, потому что имеющихся знаний для этого достаточно, а для разговора о структуре страницы – нет.
Так как все же идентифицировать блок на макете, которые радостный дизайнер с неприкрытой гордостью передал вам на верстку? Конечно, для этого надо знать, какие вообще виды блоков бывают. Рассмотрением видов блоков мы сейчас и займемся.
Формы
Формы присутствуют на любом корпоративном сайте. Учитывая, что профессиональные верстальщики в основном делают именно корпоративные сайты, нам не избежать знакомства с формами. В основном на сайте присутствуют такие формы: поиск, вход для клиентов, подписка на рассылку, быстрый переход по разделам с помощью селектора. Собственно, на этих примерах мы наглядно рассмотрим, какие бывают типы форм, как они обычно оформляются и, главное, как верстаются. Начнем с самого простого – формы поиска.
Поиск
Простейшая форма поиска состоит всего из двух элементов: поля ввода запроса и кнопки запуска поиска. Наиболее привычным является расположение этих элементов на одной горизонтали: так, как показано на рис. 7.2.
Рис. 7.2 Стандартная форма поиска
Кнопка запуска поиска может быть как текстовой, так и графической. Обычная текстовая кнопка реализуется вот так:
<input type=”submit” value=”искать”>
Графическая кнопка рисуется дизайнером, затем вырезается верстальщиком и сохраняется в каталоге с остальными картинками. Как вы уже знаете, каталог с картинками я всегда называю i. Есть у меня и стандартное название кнопки submit, такую кнопку я обычно называю go. При таких названиях графическая кнопка вставляется вот так:
<input type=”image” src=âi/go.gifâ alt=”искать”>
Стандартное решение при верстке блока формы поиска, показанного на рис. 7.2, сделать таблицу из одной строки и двух ячеек. В первую ячейку вставляется поле ввода текста, а во вторую – кнопка. Код будет таким:
<table cellpadding="0" cellspacing="0">
<form>
<tr>
<td><input type="text"
name="search"> </td>
<td><input
type="submit" value="искать"></td>
</tr>
</form>
</table>
На что надо обратить внимание? Во-первых, на то, что тег <form> стоит между тегами <table> и <tr>. Ни один валидатор кода не пропустит такую конструкцию и будет вас клятвенно заверять, что ни в коем случае нельзя так надругаться над HTML и вставлять тег <form> в неположенные места. Да, нельзя, но часто необходимо. Дело в том, что браузеры Internet Explorer, Mozilla и Opera имеют совершенно разные точки зрения на то, как надо отображать элемент <form>. Internet Explorer уверен, что надо сделать приличный отступ от элемента <form>, Opera делает отступ поменьше, а Mozilla вообще считает, что никакого отступа делать не надо. Эти несоответствия решаются так, как показано в коде, то есть помещением тега <form> между тегами <table> и <tr>. В этом случае отступы отсутствуют во всех браузерах, что обычно бывает необходимо.
Во-вторых, в таблице обнулены отступы и расстояния между ячейками. Практически всегда дизайнеры привязывают элементы к какой-либо вертикальной или горизонтальной линии, чтобы композиция была лучше. Если не обнулить отступы, то в итоге получим два пикселя несовпадения. Конечно, это не очень-то и бросается в глаза, но зоркий глаз дизайнера сразу заметит несовпадение и попросит исправить. Обязательно попросит, поверьте моему опыту.
В-третьих, при обнулении отступов элементы формы слипаются. Проблему можно решить, поставив после текстового поля неразрывный пробел .
В реальной жизни формы редко оставляют в первозданном виде и все чаще пишут на них стили. Наиболее часто используется стиль, которые вместо псевдотрехмерной рамки вокруг полей создает обычную рамку. Некоторые объявляют такой стиль для всех элементов <input>, но я считаю это плохой практикой, потому что рамки вокруг чекбоксов смотрятся ужасно. Для текстовых полей я создаю отдельный класс, который обычно называю input. Если кнопка отсылки содержимого формы обычная неграфическая, то для нее я создаю класс submit. Например, я хочу сделать рамку шириной 1 пиксель темно-серого цвета, и задать оранжевый фон для кнопки. Стили будут такими:
INPUT.input {border: 1px solid #666}
INPUT.submit {background: #F90; border: 1px solid #666}
Форма поиска изменится и будет выглядеть значительно лучше.
Рис. 7.3 Форма поиска с рамками
Иногда не этом не останавливаются. Например, высота кнопки и высота поля ввода немного отличается. Это может раздражать эстетов. Проблему легко решить, если задать одинаковую высоту и у поля, и у кнопки. Для задания высоты существует свойство height.
INPUT.input {border: 1px solid #666; height: 21px}
INPUT.submit {background: #F90; border: 1px solid #666; height: 21px}
Кроме того, надпись на кнопке читается неважно. Лучше изменить цвет шрифта на белый и сделать его полужирным.
INPUT.submit
{color: #FFF; font: bold 12px Verdana; background: #F90; border:
1px solid #666; height: 21px}
После таких преобразований форма поиска будет выглядеть так, как показано на рис. 7.4.
Рис. 7.4 Форма поиска с заданной высотой и измененным шрифтом на кнопке
Конечно, бывают совершенно уникальные случаи оформления форм, но нас они не особо интересуют. Так что с поиском закончим.
Вход для клиентов
Еще одной популярной формой является вход для клиентов. На рис. 7.1 такая форма представлена блоком 7. Обычно форма состоит из двух полей (логина и пароля) и кнопки отправки. Иногда рядом вставляют ссылку на сервис «забыл пароль». Пользователи очень часто забывают свои пароли, так что подобный сервис крайне полезен.
Типичных расположений элементов формы два:
- все элементы располагаются в одну строку
- поле для ввода логина располагается в первой строке, а поле для ввода пароля и кнопка отправки – во второй строке (именно так сделана форма на рис. 7.1)
Давайте сначала рассмотрим первый вариант. Для него отлично подойдет таблица из трех ячеек. Будем использовать картинку в качестве кнопки отправки и сразу зададим ширину полей, с помощью атрибута size. Код будет простым:
<table
cellpadding="0" cellspacing="0">
<form>
<tr>
<td><input type="text"
name="login" size="14"> </td>
<td><input type="password"
name="pass" size="14"> </td>
<td><input
type="image" src="i/go.gif" alt="Войти"></td>
</tr>
</form>
</table>
В браузере такая форма будет выглядеть так, как показано на рис. 7.5.
Рис. 7.5 Простая форма входа для клиентов
Для полного счастья осталось написать стили на поля формы. Я знаю, что высота картинки ровно 19 пикселей, поэтому задам высоту полей тоже 19 пикселей. Стиль получится несложным:
INPUT.input {border: 1px solid #666; height: 19px}
Надо бы еще назвать поля, чтобы пользователь знал, куда что вводить. Иногда название поля пишут прямо в самом поле. Для этого можно использовать атрибут value. Кроме того, нам надо задать класс input для обоих полей, так что HTML-код формы немного модифицируется:
<table
cellpadding="0" cellspacing="0">
<form>
<tr>
<td><input type="text"
name="login" size="14" class="input"
value="логин"> </td>
<td><input
type="password" name="pass" size="14" class="input"
value="пароль"> </td>
<td><input type="image"
src="i/go.gif" alt="Войти"></td>
</tr>
</form>
</table>
А выглядеть форма будет так, как показано на рис. 7.6
Рис. 7.6 Вид формы после написания стилей
Некоторые могут возразить, что использовать таблицу для верстки такой простой формы совершенно необязательно. Давайте попробуем сделать как можно проще и посмотрим, что из этого выйдет. Если убрать, таблицу, то код станет очень простым:
<form>
<input
type="text" name="login" size="14"
class="input" value="логин">
<input
type="password" name="pass" size="14"
class="input" value="пароль">
<input
type="image" src="i/go.gif" alt="Войти">
</form>
Он будет отображаться браузером так, как показано на рис. 7.7.
Рис. 7.7 Форма без таблиц
Как видите, кнопка отправки сместилась вверх, и форма выглядит очень неаккуратно. Ни один дизайнер не пропустит такую ошибку и обязательно попросит исправить. Более того, ни один приличный верстальщик не должен совершать такие ошибки.
Проблема возникает из-за того, что нельзя осуществить выравнивание элементов по вертикали, если они не вставлены в ячейки таблицы. Проблема, на самом деле, глобальная, и именно она является причиной использования таблиц даже в таких простых случаях. Что самое противное, даже каскадные таблицы стилей не предоставляют хорошей возможности выравнивания блоков по вертикали! Поэтому все равно придется пользоваться обычными таблицами.
Перейдем к второму типу формы входа для клиентов. Таблиц тоже будет достаточно простой. Первая строка содержит одну объединенную ячейку с полем для логина, а вторая строка содержит две ячейки:
<table
cellpadding="0" cellspacing="0">
<form>
<tr>
<td colspan="2"><input type="text"
name="login" size="14" value="логин"></td>
</tr>
<tr>
<td><input
type="password" name="pass" size="14"
class="input" value="пароль"> </td>
<td><input type="image"
src="i/go.gif" alt="Войти"></td>
</tr>
</form>
</table>
Кажется, что все в порядке и должно работать. И оно работает в браузере Internet Explorer, но не работает в Mozilla и Opera. Например, в Mozilla форма будет выглядеть так, как показано на рис. 7.8
Рис. 7.8 Вид формы в браузере Mozilla
Как видите, поля слиплись из-за того, что расстояния между ячейками таблицы и отступы в ячейках обнулены. Форма смотрится неважно, поэтому надо как-нибудь раздвинуть поля. Если прописать в таблице атрибут cellspacing=”4”, то это решит проблему, но сдвинет все поля на четыре пикселя вправо. Часто это неприемлемо, потому что нарушается выравнивание элементов дизайна вдоль определенной вертикали, страница теряет целостность и может выглядеть несколько незаконченной. Дизайнеры сразу замечают диссонанс и страшно возмущаются, что совершенно справедливо.
Другой вариант решения – вставить после первого поля распорку, то есть невидимую картинку:
<tr>
<td colspan="2">
<input type="text"
name="login" size="14" value="логин">
<br><img
src="i/0.gif"></td>
</tr>
Я задал высоту картинки 4 пикселя. Обратите внимание, что перед картинкой обязательно должен стоять перевод строки, то есть тег <br>, иначе никакого эффекта не будет.
Такой вариант, в принципе, жизнеспособен и я им часто пользуюсь, но проблему можно решить и с помощью CSS. Нам надо, чтобы у первой ячейки был отступ в 4 пикселя снизу, а у других ячеек не было. Логично, что надо выделить первую ячейку и написать для нее стиль. Выделить лучше всего с помощью класса. Например, назовем класс expand-form. Для задания отступов блока в CSS существует свойство padding. Кроме того, можно задавать отступы для определенной стороны блока с помощью свойств padding-top, padding-right, padding-bottom, padding-left. В нашем случае нужно воспользоваться свойствомpadding-bottom. Стиль для класса expand-form будет очень простым:
.expand-form
{padding-bottom: 4px}
А к ячейке таблицы с полем для логина цепляем название класса:
<td colspan="2" class=”expand-form”>
После таких преобразований поля раздвинутся, и форма будет выглядеть так, как показано на рис. 7.9
Рис. 7.9 Форма входа для клиентов после устранения слипания полей
Как видите, даже с такими простыми формами возникают определенные проблемы. Я, например, поначалу тратил очень много времени на поиски решения. Только с опытом приходит четкое знание того, как надо действовать в определенной ситуации.
Навигация
Навигация – это важнейший элемент любого сайта. Она должна четко показывать посетителю, где он находится и куда может попасть. Крайне желательно еще и показывать, где он уже побывал. Навигация по сайту состоит из нескольких элементов: самые разнообразные меню, внутренние ссылки, система поиска, карта сайта и прочие вспомогательные элементы. В данном разделе мы рассмотрим, какие бывают элементы навигации и как они верстаются.
Меню
Меню присутствует практически на любом сайте. Невозможно себе представить корпоративный сайт без меню. Четкую классификацию видов меню построить достаточно сложно, но перед нами такой задачи не стоит. Если вкратце, то с одной стороны меню бывают вертикальные и горизонтальные, а с другой – текстовые, графические и смешанного типа. Сложно сказать, какие виды меню встречаются чаще, но мы кратко рассмотри все типы.
Вертикальные
Для начала рассмотрим вертикальные меню и начнем с текстового. Текстовое вертикальное меню обычно оформляют в виде списка. Пример текстового вертикального меню показан на рис. 7.10
Рис. 7.10 Текстовое вертикальное меню на моем сайте «Веб-анатомия»
Обратите внимание, что разделы, у которых есть подразделы, имеют черные кружочки, а конечные разделы имеют белые кружочки. Такое отличие помогает посетителям работать с сайтом. Очень быстро они обучаются четко определять, чего ждать от раздела. Давайте с вами воспроизведем примерно такое же меню. Допустим, у нас есть четыре пункта меню: «О компании», «Продукция», «Услуги» и «Контакт». Сразу создаем список:
<ul>
<li><a href="">Ð компании</a></li>
<li><a href="">ÐÑодÑкÑиÑ</a></li>
<li><a href="">УÑлÑги</a></li>
<li><a href="">ÐонÑакÑ</a></li>
</ul>
Обычно на ссылки в меню требуется написать стили, которые отличаются от стилей для обычных ссылок. Например, ссылки могут отличаться цветом, шрифтом или не иметь подчеркивания. Надо бы ссылки в меню как-то обозначить. Для этого можно использовать класс, но лучше всего воспользоваться контекстным селектором. Мы называем как-нибудь блок с меню (то есть задаем блоку с меню ID), например, menu, а затем пишем стиль для всех ссылок, которые находятся внутри блоки с id=”menu”. HTML-код изменится весьма незначительно:
<ul id=”menu”>
Допустим, нам надо, чтобы ссылки в меню были черного цвета. Тогда напишем вот такой стиль:
#menu
A {color: #000}
Вот так выглядит полезное использование контекстного селектора. В результате сокращается код, потому что не надо для каждой ссылки добавлять атрибут class=”menu”. На элементы списка в меню зададим шрифт. Например, Arial размером 12 пикселей. Для этого тоже отлично подойдет контекстный селектор:
#menu LI {font: 12px Arial}
Кроме того, бывает полезно слегка увеличить высоту строки в меню:
#menu LI {font: 12px/1.6 Arial}
Наконец, нам надо выделить разделы, у которых нет подразделов. Для таких элементов списка надо задать вывод незакрашенных кружочков. Кстати говоря, кружки, квадратики и прочие символы, которые обозначают элемент списка, называют маркерами. Выделять элементы списка можно с помощью класса, назовем его empty. Для задания вида маркера в CSS есть свойство list-style-type. Используем селектор по классу empty и напишем такой стиль:
LI.empty {list-style-type: circle}
Итоговый HTML-код будет следующим:
<ul id="menu">
<li class="empty"><a
href="">Ð компании</a></li>
<li><a href="">ÐÑодÑкÑиÑ</a></li>
<li><a href="">УÑлÑги</a></li>
<li class="empty"><a
href="">ÐонÑакÑ</a></li>
</ul>
А само меню будет выглядеть так, как показано на рис. 7.11
Рис. 7.11 Вертикальное текстовое меню, реализованное с помощью ненумерованного списка
Некоторые виды вертикальных текстовых меню можно реализовать только с помощью таблицы. Например, на рис. 7.12 показано меню, пункты которого имеют заданную ширину и разделяются пунктирной линией. Текущий пункт выделен фоном, а ссылки не имеют подчеркивания.
Рис. 7.12 Вертикальное меню, реализованное с помощью таблицы
Давайте с вами пройдем нелегким путем, чтобы создать точно такое же меню. Путь будет достаточно познавательный. Начнем с того, что сделаем таблицу из четырех строк и одного столбца. В ячейки таблицы вставим пункты меню. Получится вот такой код:
<table>
<tr><td><a
href="">Ð компании</a></td></tr>
<tr><td><a
href="">ÐÑодÑкÑиÑ</a></td></tr>
<tr><td><a
href="">УÑлÑги</a></td></tr>
<tr><td><a
href="">ÐонÑакÑ</a></td></tr>
</table>
Конечно, меню пока еще выглядит совсем не так, как надо. Сейчас это просто таблица со ссылками, которые никак не отделены друг от друга и даже на меню не очень похожи. Давайте потихоньку его преображать. Можно начать со ссылок. Надо, чтобы они не имели подчеркивания, были черного цвета и выводились шрифтом Arial размером 14 пикселей. Как и в прошлом примере, мы будем пользоваться контекстным селектором, для чего назовем таблицу menu. Тогда стиль на ссылки будет таким
#menu A {color: #000; font: 14px Arial; text-decoration: none}
Самое сложное — сделать пунктирные разделители между ячейками таблицы. Я для таких целей всегда использую фоновое изображение. Сейчас нам нужен фоновый рисунок шириной 3 пикселя и высотой 1 пиксель. Первый пиксель будет черного цвета, а два других белого. Если повторять такой маленький рисунок по оси Х, то как раз получится пунктирная линия. Думаю, вы легко себе представите, как такой рисунок формирует пунктир. Допустим, мы такое изображение сделали, назвали его bg1.gif и сохранили в каталог i. Теперь надо задать фон для ячеек таблицы. Для адресации к этим ячейкам будем использовать контекстный селектор.
#menu TD {background: url(i/bg1.gif) repeat-x}
То есть все ячейки таблицы сid=”menu” будут иметь фоновый рисунок. Фоновое изображение будет повторяться только по оси Х. Имеет смысл посмотреть на промежуточный результат. Он показан на рис. 7.13.
Рис. 7.13 Промежуточный результат создания вертикального меню
Если сравнить промежуточный результат с рис. 7.12, то становится ясно, что до него еще далеко. Во-первых, не хватает пунктира после последнего пункта. Это и понятно, потому что ячеек ровно столько, сколько пунктов меню, а пунктирных линий на одну больше. Проблема решается добавлением одно лишней строки с пустой ячейкой в конце таблицы. Кроме того, нет выравнивания по правому краю. Необходимо в стиль для ячеек таблицы добавить выравнивание с помощью свойства text-align.
#menu TD {background: url(i/bg1.gif) repeat-x; text-align: right}
Дальше надо задать ширину меню и увеличить отступы внутри ячейки, чтобы создать необходимое пространство. Дизайнер сделал меню шириной 148 пикселей. Мы зададим ширину таблицы 140 пикселей и отступы 4 пикселям. В сумме получится как раз 148 пикселей. HTML-код немного преобразуется:
<table
id="menu" cellpadding="4" cellspacing="0">
<tr><td><a
href="">Ð компании</a></td></tr>
<tr><td><a
href="">ÐÑодÑкÑиÑ</a></td></tr>
<tr><td><a
href="">УÑлÑги</a></td></tr>
<tr><td><a
href="">ÐонÑакÑ</a></td></tr>
<tr><td></td></tr>
</table>
Осталось сделать совсем чуть-чуть, а именно выделить пункт текущего раздела серым фоном. Для этого можно ввести отдельный класс. Назовем его current. Стиль для класса current будет таким:
#menu TD.current {background: #DDD url(i/bg1.gif) repeat-x}
У вас должен возникнуть вопрос, зачем дублировать фоновый рисунок и в стиле для класса current, если он уже прописан для ячеек таблицы меню? Ответ: если этого не сделать, то фоновый цвет закроет фоновое изображение и пунктира в той ячейке, которая имеет класс current, просто не будет.
Итоговый код вот такой:
#menu TD
{background: url(i/bg1.gif) repeat-x; text-align: right}
#menu
TD.current {background: #DDD url(i/bg1.gif) repeat-x}
#menu A
{color: #000; font: 14px Arial; text-decoration: none}
. . .
<table
id=»menu» cellpadding=»4″ cellspacing=»0″>
<tr><td><a href=»»>Ð компании</a></td></tr>
<tr><td><a
href=»»>ÐÑодÑкÑиÑ</a></td></tr>
<tr><td><a
href=»»>УÑлÑги</a></td></tr>
<tr><td><a
href=»»>ÐонÑакÑ</a></td></tr>
<tr><td></td></tr>
</table>
Проще всего реализуются графические вертикальные меню. Обычно для них хватает таблицы из одного столбца с обнуленными отступами и расстояниями между ячейками. Приводить реальный пример нет особого смысла.
Горизонтальные
Чаще всего используются графические горизонтальные меню. Принципиально есть две их разновидности: резиновые и фиксированные. Резиновые меню растягиваются при увеличении окна браузера, а фиксированные – нет.
Фиксированное меню реализуются очень просто: создается таблица из одного ряда и необходимого количества столбцов, в которые помещаются пункты меню. У таблицы обнуляются отступы и расстояния между ячейками и жестко устанавливается ширина.
Давайте лучше с вами реализуем резиновое меню, которое показано на рис. 7.14
Рис. 7.14 Графическое горизонтальное резиновое меню на сайте www.rubi.ru
Особенность меню в том, что текущий пункт помечен галочкой сверху. Для начала нам надо заготовить пять картинок: четыре с пунктами меню и один с галочкой. Затем начнем создавать таблицу. Понятно, что надо сделать два ряда: в первом будет галочка, а во втором пункты меню. Каждый ряд будет состоять из четырех ячеек.
Ширину каждой ячейки надо задавать пропорционально относительно ширины таблицы. Раз у нас ширина таблицы 100% а ячеек четыре, то ширина каждой ячейки будет 25%. Картинку в каждой ячейке надо центрировать.
Код таблицы будет вот такой:
<table
width="100%" cellpadding="0"
cellspacing="0">
<tr>
<td><img src="i/current.gif"
width="32" border="0"
alt=""></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td><a
href=""><img src="i/catalogue.gif"
width="40" border="0"
alt=""></a></td>
<td><a
href=""><img src="i/forum.gif"
height="30" border="0"
alt=""></a></td>
<td><a
href=""><img src="i/konkurs.gif"
height="30" border="0"
alt=""></a></td>
<td><a
href=""><img src="i/reklama.gif"
height="30" border="0" alt=""></a></td>
</tr>
</table>
Для центрирования картинок внутри таблицы можно написать такой стиль:
#menu TD {text-align: center}
Меню будет выглядеть практически правильно, как видно на рис. 7.15.
Рис. 7.15 Вид резинового горизонтального меню с небольшой ошибкой
Ошибка в том, что галочка прилипает к пункту меню. На макете отступ между ними составляет ровно 11 пикселей, так что необходимо его реализовать. Есть два способа: с помощью HTML и с помощью CSS. Для начала попробуем сделать отступ стандартными средствами HTML.
Для этого, конечно же, нужна распорка, то есть невидимый 0.gif. Его надо вставить в ячейку таблицы сразу после галочки и задать ему высоту 11 пикселей:
<td>
<img src="i/current.gif"
width="32" border="0"
alt="">
<br>
<img src="i/0.gif"
width="1">
</td>
Второй способ менее надежный, но немного более красивый. Картинку с галочкой можно взять в отдельный блок и задать для блока нижний отступ:
<td>
<div>
<img src="i/current.gif"
width="32" border="0"
alt="">
</div>
</td>
На рис. 7.16 показан окончательный вид меню при разных размерах окна браузера.
Рис. 7.16 Вид горизонтального резинового меню при разных размерах окна браузера
Как видите, меню ведет себя совершенно правильно, то есть как и ожидалось.
Конечно, существует еще очень много видов меню, которые реализуются совершенно уникальным образом. Но, как вы понимаете, всего многообразия мы не охватим, а посвящать целую главу видам меню довольно скучно. Когда в конце книги мы будем рассматривать процесс верстки реальных сайтов, то еще встретимся с парой-тройкой меню, а пока на этом разговор о меню закончим.
Дублирующая навигация
Дублирующая навигация обычно употребляется на больших сайтах. Она располагается внизу страницы и представляет собой дублирование ссылок на самые важные разделы сайта. Типичное дублирующее меню выглядит так, как показано на рис. 7.17
Рис. 7.17 Дублирующее меню
Реализуется оно очень просто. Единственная особенность в том, что иногда ссылки в дублирующем меню отличаются от обычных ссылок. Реализовать такое отличие проще всего с помощью контекстного селектора. Например, следующим образом:
#double_menu A {color: #999; font-size: 11px}
. . .
<div id=”double_menu”>
<a href=ââ>Ð компании</a> | <a href=ââ>ÐаÑÑнеÑÑ</a> | <a href=ââ>РеÑениÑ</a> | <a href=ââ>ÐÑодÑкÑÑ</a> | <a href=ââ>ЦенÑ</a> | <a href=ââ>ÐонÑакÑÑ</a>
</div>
Карта сайта
Карта сайта представляет собой развернутое дерево разделов сайта. Обычно оно реализуется с помощью вложенных ненумерованных списков.
<ul>
<li><a href="">Ð компании</a></li>
<li><a href="">ÐÑодÑкÑиÑ</a>
<ul>
<li><a href="">ÐадÑвнÑе матрешки</a></li>
<li><a href="">ÐлекÑÑобалалайки</a></li>
</ul>
</li>
<li><a href="">ÐонÑакÑÑ</a></li>
</ul>
Конечно, если у сайта всего пять разделов, то карта сайта и не нужна вовсе, но в данном случае нет смысла приводить полную карту сайта из сотни разделов. Без стилей такая карта смотрится достаточно тривиально, как видно на рис. 7.18
Рис. 7.18 Карта очень маленького сайта без дополнительного оформления
Давайте сделаем карту более эстетичной. Для начала надо задать шрифт для элементов UL:
UL {font:
11px/1.6 Verdana}
Для того, чтобы различать карту сайта и обычные списки в тексте, надо присвоить ей уникальный идентификатор, то есть id. Например, назовем нашу карту sitemap. Зададим цвет ссылок в карте. Конечно же, будем использовать контекстный селектор:
UL#sitemap A {color: #666}
Теперь можно заняться маркерами. По умолчанию у списка первого уровня маркерами являются закрашенные кружочки, а у списка второго уровня – незакрашенные, что видно на рис. 7.18. Давайте для элементов списка первого уровня в карте сайта зададим в качестве маркера квадратик, а для элементов списка второго уровня нарисуем свою картинку, например, маленькую стрелочку.
Для задания типа маркера есть свойство list-style-type. Его и применим:
UL#sitemap {color: #666; list-style-type: square}
Для задания изображения в качестве маркера существует свойство list-style-image. Нам надо задать его только для списков, вложенных в список с id=”sitemap”, так что будем использовать контекстный селектор:
UL#sitemap UL {list-style-image: url(i/marker.gif)
}
После таких нехитрых стилей карта сайта, показанная на рис. 7.19, станет значительно более привлекательной.
Рис. 7.19 Карта сайта после написания нескольких стилей
На этом обсуждение навигационных блоков закончим. У нас впереди еще много интересного и полезного, в частности информационные блоки и текстовые элементы.
Текстовые элементы
Бывает, что дизайн сайта достаточно неплохой, но текст оформлен совершенно небрежно. Зачастую, оформления текста просто нет, хотя в дизайне сайта он иногда играет не менее важную роль, чем графика.
Печально, что с завидным постоянством оформление текста должны брать на себя верстальщики, потому что многие дизайнеры считают это занятие малозначительным и простым. Как вы понимаете, не все так просто, как кажется многим дизайнерам.
Возникает вопрос, что же делать несчастным верстальщикам? Во-первых, можно тактично намекнуть дизайнеру, что неплохо бы немного поработать над оформлением текста. Если дизайнер высокомерно машет рукой, углубляясь в Adobe Photoshop 7, остается два варианта: оставить все как есть или попробовать оформить текст самостоятельно. Я всегда выбираю второй вариант, но прекрасно понимаю, что далеко не любой верстальщик сможет хорошо оформить текст, поэтому вам советовать не буду. Кроме того, я не буду учить здесь дизайну, потому что вряд ли смогу, но некоторые примеры оформления текста привести полезно, хотя бы с точки зрения их реализации с помощью HTML-кода.
Простой текст
Простой текст оформлять легче всего. Максимум, что можно сделать – это задать параметры шрифта и межстрочное расстояние. Мой любимый шрифт для простого текста – это Verdana. И обычно я устанавливают размер шрифта 12 пикселей. Так что в тех таблицах стилей, которые пишу я, очень часто можно встретить вот такую строку:
P,TD,UL,LI {font: 12px Verdana}
Часто слегка увеличенное межстрочное расстояние улучшаем восприятие текста, наполняет его воздухом. Стандартное расстояние составляет 120% от высоты шрифта, но можно увеличивать до 140-160%. Однако для таблиц увеличивать межстрочное расстояние нецелесообразно, так что еще чаще в моих таблицах стилей встречаются вот такие объявления:
P,UL,LI {font: 12px/1.4 Verdana}
TD {font: 12px Verdana}
Любые другие способы оформления простого текста обычно совершенно лишние и вредные.
Заголовки
Существует множество способов оформить заголовки: оставить все как есть, изменить шрифт и цвет, использовать разрядку, подчеркивание, цвет фона или же полностью создавать заголовки с помощью картинок (последний способ ужасно негибкий и годится разве что для очень маленьких и редко изменяемых сайтов).
Конечно, надо быть немного дизайнером чтобы прилично оформить заголовки. Но отличный верстальщик всегда немного дизайнер.
Итак, начнем со шрифта. У меня есть любимый шрифт для заголовков – это Arial. Заголовки первого уровня должны быть достаточно большими, так что обычным стилем для заголовка <h2> является такой:
h2 {font: 22px Arial}
Обычно, в документах используется не более трех уровней заголовков. Так что стили надо писать для их всех. Часто стили отличаются только размером шрифта. Типичная тройка стилей для заголовков вот такая:
h2 {font: 22px Arial}
h3 {font: 18px Arial}
h4 {font: bold 14px Arial}
Обратите внимание, что для заголовков <h4> шрифт задан полужирный, потому что иначе они не очень выделяются, что нехорошо.
Иногда очень неплохо смотрится заголовок с подчеркиванием. Подчеркивание представляем собой рамку, которая задается для нижней части блока. Вот так:
h2 {font:
22px Arial; border-bottom: 1px solid #000}
Как выглядит заголовок с подчеркиванием, показано на рис. 7.20
Рис. 7.20 Заголовок с подчеркиванием
Бывают случаи, когда надо задать фон для заголовка. Но здесь возникает одна сложность, если задать фон для всего блока заголовка, например, вот так:
h2 {font: 22px Arial; border-bottom: 1px solid #000; background: #DDD}
то весь блок и окрасится, включая пустое пространство справа, как показано на рис. 7.21
Рис. 7.21 Окрашивание всего блока заголовка
Дело в том, что существует два типа блоков: строчные и структурные. Структурные блоки образуют элементы<p>,<div>,<h2> и т.д. Строчные блоки образуются элементы <b>, <i>, <span> и т.п. Строчные блоки всегда находятся внутри структурных блоков. Главное отличие в том, что структурные блоки имеют вначале и в конце переводы строк и по ширине занимают все предоставляемое им пространство. Ширина строчных блоков строго ограничена содержанием блока. Например, в блоке<b>важно</b> есть пять букв, которые и будут определять ширину блока.
Вернемся к нашему фону. Если требуется, чтобы фон окрашивал весь структурный блок, то все в порядке. Но бывают случаи, когда надо, чтобы фон был только под буквами. Этого можно добиться, если в структурный блок <h2> встроить строчный блок. В HTML имеется специальный строчный блок <span>, который создан как раз для подобных целей. HTML-код будет таким:
<h2><span>Полезные
советы</span></h2>
Стили для заголовка будут обычными, но кроме них надо задать фон для элемента <span>, который находится внутри элемента<h2>. Как вы понимаете, для этого будем использовать контекстный селектор. В итоге получится два объявления стилей:
h2 {font:
22px Arial; border-bottom: 1px solid #000}
h2 SPAN {background: #DDD}
А заголовок будет выглядеть так, как показано на рис. 7.22.
Рис. 7.22 Оформление заголовка с помощью фона для строчного элемента и рамки
Есть еще пара параметров заголовка, которые часто приходится изменять. Например, бывает необходимость убрать пространство после заголовка, то есть чтобы он вплотную прилегал к тексту.
На первый взгляд, такое поведение реализовать просто, но только на первый. Кстати говоря, это довольно показательный случай работы с каскадными таблицами стилей в той области, когда приходится касаться блоковой модели, совместимости между браузерами и позиционирования. Здесь будут встречаться вещи, с которыми вы пока не знакомы. Кое-что я буду объяснять, но в целом попытки решения проблемы носят чисто показательный характер. Итак, я прошел примерно следующим путем.
Я знаю, что для блоков можно задавать отрицательные поля. В случае с заголовком можно попробовать задать отрицательно нижнее поле и тогда заголовок подтянется к тексту. Методом подбора я установил, что подходящим размером поля будет –20 пикселей. Объявление стиля будет таким:
h2 {font: 22px Arial; margin-bottom: -20px}
Заголовок прекрасно выглядит в браузерах Internet Explorer и Opera, но когда я посмотрел тестовую страничку в браузере Mozilla, то разочарованно поджал губы. На рис. 7.23 вид в браузере Mozilla показан справа.
Рис. 7.23 Несовпадение нижнего поля для заголовка в браузерах Internet Explorer и Mozilla
Лично меня вид заголовка в браузере Mozilla совершенно не устраивает, поэтому начинается поиск обходных путей. Сразу вспоминается такая вещь, как относительное позиционирование. С помощью относительного позиционирования можно сдвигать блоки. Вообще существует два основных вида позиционирования: абсолютное и относительное. Абсолютное полностью вырывает блоки из нормального потока и помещает их ровно туда, куда вы захотите. Нормальный поток – это обычное расположение элементов в HTML, то есть блоки следуют друг за другом. Средствами HTML нельзя изменить нормальный поток, поэтому для верстки приходится пользоваться таблицами.
Абсолютное позиционирование перспективный вид верстки для сайтов с фиксированной шириной, но о нем мы еще будем говорить много и подробно. Относительное позиционирование оставляет блоки в нормальном потоке, но их можно смещать на необходимое расстояние.
Возвращаясь к заголовку, сразу хочется написать вот такой стиль:
h2 {font: 22px Arial; position: relative; bottom: -20px}
Но посмотрев на результат сразу становится понятно, что относительно позиционирование проблемы не решает. Мало того, что расстояние все равно разное, так еще заголовки сместились на 20 пикселей вниз. То есть верхнее поле заголовка как бы увеличилось. Конечно, меня такое поведение не устраивает, так что я пока возвращаю все обратно и думаю дальше.
Дальше обычно мысли развиваются в стандартном направлении. Раз проблема в браузерах, то надо для каждого из них реализовать специфический код. Методом проб устанавливается, что для Mozilla правильным полем будет – 14 пикселей. Остается выяснить, как в одной таблице стилей можно записать два разных объявления для заголовка <h2> таким образом, чтобы одно объявление понимал браузер Internet Explorer, а другое – Mozilla.
Задача, надо сказать, нетривиальная. Я знаю, что есть селекторы, которые Mozilla понимает, а Internet Explorer – нет. Например, селектор наследника, который позволяет применять стили к потомкам элемента. Чтобы лучше понять, как работают селекторы наследника, рассмотрим небольшой пример.
Допустим, у нас есть заголовки, следующие непосредственно после элемента <body>, а есть заголовки, находящиеся внутри самых различных блоков. Заголовки надо выводить шрифтом разного размера. Этого можно добиться с помощью селектора наследника:
BODY > h2 {font: 22px Arial}
DIV > h2 {font: 14px Arial}
Честно говоря, особой пользы от селектора наследника нет, но меня они интересуют по другой причине: их не понимает браузер Internet Explorer, но отлично понимает браузер Mozilla! То есть селектор наследника можно использовать для разделения объявлений.
Вот и воспользуемся им:
h2 {font: 22px Arial; margin-bottom: -20px}
BODY>h2 {margin-bottom: -14px}
После этого нижнее поле заголовка будет совершенно одинаковое в браузерах Internet Explorer и Mozilla, но тут я решаю проверить результат в Opera и вижу, что поле больше, чем необходимо… Получается, что надо разделить объявления стилей для Opera и IE с одной стороны, и Mozilla с другой стороны. Честно признаюсь, я не знаю, как реализовать такое разделение средствами CSS. Конечно, можно написать скрипт, который определяет браузер и динамически подключает в зависимости от браузера разные таблицы стилей, но мне такое решение проблемы на кажется красивым.
Похоже, я зашел в тупик. Что же делать? Первый вариант, не обращать внимания, что в Opera нижнее поле на несколько пикселей больше. На самом деле, в большинстве случаев ничего страшного в этом нет. Конечно, если стиль более сложный и критичный, то так поступать нельзя. В крайнем случае можно все же разделить разные таблицы стилей для разных браузеров с помощью специального скрипта, который будет отличать браузеры и динамически подключать необходимую таблицу стилей.
Вот такие проблемы возникают, когда пытаешься реализовать очень простой, на первый взгляд, стиль для заголовков. Что поделать, такова жизнь…
Таблицы
Оформлению таблиц можно посвятить отдельную главу, но мы ограничимся несколькими страницами. Например, у нас есть простая таблица, показанная на рис. 7.24
Рис. 7.24 Очень простая таблица без стилей
Кода пока приводить не буду, потому что он совершенно обычный. Разве что заголовок таблицы сделан с помощью элементов <th>, а не <td>, что совершенно правильно. Сейчас на таблицу не написано ни одного стиля, так что начнем пробовать на ней разные варианты оформления.
Сначала зададим шрифт:
TH, TD {font: 12px Verdana}
Смотрим результат в браузере и обнаруживаем, что заголовки не выводятся полужирным. Стиль по умолчанию мы переписали, так что надо явно задать для заголовков полужирный шрифт. Для этого придется разделить объявления:
TH {font: bold 12px Verdana}
TD {font: 12px Verdana}
В самой таблице слегка увеличим отступы в ячейках, прописав cellpadding=”4”. Сейчас можно браться за оформление. Одно из самых распространенных – задание фона для ячеек. Действительно, обычно получается неплохо. Мы зададим для обычных ячеек светло-серый фон, а для заголовка чуть темнее, чтобы явно его выделить. Как задается фон вы знаете:
TH {background: #DDD; font: bold 12px Verdana}
TD {background: #EEE; font: 12px Verdana}
Результат показан на рис. 7.25
Рис. 7.25 Таблица с фоном для ячеек
Как видите, действительно неплохо смотрится. Давайте попробуем другие виды оформления. Еще можно отделять строки таблицы линиями.
При таком способе оформления обычно обнуляют расстояние между ячейками, потому что иначе линия будет прерывистой, что некрасиво. При это устанавливают достаточно большие отступы, мы установим cellpadding=”6”. Линия реализуется с помощью рамки. Мы установим рамку для нижней части блока, который представляет собой ячейку. Кроме того, для заголовка зададим фон:
TH {background: #DDD; border-bottom: 1px solid #666; font: bold 12px Verdana}
TD {border-bottom: 1px solid #666; font: 12px Verdana}
Результат будет довольно симпатичный, он показан на рис. 7.26
Рис. 7.26 Таблица с линиями между строками
Фантазия дизайнеров безгранична, поэтому приходится верстать самые разнообразные таблицы с фоновыми изображениями, рисунками в заголовке и т.д. Для нас важен принцип написания стилей для таблиц, а его мы уже освоили.
Списки
Про списки мы достаточно подробно говорили, когда рассматривали меню. Особого смысла повторяться нет, но вообще можно немного обсудить разницу в списках между браузерами. Создадим простой список и посмотрим, как он будет выглядеть в различных браузерах.
Рис. 7.27 Вид простого списка в браузерах Internet Explorer, Mozilla и Opera
Как видите различия есть. Во-первых, списки имеют разные поля слева. Конечно, в обычном тексте это не принципиально, но когда необходимы жесткие выравнивания меню, то разница в 3 пикселя может быть заметна. Во-вторых, размер маркеров у списка в Internet Explorer заметно меньше, чем у остальных браузеров. Мне кажется, что в IE размер подобран лучше, и список смотрится аккуратнее. И, наконец, межстрочное расстояние в списках разное. Если в Internet Explorer оно равно 160%, то в Mozilla – 120% (как и элемента <p>). Кажется, что в Opera тоже задано 160%, но на самом деле, как это ни удивительно, в Opera тоже 120%. Кроме того, в Opera есть отступ сверху, тогда как в других браузерах нет.
При написании стилей необходимо учитывать отличия в отображении списков, если это необходимо. Например, если вы хотите, чтобы маркер был одинаковый во всех браузерах, то придется его нарисовать самостоятельно и подключить этот рисунок. К сожалению, размер стандартного маркера невозможно изменить. Если вы назвали файл с маркером circle.gif, то подключить его ко всем ненумерованным спискам очень просто:
UL {list-style-image:
url(i/circle.gif)}
Нам осталось рассмотреть гиперссылки.
Гиперссылки
Оформление гиперссылок вещь ответственная. Посетитель должен четко знать, что является ссылкой, а что нет. Вообще оформлением ссылок обязан заниматься дизайнер, потому что отдавать это на откуп верстальщику опасно.
Если ссылка находится в тексте, то подчеркивание крайне желательно, потому что оно однозначно ассоциируется с гиперссылкой. Часто его и оставляют, ограничиваясь только заданием другого цвета. Как вы знаете, по умолчанию ссылки имеют синий цвет. Многие специалисты по юзабилити яростно советуют не изменять прекрасный и привычный синий цвет, но эстетический взгляд дизайнера не в силах смотреть на синие ссылки и всячески старается поменять цвет. В этом вопросе я с дизайнерами солидарен.
Обычно различные эффекты применяют при наведении мыши на ссылку: изменяют цвет и фон, убирают подчеркивание, задают рамки и т.п. Имеет смысл познакомиться с эффектами поближе.
Начнем с того, что в CSS имеется псевдо-класс hover, который позволяет задавать стили для состояния при наведении курсора мыши на элемент. Например, ссылки у нас черного цвета, а при наведении курсора мыши надо изменять цвет на оранжевый. Такое поведение реализуется двумя объявлениями:
A {color: #000}
A:hover {color: #F90}
Псевдо-класс отличается от обычного тем, что его не надо
явно указывать в коде документа. Если вы объявляете обычный класс, то в коде
обязательно надо его указать, например, <span class=”date”>
. Псевдо-класс не надо указывать в коде, а стили, написанные к нему, автоматически применяются ко всем
элементам с данным поведением. В нашем случае псевдо-класс hover
задан для всех ссылок, так что при наведении курсора мыши ссылки будут менять
цвет. Надеюсь, вам все стало понятно, так что перейдем к более высоким
материям.
Обычным способом выделения ссылок при наведении является исчезновение подчеркивания. По ходу книги оно уже неоднократно реализовывалось. Кроме того, иногда изменяют фон. Можно и совместить два этих приема:
A {color: #000}A:hover {background: #DDD; text-decoration:
none}
Результат показан на рис. 7.28
Рис. 7.28 Изменение фона и устранение подчеркивания ссылки
Еще одни интересный эффект – включение рамок при наведении курсора. Правда, он не работает в браузере Internet Explorer 5, но ничего страшного в этом нет. На первый взгляд, он должен очень просто реализовываться:
A {color: #000}
A:hover {border: 1px solid #000; text-decoration: none}
На самом деле при таком стиле ссылка при наведении будет смещаться вправо на 1 пиксель из-за рамки. Смотрится это некрасиво, а устраняется очень просто:
A:hover {border: 1px solid #000; text-decoration: none; margin-left: -1px}
В результате получается эффект, который показан на рис. 7.29
Рис. 7.29 Рамка вокруг ссылки
Еще можно изменять сплошную линию на пунктир с помощью фонового рисунка. Создаете одно звено пунктирной линии и сохраняете его в файл bg1.gif. После этого останется написать стиль, который дублирует фон по оси Х и позиционирует его вниз блока ссылки:
A:hover {background:
url(i/bg1.gif) repeat-x bottom; text-decoration: none}
Результат показан на рис. 7.30
Рис. 7.30 Замена подчеркивания пунктирной линией
Конечно, оформление ссылок не ограничивается приведенными выше примерами. Вы можете включить фантазию и придумать совершенно необычные и оригинальные эффекты, но осторожно. Есть вещи, которые практически всегда плохо использовать. Например, не рекомендуется изменять размер и насыщенность шрифта. Еще хуже изменять сам шрифт. Например, если у вас в тексте шрифт Verdana, а при наведении курсора мыши он изменяется на Courier, то могут возникать проблемы в браузере и пользователи воспринимают такое изменение с раздражением.
Кроме того, если вы изменяете цвет или фон, то надо внимательно смотреть, насколько контрастны новые цвета. Например, если у вас черная ссылка на белом фоне, а при наведении фон меняется на темно-серый, ссылка читаться не будет.
Резюме
Я не затронул еще некоторые виды блоков, такие как локальные баннеры, специальные предложения, новости и т.п. В конце книги будут реальные примеры, где такие блоки обязательно встретятся.
Не стоит увлекаться видами блоков и их классификацией, отдавая все свое свободное время попыткам найти новый способ оформления гиперссылки. Хотя, с другой стороны, занятие это интересное и часто полезное, как полезна любая исследовательская деятельность. Данная глава, скорее, попытка дать общее представление о приемах, которыми вы будете пользоваться при верстке. Каждый приличный сайт уникален и все равно придется искать свои варианты решения. Но с течением времени все реже.
Михаил Дубаков
« назад к списку статей
10 ошибок начинающего верстальщика и как их избежать
Глеб Летушов, редактор-фрилансер, написал статью специально для блога Нетологии о том, какие ошибки совершает начинающий верстальщик и как их избежать. Статья для конкурса блога.
Когда пытаешься сверстать первый сайт, то не обращаешь внимание на какие-то мелкие ошибки и недочеты. К сожалению, если их вовремя не заметить и не убрать, то они перейдут от одного сверстанного сайта к другому.
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px ‘Helvetica Neue’; color: #454545}
Программа обучения: «HTML-верстка: с нуля до первого макета»
Чтобы не переучиваться в дальнейшем, обратите внимание на распространенные ошибки.
1. Неправильные имена классов
Начинающие верстальщики дают классам сокращенные или ничего незначащие названия и даже пишут их кириллицей.
Как избежать: называйте классы английскими словами, отражающими их суть. Слова не сокращайте. Нельзя использовать имена, начинающиеся с цифры или дефиса, после которого стоит цифра.
Правильно:
.shopping-cart-block
.social-icon
Неправильно:
.korzina-block
.социальные-кнопки
.-3-block
.2-review
.shp-crt
2. Использование идентификатора #id для описания стилей блока
Стиль блока можно задать с помощью класса .class-name или идентификатора #id. Атрибут класса позволяет выбрать группу элементов, а #id — один элемент. Если на странице сайта будет задан один и тот же #id для нескольких элементов, то браузер проигнорирует оформление элемента или вообще не откроет CSS-файл.
Идентификатор #id также используется, чтобы передавать информацию в JavaScript. Поэтому можно запутаться среди разных #id, потому что некоторые используются для скриптов, а другие — для оформления.
Как избежать: использовать имена классов .class-name для описания стилей блока, а #id оставить для JavaScript.
3. Описание стилей для элементов внутри атрибута style
Когда только сталкиваетесь с html-разметкой, то непонятно, как связаны html и CSS и как задать нужные стили в CSS. Чтобы упростить задачу, начинающие верстальщики не трогают CSS-файл, а задают оформление элемента внутри атрибута style в html.
Возможно, для одного элемента такой способ подойдет. Но проблемы начнутся на больших сайтах, где одним классом задается оформления нескольких элементов.
Как избежать: задавать стили для каждого элемента в СSS-файле.
4. Использование тега абзаца <p> для разметки
Браузер по умолчанию добавляет к <p> некоторые внешние отступы, чтобы параграф текста выглядел отдельным блоком. Чтобы облегчить работу и не добавлять отступы к изображению с помощью стилей, некоторые верстальщики оборачивают его тегом <p>…</p>.
Как избежать: для разметки страницы использовать специальные теги <div> и <span>, прописать нужные стили для этих тегов.
5. Много изображений в высоком разрешении на странице
Страница, которая перегружена изображениями с большим весом, долго загружается. Пользователям надоедает ждать полной загрузки и они просто закрывают страницу сайта или пытаются ее перезагрузить. Если открыть такую страницу с телефона, то, помимо долгого времени загрузки, она потребует большого трафика.
Как избежать: оптимизировать изображения, сжать их, уменьшив вес файла с помощью графических редакторов. Можно проработать структуру страницы, и, если изображение не несет смысловой нагрузки, удалить его.
6. Не сброшены изначальные настройки
Каждый браузер по умолчанию использует свой стиль в основных HTML-элементах. Если не сбросить настройки, то для этих элементов браузеры выставят разные отступы. Из-за чего одна и та же страница в нескольких браузерах будет выглядеть по-разному.
Как избежать: сбросить отступы для всех элементов можно с помощью СSS-кода:
*{
margin:0;
padding:0;
}
Либо подключить специальный CSS-файл, внутри которого отступы уже изменены. Например, Normalize.css или CSSreset.css.
7. Использование блочного элемента внутри строчного
В HTML существует два типа элементов: блоки и строки.
С помощью блоковых элементов выстраивается структура страницы. Это <div>, <ul>, <h2>, <h4> и другие элементы. Их свойство по умолчанию — display:block.
Строчные элементы, к которым относятся <span>, <li>, <a>, <label>, используются внутри блоковых. По умолчанию их свойство задается как display:inline.
Неправильно:
<span>
<h2> Заголовок </h2>
<ul>
<li> Пункт 1</li>
<li> Пункт 2</li>
</ul>
</span>
Правильно:
<div>
<h2> Заголовок </h2>
<ul>
<li> Пункт 1</li>
<li> Пункт 2</li>
</ul>
</div>
Если все же нужно использовать блок внутри строчного элемента, то можно поменять свойство у строчного на display:block
8. Отступы между элементами сделаны с помощью тега переноса строки <br/>
Часто с помощью одного или нескольких тегов <br/> создают отступы между элементами, картинками, словами. Этого делать не стоит, потому что тег <br/> должен использоваться внутри тега с текстом <p>…</p>.
Чтобы не вставлять в разметку лишних тегов, просто пропишите нужные отступы в CSS.
9. Страница не проверялась валидатором
На сайте w3.org есть специальный валидатор html-файлов. Он проверяет код страницы и выдает незамеченные ошибки: незакрытый тег, пропущенную строку или свойство. Чем меньше ошибок нашел валидатор, тем лучше отобразится страница в браузере и быстрее будет работать сайт.
10. Не указан тип страницы
Чтобы сообщить браузеру, какая версия HTML-разметки используется на странице, нужно использовать тег DOCTYPE.
Иногда начинающий верстальщик забывает добавить его в начале страницы или указывает неправильную версию HTML. Если браузер не смог определить версию html, то он покажет страницу с ошибками. Например, может сбиться оформление.
Как избежать: всегда вставлять тег в первую строку страницы. Например, если вы верстаете на HTML пятой версии, объявить тип документа можно так: < !DOCTYPE html >
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px ‘Helvetica Neue’; color: #454545}
Читать ещё: «Подборка англоязычных ресурсов для начинающих верстальщиков»
Чтобы научиться грамотно верстать страницы и совершать меньше ошибок, нужно следить за каждым шагом и уделять внимание мелочам. Чем тщательные вы следите за кодом, тем лучше страницы будет отображаться в браузерах.
Итак, ошибки, которые нужно избегать:
- Неправильные имена классов;
- Использование идентификатора #id для описания стилей блока;
- Описание стилей для элементов внутри атрибута style;
- Использование тега абзаца <p> для разметки;
- Много изображений в высоком разрешении на странице;
- Не сброшены начальные настройки;
- Использование блочного элемента внутри строчного;
- Отступы между элементами сделаны с помощью тега переноса строки <br/>;
- Страница не проверялась валидатором;
- Не указан тип страницы.
Мнение автора и редакции может не совпадать. Хотите написать колонку для «Нетологии»? Читайте наши условия публикации.
Руководство по оформлению кода HTML/CSS
Код HTML/CSS нужно оформлять красиво, а значит особенности верстки – обязательная часть программы обучения веб-разработке. Сайт proglib.io рассказал, как освоить нужные знания с нуля.
С хорошо оформленной и структурированной разметкой намного удобнее работать как самому верстальщику, так и его коллегам. Нужные участки кода будут находиться гораздо быстрее, а внести в них изменения и дополнения станет проще. До сих пор не утихают споры о том, как же правильно писать код. Перечислим основные правила, которые следует соблюдать при создании разметки HTML.
Делайте отступы
Выделяйте новую строку для каждого блочного, табличного или списочного элемента. Вложенные элементы отделяйте четырьмя (или двумя) пробелами от элемента-родителя.
Тег div
является вложенным элементом относительно section
.
<section> <div> </div> </section>
В свою очередь теги h2
и p
выравниваются относительно тега div
, не создавая «лесенки».
<section> <div> <h2>Заголовок</h2> <p>Текст</p> </div> </section>
Это правило не распространяется на строчные теги (i
, u
, a
, b
, span
) внутри абзаца. Например, тег span
не нужно начинать с новой строки и делать от него отступы.
Выравнивайте теги по одной вертикальной линии
Теги не должны хаотично плясать туда-сюда на странице редактора. Чтобы с легкостью ориентироваться в документе, пишите открывающий и закрывающий теги на одной вертикальной линии друг под другом.
Так писать не надо:
<section> <div> <h2>Заголовок</h2> <p>Текст</p> </div> </section>
Комментируйте код
Когда в разметке идет подряд много закрывающих тегов, ставьте комментарий (название класса) рядом с ним. Тогда вам не придется гадать, какой именно класс закрывается.
<div> <div> <div> ..... </div><!-- .title --> </div><!-- .header --> </div><!-- .wraper -->
Начало каждого блока желательно начинать с короткого комментария с названием секции. Это очень удобно и позволит вам легко ориентироваться в структуре документа.
<!-- Footer --> <footer> <div></div> </footer>
Всегда пишите в нижнем регистре
Весь код должен быть написан в нижнем регистре. Это относится к названиям элементов и атрибутов, значениям атрибутов, селекторам, свойствам и их значениям (кроме текста). Текст внутри тегов можно писать с заглавной буквы в начале предложений, а для остального существует свойство text-transform: uppercase;
.
Используйте кодировку UTF-8
UTF-8 – один из самых распространенных стандартов кодирования, который позволяет наиболее компактно хранить и передавать символы Юникода. Убедитесь, что ваш редактор использует UTF-8. Всегда указывайте кодировку в шаблонах и документах HTML с помощью <meta charset="utf-8">
. Опускайте кодировку для файлов CSS, поскольку для них UTF-8 задана по умолчанию.
Используйте валидный HTML
Валидная разметка – это код, который написан в соответствии с определенными стандартами. Их разработал Консорциум Всемирной Паутины – World Wide Web Consortium (W3C). При помощи таких инструментов, как W3С HTML Validator, можно проверить качество кода HTML и CSS. Написание валидного HTML оттачивает знание ограничений языка разметки и понимание технических требований.
Используйте семантическую разметку
Семантическая верстка (разметка) – это подход к созданию веб-страниц, основанный на расстановке тегов HTML в соответствии с их семантикой. Проще говоря, используйте теги по назначению: <hX>
для заголовков, <p>
для абзацев, <a>
для ссылок и т.д. Это поможет поисковому роботу проанализировать страницу сайта и подготовить ее описание для пользователей, а также повысит приоритет выдачи.
Для людей с ограниченными возможностями создается специальный софт, который ориентирован на семантическую разметку. Постарайтесь указать альтернативное содержимое для картинок, видео или анимаций, заданных с помощью canvas
. Это поможет людям со слабым зрением понять, о чем говорится в аудио- или видеозаписи.
Не указывайте протокол при добавлении внешних ресурсов
Опускайте название протокола (http://
или https://
) в ссылках на картинки и другие внешние ресурсы, файлы стилей или скрипты. Это делает ссылку относительной и предотвращает, например, использование незащищенного контента на защищенном сайте, а также незначительно уменьшает размер файлов.
Не используйте необязательные теги и лишние обертки
Для уменьшения размера файлов и лучшей читаемости старайтесь избегать использования необязательных тегов и лишних оберток (wrapper). В спецификации HTML5 есть их список.
Изучите правила оформления CSS
Выбирайте осмысленные имена классов и идентификаторы – так куда проще понять, за что они отвечают, и придется меньше менять код в будущем. Некоторые разработчики пользуются для не требующих специального обозначения классов шаблонными именами, которые уменьшают необходимость ненужных изменений в документе.
Изучите нюансы синтаксиса CSS
Ставьте точку с запятой после каждого объявления. Это необходимо для беспрепятственного добавления новых свойств и уменьшения путаницы. Используйте пробелы после двоеточий в объявлениях. Это поможет вам лучше ориентироваться в документе CSS. Начинайте каждый селектор или объявление с новой строки. По возможности объединяйте свойства отдельных блоков в группы и обозначайте их комментариями, разделяя переносом строки. Не указывайте единицы измерения для нулевых значений, если на это нет причины. Трехсимвольная шестнадцатиричная запись для цветов короче и занимает меньше места (color: #ааа;
).
Используйте препроцессоры
Препроцессор CSS добавляет ранее недоступные возможности с помощью новых синтаксических конструкций. Основная его задача – упростить и ускорить разработку, а также поддержку стилей в проектах. Препроцессоры преобразуют написанный с использованием специального языка код в чистый и валидный CSS. С их помощью улучшается читабельность и структурированность кода, а также увеличивается производительность труда верстальщика.
Используйте автопрефиксер
Префиксы нужны, чтобы «подружить» свойства CSS c различными браузерами. Изначально они были придуманы, чтобы помочь разработчикам браузеров адаптировать спецификацию под свои нужды. Чтобы не заниматься этим самостоятельно, используйте утилиту нового поколения autoprefixer для добавления префиксов к экспериментальным свойствам из CSS-3.
Будьте последовательны!
Следует придерживаться определенного стиля написания кода. Чистый и красивый код говорит об уровне профессионализма верстальщика и его отношении к работе.
Свойство отображения CSS
Пример
Использование различных отображаемых значений:
p.ex1 {display: none;}
p.ex2 {display: inline;}
p.ex3 {display:
block;}
p.ex4 {display: inline-block;}
Дополнительные примеры «Попробуйте сами» ниже.
Определение и использование
Свойство отображения
определяет поведение отображения
(тип окна рендеринга) элемента.
В HTML значение свойства отображения по умолчанию берется из спецификаций HTML или из таблицы стилей по умолчанию браузера / пользователя. В значение по умолчанию в XML является встроенным, включая элементы SVG.
Значение по умолчанию: | ? |
---|---|
Унаследовано: | нет |
Анимируемое: | нет. Прочитать о animatable |
Версия: | CSS1 |
Синтаксис JavaScript: | объект .style.display = «нет» Попробуй это |
Поддержка браузера
Числа в таблице указывают первую версию браузера, полностью поддерживающую свойство.
Имущество | |||||
---|---|---|---|---|---|
дисплей | 4,0 | 8,0 | 3,0 | 3,1 | 7.0 |
Примечание: Значения «flex» и «inline-flex» требуют префикса -webkit- для работы в Safari.
Примечание: «display: contents» не работает в Edge предыдущая версия 79.
Синтаксис CSS
Значения собственности
Значение | Описание | Играй | ||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
рядный | Отображает элемент как встроенный элемент (например, ).Никакие свойства высоты и ширины не будут иметь никакого эффекта | Играй » | ||||||||||||||||||||||||||||||||||
блок | Отображает элемент как блочный элемент (например, ). Это начинается на новая строка и занимает всю ширину | Играй » | ||||||||||||||||||||||||||||||||||
содержание | Заставляет контейнер исчезнуть, делая дочерние элементы дочерними элементами элемент на следующий уровень в DOM | Играй » | ||||||||||||||||||||||||||||||||||
гибкий | Отображает элемент как гибкий контейнер на уровне блока | Играй » | ||||||||||||||||||||||||||||||||||
сетка | Отображает элемент как контейнер сетки уровня блока | Играй » | ||||||||||||||||||||||||||||||||||
рядный блок | Отображает элемент как контейнер блока встроенного уровня.Сам элемент отформатирован как встроенный элемент, но вы можете применить значения высоты и ширины | Играй » | ||||||||||||||||||||||||||||||||||
линейно-гибкий | Отображает элемент как гибкий контейнер встроенного уровня | Играй » | ||||||||||||||||||||||||||||||||||
рядная сетка | Отображает элемент как контейнер сетки встроенного уровня | Играй » | ||||||||||||||||||||||||||||||||||
встроенный стол | Элемент отображается как таблица встроенного уровня | Играй » | ||||||||||||||||||||||||||||||||||
элемент списка | Пусть элемент ведет себя как элемент | Играй » | ||||||||||||||||||||||||||||||||||
обкатка | Отображает элемент как блочный или встроенный, в зависимости от контекста | Играй » | ||||||||||||||||||||||||||||||||||
стол | Пусть элемент ведет себя как элемент
Другие примерыПримерДемонстрация того, как использовать значение свойства contents. В следующих Например, контейнер .a исчезнет, а дочерние элементы (.b) дочерние элементы элемента на следующий уровень в DOM: .дисплей {: содержание; граница: 2px сплошной красный; цвет фона: #ccc; отступ: 10 пикселей; ширина: 200 пикселей; } .b { ПримерДемонстрация того, как использовать значение наследуемого свойства: body {display: встроенный; } p { ПримерУстановить направление некоторых гибких элементов внутри элемента в обратном направлении.
заказ: div { связанные страницыУчебникCSS: Отображение CSS и видимость Ссылка на HTML DOM: свойство отображения Макет CSS — встроенный блокОтображение: inline-block Value По сравнению с дисплеем Также с По сравнению с дисплеем В следующем примере показано различное поведение дисплея Примерохватывать.дисплей {: встроенный; / * значение по умолчанию для диапазона * / ширина: 100 пикселей; высота: 100 пикселей; отступ: 5 пикселей; граница: сплошной синий 1px; цвет фона: желтый; } пролет.b { span.c { Использование встроенного блока для создания ссылок навигации Одно из распространенных применений дисплея Пример.nav {background-color: желтый; list-style-type: нет; выравнивание текста: центр; отступ: 0; маржа: 0; } .nav li { html — Как применить стили CSS к блоку? CSS должен быть отделен от тела вашего HTML-кода.Его можно разместить либо в отдельной таблице стилей, которую вы импортируете / включаете, либо между тегами СОВЕТ: Часто я начинаю разрабатывать стили и манипулировать ими в голове, прежде чем разделить их в таблицу стилей. Это позволяет мне сосредоточиться на дизайне, не беспокоясь о том, правильно ли я прикрепил таблицу стилей. Закончив работу над страницей, я перемещаю рабочие стили на отдельный лист, чтобы обеспечить возможность повторного использования стилей по всему сайту. Squarespace CSS: как настроить таргетинг на определенные страницы, разделы или блоки на вашем сайте — Пейдж Брантон
Не знаете, почему я выделил его части синим? Это действительно очень важно, так что читайте дальше, чтобы узнать! Декларации CSSВаше свойство и значение всегда будут соединяться на бедре с помощью двоеточия или «:», как указано выше! 👯 Вместе они составляют так называемую декларацию (все, что я выделил синим в приведенном выше примере). У вас может быть несколько объявлений в одном бите CSS, чтобы помочь вам стилизовать разные аспекты одного и того же селектора (то есть один и тот же фрагмент контента), но для того, чтобы Squarespace понимала, о чем вы, черт возьми, говорите, вы каждое объявление необходимо заканчивать знаком «;» или точкой с запятой. Вот пример правила CSS с несколькими объявлениями: h2 {color: black; W3schools.com имеет огромную библиотеку названий свойств, чтобы помочь вам! Вот их список свойств , которые нужно использовать специально при форматировании шрифта / текста. Фигурные скобки Если мы снова посмотрим на наш пример: h2 {цвет: черный; Обратите внимание, что волнистые скобки или « {» и «} » открывают и закрывают список объявлений! Это позволяет Squarespace знать, что этот список объявлений применяется только к селектору (т.е.h2), который вы указали, и любой бит CSS, который идет до или после этого, будет применяться к другому фрагменту контента в целом. Думайте об этих изогнутых скобках / скобах как о мыльнице …У вас есть своя тема (h2), вы кладете свою мыльницу (свою волнистую скобку), вы стоите на этой мыльнице и кричите (свои заявления) о все изменения, которые вы хотите увидеть в мире (кхм… ваш сайт), а затем, когда вы закончите, вы берете свою мыльницу и уходите. Стрела.CSS объяснил. 🤯 (Шучу … тут еще кое-что.) Где вставить CSS в Squarespace, чтобы начать настройку вашего сайтаOkie dokes, так что, если вы помните из Squarespace CSS: что вам нужно знать перед начало работы есть 3 места для вставки CSS на вашем веб-сайте Squarespace. Давайте резюмируем, используя приведенный выше пример CSS! (Через минуту вы поймете, почему это важно!) В Squarespace 7.0 и 7.1, вы можете внедрить CSS:
Если я использую метод № 1 для вставки моего базового CSS-шрифта h2 в мой пользовательский CSS-инжектор для всего сайта, это существенно повлияет на любой текст на моем сайте, где используется h2. Если я использую метод № 2, будет изменен только текст, отформатированный с h2 на этой конкретной странице. А что было бы, если бы я использовал способ №3? Ну ничего. Потому что для использования метода №3 вам нужно уметь кодировать как контент (HTML), так и стиль (CSS), чтобы было что стилизовать! Для получения пошагового руководства и объяснения того, как и почему используется каждый метод, ознакомьтесь с Squarespace CSS: что вам нужно знать перед началом работы . Применение классов CSS в блоках содержимого — справка ZendeskВы можете настроить и стилизовать блок текста в блоке содержимого, применив класс CSS. из панели инструментов редактора.Применение классов CSS к блокам содержимого упрощает использование их для заявлений об отказе от ответственности, специальных примечаний и других выносков, которые визуально появляются из другой контент. Для применения CSS к блоку текста в блоке содержимого
) } Block.defaultProps = defaultConfig Этот настраиваемый модальный блок изображения героя отображает текстовое содержимое в трех заголовках: ,идля кнопки.Код использует функцию joinClasses () элемента Element (props.joinClasses) для объединения пользовательских стилей Aphrodite со встроенными атомарными классами CSS Element. Модальный блок изображения героя использует классы CSS «ma0», «ph4» и «pv4» из ранее упомянутого файла Atomic CSS spacing.css. Это улучшает интервал между блоками, устанавливая для атрибутов CSS margin и padding значение 0 («ma0»), горизонтальное заполнение 1rem («ph4») и 2rem вертикальное заполнение («pv4»). Atomic CSS основан на степенях двойки, при этом значение настройки расстояния удваивает каждый уровень от «pa1» (отступ 0,25em) до «pa7» (отступ 16rem), измеряемый в единицах rem CSS. Текстовые заголовки центрируются в модальном поле, ширина которого составляет 80% экрана на средних дисплеях («w-80-m» в Atomic CSS) и 60% экрана на больших дисплеях («w-60 -l »). На мобильных дисплеях модальные окна просто имеют отступы по бокам экрана. Полный список всех классов CSS, содержащихся в Atomic CSS, см. В файле atomic.css в репозитории element-atomic-css на GitHub. В следующем разделе статьи будут подробно описаны все используемые атомарные CSS и пользовательские классы. Взгляд на атомарные стили CSSВ этом разделе символ # используется для обозначения того, что элементы содержатся в ранее упомянутых элементах, чтобы помочь вам понять модальный эффект. |