Пример сайта:
HTML разметка:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 |
<!DOCTYPE HTML> <html lang="ru"> <head> <meta charset="utf-8"> <title>The Great Keksby</title> <base href="/assets/keksby3/"> </head> <body> <div class="page-header"> <div class="header-top"> <div class="header-logo"> <img src="img/logo.png" alt="The Great Keksby" width="205" height="55"> </div> <ul class="main-nav"> <li><a href="#">Магазин</a></li> <li><a href="#">Каталог</a></li> <li><a href="#">Отзывы</a></li> </ul> <a class="btn" href="#">Заказать</a> </div> <div class="promo"> <a href="#">Аксессуары для котов<br> Коллекция FW15</a> </div> </div> <div class="features"> <ul> <li class="feature-item"> <h2>Выбор</h2> <p>Ваш питомец оценит широту нашего ассортимента аксессуаров.</p> </li> <li class="feature-item"> <h2>Качество</h2> <p>Наши товары не сломаются на второй день. Только на третий.</p> </li> <li class="feature-item"> <h2>Безопасность</h2> <p>Все изготовлено из натуральных материалов, безопасных для котов.</p> </li> </ul> </div> <div class="cat-reference"> <h2>Немного теории</h2> <a class="btn" href="#" title="Открыть справочник">Справочник</a> <dl> <dt> <h3>Окрас кошек и котов</h3> <i>источник: <a target="_blank" href="https://ru.wikipedia.org">wikipedia</a></i> </dt> <dd> <img src="img/article-1.jpg" alt="Окрас кошек и котов" width="100" height="100"> <p>Окрас шерсти, кожи и глаз кошки обусловлен присутствием в них пигмента меланина. Меланин находится в теле волоса в виде микроскопических гранул, которые различаются по форме, размеру и количеству, что и вызывает различия в окрасе.</p> </dd> <dt> <h3>Кошкин дом</h3> <i>источник: <a target="_blank" href="http://kotmur.spb.ru">kotmur.spb.ru</a></i> </dt> <dd> <img src="img/article-2.jpg" alt="Кошкин дом" width="100" height="100"> <p>Нужен ли кошке Кошкин дом? Свой отдельный, обособленный от пространства городской квартиры Кошкин дом? Да, нужен! Нужен особый Кошкин дом, обустроенный по ее вкусу с лесенкой, с когтеточкой, с замкнутым, своим, отдельным уголком в ее, кошкином, доме.</p> </dd> </dl> </div> <div class="reviews"> <h2>Довольные коты</h2> <a class="btn" href="#" title="Посмотреть все отзывы">Все отзывы</a> <div class="reviews-list"> <blockquote class="review-item"> <p>Спасибо Кексу за давно напрашивающуюся идею! Набрал себе очков на все случаи жизни: для чтения и для вечеринки с котанами B-)</p> <cite>Барсик, г. Москва</cite> </blockquote> <blockquote class="review-item"> <p>Я просто не могу без шоппинга и теперь не нужно тащить хозяйку в магазин, заказываю все аксессуары на сайте у Кекса он-лайн!</p> <cite>Мурка, г. Санкт-Петербург</cite> </blockquote> </div> </div> <div class="popular-and-price"> <h2>Популярные товары</h2> <a class="btn" href="#" title="Посмотреть все товары">Каталог</a> <div class="popular-items"> <div class="catalog-item"> <img src="img/glasses-1.jpg" alt="очки «Классика жанра»" width="306" height="206"> <h3>Очки «Классика жанра»</h3> <b>300 р.</b> <a class="btn" href="#">Описание</a> <a class="btn" href="#">Купить</a> </div> <div class="catalog-item"> <img src="img/glasses-2.jpg" alt="очки «Жалюзи»" width="306" height="206"> <h3>Очки «Жалюзи»</h3> <b>400 р.</b> <a class="btn" href="#">Описание</a> <a class="btn" href="#">Купить</a> </div> <div class="catalog-item"> <img src="img/glasses-3.jpg" alt="очки «Базилис»" width="306" height="206"> <h3>Очки «Базилис»</h3> <b>500 р.</b> <a class="btn" href="#">Описание</a> <a class="btn" href="#">Купить</a> </div> </div> <h2>Прайс-лист на услуги</h2> <table class="price-list"> <tr> <th class="price-number">№</th> <th>Название услуги</th> <th>Кто оказывает</th> <th>Сколько стоит</th> </tr> <tr> <td class="price-number">1.</td> <td class="price-name">Стрижка</td> <td>Грумер</td> <td>500 руб.</td> </tr> <tr> <td class="price-number">2.</td> <td class="price-name">Заточка когтей</td> <td>Грумер</td> <td>300 руб.</td> </tr> <tr> <td class="price-number">3.</td> <td class="price-name">Накрутка усов</td> <td>Грумер</td> <td>100 руб.</td> </tr> <tr> <td class="price-number">4.</td> <td class="price-name">Подбор аксессуаров</td> <td>Стилист</td> <td>1550 руб.</td> </tr> </table> </div> <div class="feedback"> <h2>Остались вопросы?</h2> <p class="feedback-tip">Свяжитесь с нами, и мы развеем оставшиеся у вас сомнения!</p> <form class="feedback-form" action="/keksby-mail" method="post"> <div class="feedback-form-group"> <label for="fullname">Представьтесь, пожалуйста:</label> <input type="text" name="fullname" id="fullname"> </div> <div class="feedback-form-group"> <label for="phone">Контактный телефон:</label> <input type="text" name="phone" id="phone"> </div> <div class="feedback-form-group"> <label for="email">Электронная почта:</label> <input type="text" name="email" id="email"> </div> <div class="checkbox-area"> <label> <input type="checkbox" name="subscription"> Я согласен получать спам и смс на телефон </label> </div> <div class="feedback-form-group"> <label for="topic">Тема обращения:</label> <select name="topic" id="topic"> <option value="1">Условия доставки</option> <option value="2">Возврат товара</option> <option value="3">Жалоба в Роспотребнадзор</option> </select> </div> <div class="feedback-form-group"> <label for="message">Текст обращения:</label> <textarea name="message" id="message"></textarea> </div> <input type="submit" class="btn" value="Отправить"> </form> </div> <div class="page-footer"> <div class="footer-top"> <div class="footer-logo"> <img src="img/logo.png" alt="The Great Keksby" width="205" height="55"> </div> <a class="btn" href="#">Заказать</a> </div> <div class="footer-middle"> <div class="footer-menu"> <h3>Магазин</h3> <ul> <li><a href="#">Домики</a></li> <li><a href="#">Одежда</a></li> <li><a href="#">Очки</a></li> </ul> </div> <div class="footer-menu"> <h3>Отзывы</h3> <ul> <li><a href="#">Показать</a></li> <li><a href="#">Оставить</a></li> </ul> </div> <div class="footer-menu"> <h3>Прайс-лист</h3> <ul> <li><a href="#">Скачать прайс</a></li> </ul> </div> </div> <div class="footer-bottom"> <div class="footer-social"> <b>Давайте дружить!</b> <a class="social-btn" href="https://vk.com/htmlacademy">Вконтакте</a> <a class="social-btn" href="https://facebook.com/htmlacademy">Фейсбук</a> <a class="social-btn" href="https://instagram.com/htmlacademy">Инстаграм</a> </div> <div class="footer-copyright"> С <span class="heart">любовью</span> для <a href="https://htmlacademy.ru">HTML Academy</a> </div> </div> </div> </body> </html> |
CSS:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
.page-header, .page-footer { padding: 10px; background-color: #eeeeee; } .page-footer { margin-top: 20px; } .price-list { width: 100%; border-spacing: 0; border-collapse: collapse; } .price-list th { font-weight: normal; text-align: left; } .price-list td { border: 1px solid #333333; } .price-list th, .price-list td { padding: 5px 10px; } .price-list .price-number { text-align: center; } .price-list .price-name { font-weight: bold; } .feedback-form-group { padding-top:10px; padding-bottom:10px; } |
Логотипы вставляют с помощью тега img
, так как логотип — это содержательное, а не декоративное изображение. Есть ошибочный подход, когда логотип вставляют фоном, например, у тега h1
. Фон предназначен для вставки декоративных изображений. На всех страницах сайта, кроме главной, логотип оборачивают в ссылку, которая ведёт на главную. На главной странице ссылка на логотипе не нужна, так как ссылка не должна вести сама на себя. Чтобы было удобнее добавлять и убирать ссылку, картинку-логотип обычно оборачивают в блок-контейнер.
Важно научиться различать ссылки в обличье кнопок и обычные кнопки. Ведь если перед вами ссылка, то надо использовать тег a
, а если кнопка, то тег button
.
Обычно элемент является ссылкой, если есть подозрение, что он может привести к переходу на другую страницу. В магазине Кекса кнопка «Заказать» ведёт на страницу оформления заказа, поэтому это ссылка.
Обычно «кнопочные» элементы выглядят одинаково на всём сайте, поэтому для них используют общий служебный класс, например, btn
.
А ещё бывают ссылки, которые выглядят как обычный текст. Их тоже нельзя пропускать. В нашем случае «Аксессуары для котов Коллекция FW15» — это ссылка на страницу с описанием спецпредложения.
Ссылки могут открываться в текущей или в новой вкладке браузера. За это поведение отвечает атрибут target
тега a
и его значения:
_self
– ссылки открываются в той же вкладке, это значение по умолчанию._blank
– ссылки открываются в новой вкладке (или в новом окне браузера, если он не поддерживает вкладки).
Это не все значения атрибута, ещё есть _parent
и _top
, которые ведут себя почти как _self
и уже давно нигде не используются.
Мы задаём стили только для ячеек в прайс-листе, а не для всех ячеек на странице, ведь в других элементах интерфейса ячейки могут отличаться. Если вы хотите задать стили для каких-то тегов, лучше ограничивайте их классом родительского элемента. Это считается хорошей практикой при вёрстке.
Задавать стили для таблицы мы будем с использованием селектора по классу .price-list
, а не селектора по тегу table
. Причины те же, что и в предыдущем шаге — таблица с прайс-листом может отличаться от других таблиц на сайте, поэтому у неё есть собственный класс и к этому классу нужно привязывать всю стилизацию.
Раздел формы обратной связи разметим дивом с классом feedback, добавим внутрь него заголовок второго уровня и поясняющий текст. Поясняющий текст — это полноценное предложение, поэтому для его разметки можно использовать тег p с классом feedback-tip.
Каждое поле ввода и подпись к нему будем оборачивать в блок с классом feedback-form-group
. Это нужно, чтобы в дальнейшем расположить поля как на макете.
В макете подписи к полям располагаются на отдельной строчке, поэтому мы не будем оборачивать текст подписи и поле внутрь одного тега label
. Вместо этого будем подписи и поля располагать рядом друг с другом и связывать их с помощью атрибутов for
и id
.
Следующий элемент — чекбокс или «галочка». Её мы поместим в обёртку с классом .checkbox-area
, так как её внешний вид отличается от других полей.
На макете чекбокс и подпись к нему расположены на одной строке, поэтому можно обернуть поле и текст подписи в один тег label
. В этом случае нам не нужны ни идентификатор у поля, ни атрибут for
у подписи. Но имя полю нужно задать обязательно, используем имя subscription
.
Отлично, форма готова. Теперь добавим для блоков .feedback-form-group
небольшие внутренние отступы, чтобы поля не «прилипали» друг к другу.
Стилизация
Итак, начнём с задания глобальных параметров документа. Обычно браузеры добавляют небольшой отступ для всей страницы, чтобы контент не прилипал к краям. Этот отступ нам не нужен, так как в макете отступы будут в других контейнерах. Поэтому обнулим внешние и внутренние отступы у body
.
Зададим глобальные текстовые стили документа. Для этого в макете нужно найти текстовые элементы с одинаковыми внешним видом. Конечно, вы найдёте несколько групп таких элементов. Нужно выбрать самую большую группу, потому что таких текстов на сайте будет больше всего.
Затем мы получаем параметры (размер, цвет, название шрифта, межстрочный интервал) основного текста из макета и прописываем их для body
. Сразу же задаём контрастный цвет фона, чтобы основной текст читался хорошо.
Текстовые свойства наследуются, поэтому весь текст в документе будет выглядеть так, как описано в body
. Это удобно, так основной вид текста преобладает в макете, и переопределять текстовые параметры для отличающихся элементов придётся по минимуму.
Напомним, что при задании значения свойства font-family
сначала указывается через запятую названия шрифтов, а в конце желаемый тип шрифта: serif
или sans-serif.
Обратите внимание, что одновременно с цветом текста мы задаём для body
фоновый белый цвет. Это нужно для того, чтобы гарантированно получить контрастные цвета текста и фона, а не полагаться на настройки браузера по умолчанию.
Займёмся шапкой. Сейчас мы зададим цвет фона, а в следующей части курса добавим фоновое изображение. Фоновый цвет шапки сделаем тёмным по двум причинам:
- во-первых, фоновое изображение в шапке достаточно тёмное,
- во-вторых, текст в шапке белого цвета, а фон должен быть контрастным.
Зачем вообще задавать фоновый цвет блоку в котором есть фоновое изображение? Представьте, что эта картинка не загрузилась или грузится очень долго. В этом случае светлый текст будет легко читаться на контрастном тёмном фоне.
Навигационное меню мы разметили с помощью списка, а у списков по умолчанию есть отступы и маркеры. Сейчас мы сбросим маркеры и сделаем так, чтобы текст внутри списка был набран прописными символами.
Важно! Мы сбрасываем стили по умолчанию не для всех списков на странице, а только для списка меню, и используем для этого селектор по классу — .main-nav
.
Сбрасывать стили по умолчанию для текстовых элементов (списков, заголовков, абзацев и так далее) с помощью глобальных селекторов по тегам — очень плохая практика.
На прошлом шаге мы пытались сделать текст в шапке читабельным на тёмном фоне. Но ссылки остались синего цвета и совершенно не читаются. Дело в том, что в каждом браузере к элементам применяются определённые стили по умолчанию. И для ссылок в браузере изначально заданы цвет текста, подчёркивание и курсор. То есть, если мы хотим получить отличные от стандартных значения этих свойств, их нужно переопределить. Поэтому зададим цвет текста для ссылок отдельно.
Хорошим тоном считается стилизовать все состояния ссылок: состояние при наведении и активное состояние при нажатии. Эти состояния дизайнер отрисовывает в специальном макете — стайлгайде.
При наведении ссылка подчёркивается, а в активном состоянии цвет ссылки становится полупрозрачным.
Теперь давайте займёмся стилями для ссылок и кнопок с классом .btn
.
Этот класс должен быть достаточно универсальным, так как применяться он будет и к тегам a
, и к тегам button
. Поэтому придётся задать достаточно много свойств. Но начнём мы с текстовых параметров, общих для всех кнопок: зададим цвет текста, прописные буквы, уберём подчёркивание.
Теперь приступим к оформлению раздела с преимуществами.
В этой части курса мы оформим заголовки и текст преимуществ, а также зададим второму и третьему преимуществу декоративную рамку слева.
В следующих частях мы выстроим блоки преимуществ по сетке и добавим фоновые оформительские изображения.
Для разметки преимуществ мы использовали список, которому снова нужно будет убрать маркеры.
В блоках преимуществ осталось стилизовать заголовки.
Текст в них похож на большой заголовок блока .promo
.
Для удобства стилизации добавим тегам заголовков класс feature-title
.
Обратите внимание на ещё одну тонкость: высота строки заголовков такая же, как и размер шрифта. Это решение «на грани», так как высота строки должна быть не меньше размера шрифта, иначе в многострочном заголовке текст будет слипаться.
Приступаем к разделу «Немного теории».
Обратите внимание, что заголовок этого раздела и заголовки остальных разделов в макете оформлены одинаково.Логично будет задать всем этим заголовкам один класс и использовать его для стилизации.
У блока «Немного теории» светло-серый фоновый цвет, и текст на его фоне выглядит контрастно. Поэтому цвет текста менять не будем.
Начнём оформлять статьи в блоке «Немного теории», которые мы разметили с помощью списка определений. В этом задании мы оформим заголовки статей и информацию об источнике.
Ранее мы разметили заголовок статьи с помощью тега h3
, информацию об источнике с помощью тега i
и поместили эти теги внутрь тега dt
.
Сейчас для удобства стилизации добавим тегу h3
класс reference-title
, обозначающий «заголовок в справочнике». А тегу i
добавим класс reference-source
, обозначающий «информация об источнике в справочнике».
И теперь зададим текстовые параметры для элементов, используя свежесозданные классы.
Обратим внимание на то, что для тега <i>
в CSS мы зададим курсивный шрифт свойством font-style
. Несмотря на то, что тег <i>
в браузере по умолчанию отображается курсивом, лучше явно задать в CSS это свойство ещё раз. Так мы будем уверены, что в случае замены тега в разметке на другой, элемент по-прежнему будет курсивным.
Продолжаем оформлять статьи. Анонс статьи, состоящий из абзаца текста и картинки, мы разместили внутри тега dd
. Давайте зададим размер шрифта анонса и немного оформим изображения.
На макете у изображений немного скруглены углы. Конечно, можно экспортировать из Photoshop картинки со скруглёнными углами. Но для создания декоративных эффектов лучше использовать возможности CSS везде, где это возможно, например:
- обесцветить изображение можно с помощью CSS-фильтров,
- повернуть или масштабировать с помощью CSS-трансформаций.
При использовании CSS файл изображения не подвергается деструктивным изменениям, а все эффекты можно легко изменять, используя одно и то же изображение.
Для скругления углов мы воспользуемся свойством border-radius
.
В статьях нам осталось оформить ссылки на источник.
По аналогии со ссылками, оформленными ранее, зададим базовый цвет ссылок, а также будем менять цвета при наведении на ссылки и при нажатии на них.
Займёмся разделом отзывов.
Заголовку добавим ранее созданный класс section-title
.
Содержимому отзывов зададим параметры шрифта, а декоративную рамку слева сделаем с помощью border
, аналогично тому, как это делали для блоков с преимуществами.
По аналогии с предыдущими заданиями, добавим дополнительный класс для автора отзыва и используем его при стилизации.
Тег <cite>
по умолчанию отображается в браузере курсивом, как и <i>
. Поэтому чтобы не полагаться на браузерные стили, явно зададим для класса автора цитаты курсивный шрифт в CSS.
В популярных товарах всё аналогично предыдущим разделам.
Заголовок — .section-title
, у блока светло-серый фон, у текста немного отличающиеся от стандартных значения.
Оформим прайс-лист. Сначала добавим класс заголовку, затем начнём офомлять таблицу с ценами.
Для всей таблицы зададим межстрочный интервал, чтобы у текста в ячейках было достаточно свободного пространства, и он легко читался. Для заголовочных и обычных ячеек зададим текстовые параметры согласно макету.
Сейчас таблица с ценами растягивается на всю ширину страницы, и ширина ячеек рассчитывается автоматически в зависимости от их содержания. В следующих частях курса мы зададим ширину столбцам таблицы в соответствии с макетом.
Теперь займёмся полями формы. В форме есть однострочные текстовые поля ввода, многострочное поле и выпадающий список.
По умолчанию интерактивные элементы формы не наследуют текстовые свойства: цвет, параметры шрифта. Дело в том, что в браузере этим элементам задаётся специальное предустановленное оформление.
Как сделать оформление элементов форм таким же как у родительских элементов? Можно конечно продублировать свойства и значения родителей у дочерних элементов, но это непродуктивно и плодит лишние правила. При изменении текстовых стилей родителя придётся менять стили и у элементов форм.
Поэтому лучше воспользоваться специальным ключевым словом inherit
. Оно заставляет элемент унаследовать значение соответствующего свойства у родителя. Если текстовые стили родителя изменятся, то и стили элементов формы изменятся автоматически.
Итак, для полей ввода формы зададим явное наследование свойств шрифта и цвета текста. Также не забудем оформить состояния при наведении и в фокусе.
В этом задании мы используем значение inherit
для свойства font
, так как это составное свойство, в котором описывается сразу несколько текстовых параметров (и все эти параметры будут наследоваться).
В макете под полем с чекбоксом есть декоративное подчёркивание. Сделаем его с помощью нижней рамки.
Отлично, нам остаётся оформить подвал.
Для начала зададим тёмный цвет фона и контрастный светлый цвет текста (аналогично мы оформляли шапку).
Затем блоками подвала добавим декоративные разграничители с помощью рамок.
Теперь давайте оформим заголовки в подразделах подвала. Они будут оформлены аналогично другим заголовкам на странице.
Также уберём маркеры в списках в подвале.
Теперь оформим ссылки в подвале.
Как обычно, уберём у них подчёркивание и зададим цвет и размер шрифта, а также будем менять цвет ссылок по наведению и нажатию на них.
Оформим блок со ссылками на социальные сети.
С призывом дружить всё понятно — задаём ему текстовые параметры из макета.
С кнопками социальных сетей вопросов больше. У нас они размечены как ссылки с текстом, а на макете это квадратные блоки с иконками.На этом этапе мы можем лишь задать для ссылок белый цвет.
Закончим оформление подвала, стилизовав тексты в блоке с копирайтом. Как и социальные ссылки, слово «любовь» на иконку сердца мы заменим в следующих частях.
В этой части курса поработаем над графическими элементами макета.
Давайте определимся, какие изображения считать декоративными. Если убрать декоративное изображение со страницы, то ущерба для содержания страницы не будет. То есть декоративные картинки добавляются на страницу только для оформления и не содержат ключевой информации.
По принципу прогрессивного улучшения декоративные изображения задаются с помощью фонов в CSS. На странице Кексби к декоративным изображениям относятся: большая фоновая картинка в шапке, иконки в блоке преимуществ (это чисто оформительские символы), картинка с Кексом справа от формы обратной связи, иконки в кнопках социальных сетей в подвале и сердечко в блоке копирайта.
В этом курсе мы зададим фоновые изображения шапки, преимуществ и формы. Оформление блоков социальных кнопок и копирайта разберём детально в следующих частях.
Итак, сначала давайте зададим фоновое изображение шапки. В этом задании мы применим свойство background-size
со значением cover
.
Немного про свойство background-size
. По умолчанию браузер не меняет размеры фонового изображения. Но если необходимо задать фону другие ширину и высоту или привязать его размеры к размерам родительского блока, применяется свойство background-size
. При значении background-size: cover
, которое мы сейчас зададим, изображению задаются минимально возможные размеры, при которых оно закроет всю фоновую область блока.
Дополнительные классы из прошлого задания нужны, чтобы добавить преимуществам разные фоновые изображения иконок.
Сейчас иконки экспортированы как отдельные изображения в формате PNG, так как они по макету содержат прозрачные области.
В завершающих частях курса мы объединим иконки в один спрайт, чтобы оптимизировать количество запросов, которые отправляются при загрузке страницы.
В этой части курса «Кексби» мы займёмся сетками. Наконец-то наша страница станет нужной ширины, а блоки расположатся в нужном порядке.
Сейчас мы займёмся крупными сеточными блоками, а мелкие элементы оформим в следующих частях. Для сеточных блоков мы зададим размеры и отступы, которые возьмём из макета. И конечно мы создадим колонки.
Мы добавили кнопки масштабирования в верхнем правом углу мини-браузера, чтобы вам было удобнее просматривать страницу, когда вы зададите блокам настоящие размеры из макета.
Итак, для начала зададим для body
минимальную ширину, чтобы для содержания страницы всегда было достаточно места вне зависимости от ширины окна браузера. Ширина содержания составляет 1020px
, добавим к ней отступы справа и слева по 10px
и получим минимальную ширину 1040px
.
Мы обеспечили минимальную ширину страницы 1040px
. Теперь на большом разрешении контент страницы будет прижиматься влево, а по макету должен располагаться по центру. Это хорошо видно на масштабе 0.5x
.
Чтобы расположить содержание по центру, нам понадобится дополнительный контейнер-центровщик. Лучше всего для этого подойдёт тег div
, ведь этот элемент нужен только для оформления страницы и никакого смысла не несёт.
Для центровщика будем использовать одно из типовых имён классов — container
(другое типовое имя — wrapper
). Центровщику зададим ширину 1020px
(такую же, как ширина содержания) и автоматические маргины слева и справа.
Такой контейнер-центровщик мы будем использовать во всех блоках на странице, а начнём с шапки.
После добавления центровщика зададим отступы и минимальную высоту для шапки, а также уберём временные внутренние отступы в шапке и подвале.
А теперь давайте выстроим сетку шапки. Нам нужно расположить в один ряд логотип, навигацию и кнопку. В мини-браузере эти блоки выделены жёлтым цветом.
C помощью свойства float
сместим логотип и меню влево, а кнопку «Заказать» вправо. Почему так? Согласно макету кнопка прибита к правому краю. Например, если ширина центровщика увеличится, то кнопка останется прижатой к правому краю контейнера, а логотип с меню — к левому.
Отметим ещё один момент. Плавающим сеточным блокам лучше всегда задавать ширину. Таким образом можно гарантировать, что при возможном изменении содержимого «флоатящегося» блока, а соответственно и его ширины, выстроенная сетка не развалится.
Поэтому-то мы и зададим ширину для блока с логотипом и меню явно.
Размер колонки с логотипом сделаем таким же, как размер картинки-логотипа. Ширину колонки с меню возьмём с запасом: от края первой буквы в меню, до края кнопки заказа. Запас нужен, например, чтобы в меню мог поместиться ещё один пункт.
Кнопку «Заказать» и остальные кнопки на странице мы будем оформлять в следующих частях курса, поэтому пока что для неё задавать ширину не будем.
Сетка шапки практически готова. Осталось добавить псевдораспорку для блока .header-top
, в котором расположены плавающие элементы-колонки.
Псевдораспорку лучше добавлять на непосредственный родитель плавающих колонок, поэтому мы добавляем её на .header-top
, а не на .container
. Если бы мы добавили распорку на центровщик, то возникли бы проблемы с заданием отступа между блоками .header-top
и .promo
.
Класс псеводраспорки из этого задания будет использоваться для создания сеток на флоатах и в других блоках.
Остаётся сбросить отступы по умолчанию у списка и добавить пару отступов между блоками, чтобы колонки шапки выстроились как в макете.
Следующий на очереди — блок с преимуществами.
Сначала зададим блоку .features
внутренние отступы сверху и снизу, как на макете.
Точно измерить вертикальные отступы почти невозможно. Дело в том, что в макете все элементы вырваны из потока, а вам нужно добавить их в поток страницы, сохранив при этом отступы.
Конечно, измерить отступы между двумя блоками с резкими границами легко. Все сложности начинаются при измерении отступов с участием текстовых элементов. Дело в том, что текстовая строка обычно выше, чем сами буквы. Когда текст попадает в поток страницы, пустое место сверху и снизу букв добавляет дополнительный отступ, по сравнению с тем, что в макете.
Как тогда быть с такими отступами? Обычно их измеряют «на глаз», а потом уже подгоняют под макет. Сначала вы измеряется отступ от границы блока до букв в строке, затем из него вычитается «пустое место» вверху (или внизу) строки и получается тот самый грубый отступ. Размер «пустого места» можно посчитать так: вычитаем из высоты строки размер шрифта и делим на два.
Полученный грубый отступ обычно либо подгоняют под макет, если нужно 100% совпадение, либо просто округляют, ведь полное совпадение «пиксель в пиксель» это скорее исключение, чем правило.
Посмотрим, как был получен отступ снизу у блока преимуществ. Сначала мы измерили отступ от нижней границы блока до нижней границы букв и получили 60px
. Затем вычли из высоты строки размер шрифта и поделили на два: (24px - 16px) / 2 = 4px
. То есть в каждой строке текста преимуществ под буквами есть 4 дополнительных пикселя. Вычитаем этот размер из общего отступа, получаем 56px
и округляем до 55px
. Ведь мы не гонимся за пиксельпёрфектом.
Конечно, в вёрстке итогового испытания мы по максимуму подгоним все вертикальные отступы под макет и сделаем их кратными 5.
А затем добавим в блок .features
контейнер-центровщик, чтобы отцентровать всё содержимое.
Используем float: left
, чтобы выстроить преимущества в ряд. После этого добавим псевдораспорку непосредственному родителю колонок (списку), чтобы убрать нежелательный эффект выпадания флоатов.
Чтобы добавить псевдораспорку, нужно просто добавить тегу класс clearfix
, стили для которого мы задали ранее.
Пока три колонки сделать не получилось. Почему?
Во-первых, у списка ul
есть собственные отступы по умолчанию, которые нужно обнулить. Напоминаем, что стили по умолчанию лучше сбрасывать у конкретного тега по классу, либо используя каскад от класса родительского блока.
Во-вторых, плавающим элементам-колонкам ширину нужно задавать явно. В противном случае их размер будет зависеть от содержания. Сейчас ширина колонок зависит от текста, поэтому в первый ряд влезло две колонки, а третья перенеслась на следующий.
Теперь немного математики.
Общая ширина колонки-преимущества по макету составляет 340px
. Она включает внутренние отступы справа и слева по 30px
(этот размер мы подобрали на глазок) и рамку слева шириной 1px.Но у первого блока рамки нет. Чтобы не усложнять расчёты, лучше вернуть блоку эту рамку (ранее мы рамку убирали совсем) и сделать её прозрачной.
Переходим к справочнику.
Сначала зададим для блока .cat-reference
внутренние отступы. Кстати, на примере справочника видно, почему мы задаём именно внутренние, а не внешние вертикальные отступы: у блока серый фон, и отступ должен включать этот фон. Такое возможно сделать только с внутренними отступами. В других блоках внутренние отступы делаем для единообразия.
Верхний отступ раздела получится больше, чем на макете за счёт отступов заголовка, но с этим отступами разберёмся в следующих частях.
Затем добавим в блок центровщик и перейдём к внутренним элементам.
Сетка в справочнике отличается от предыдущих разделов: блоки расположены друг под другом, так что обойдёмся без флоатов.
На этом шаге зададим ширину списка определений в справочнике как на макете.
Углубимся внутрь справочника.
Браузер добавляет отступы по умолчанию для списка определений и его элементов. Обнулим эти отступы, чтобы они нам не мешали.
Теперь нужно отделить одну статью справочника от другой. Тут нужно отметить, что список определений — не самая удобная для стилизации структура, потому что элементы в нём идут парами.
Мы могли бы задать отступ снизу для всех dd
, но тогда бы пришлось убирать лишний отступ снизу у последнего dd
с помощью дополнительного CSS-правила.
Можно поступить изящнее: добавить отступ сверху для dt
, перед которыми есть dd
. Тогда отступы добавятся всем dt
кроме первого, то есть отступы будут только между статьями. Для этого нам понадобится селектор с +
.
А у нас на очереди блок с отзывами.
Сначала традиционно добавим внутренние отступы для .reviews
и обернём его содержимое в блок-центровщик. Отступ сверху в .reviews
тоже пока будет больше чем в макете из-за отступов заголовка.
Сами отзывы расположим в две колонки с помощью уже хорошо знакомого приёма с float
. И не забываем про clearfix
!
И снова отзывы не выстроились в колонки.
Мы не задали плавающим блокам ширину, и их размеры рассчитались от содержимого. В нашем случае текст внутри отзывов распирает их на всю ширину родительского контейнера.
По макету общая ширина отзыва составляет 430px
(мы измерили её на глаз так, чтобы текст помещался в контейнер), которая складывается из рамки слева в 3px
, внутреннего отступа слева в 50px
и ширины содержимого 377px
. При таких размерах оступ между отзывами составляет 80px;
У элемента blockquote
есть свои отступы по умолчанию, которые в разных браузерах могут быть разными. Поэтому не забываем обнулить все остальные отступы.
С отзывами на этом всё, переходим к разделу с популярными товарами и прайс-листом.
Сначала зададим для блока .popular-and-price
внутренние отступы, затем обернём всё содержимое (два смысловых подраздела с товарами и прайс-листом) в общий контейнер-центровщик.
И напоследок зададим отступ снизу для списка товаров.
Итак, популярные товары.
Сами товары мы выстроим в колонки с помощью уже знакомых флоатов и псевдораспорок.
Дополнительная сложность с этим блоком появляется из-за макета: в нём границы блоков не совпадают с направляющими и измерять размеры нужно очень внимательно.
Общая ширина товара составляет 308px
, между товарами есть два отступа по 48px
. Чтобы проверить, что товары поместятся в контейнер содержимого пиксель в пиксель, посчитаем общую ширину трёх колонок и двух отступов между ними:
1 |
3 * 308px + 2 * 48px = 1020px |
Отлично, с замерами мы не ошиблись.
В дальнейшем, когда будем завершать оформление товаров и добавлять рамки, нужно будет не забыть уменьшить ширину.
Раздел с товарами может наполнять кто угодно, поэтому есть смысл подстраховаться на случай вставки слишком больших картинок. Для этого используем классический CSS-приём, когда картинкам задаётся масимальная ширина 100%
и автоматическая высота. С такими стилями картинки не вылезут за границы родительского блока и будут сохранять пропорции.
На прошлом шаге мы задали всем товарам внешний отступ справа, поэтому третий товар не поместился в контейнер-центровщик и перенёсся на следующую строку.
И это логично, ведь мы рассчитывали ширину с учётом двух отступов между колонкам, а не трёх.
Чтобы исправить ситуацию, нужно убрать лишний оступ у третьего блока.
И на этом работа над сеткой блока .popular-and-price
завершена.
Приступаем к блоку с формой обратной связи.
Обернём всё в центрирующий контейнер, зададим разграничивающие отступы, а также по аналогии с блоком справочника, зафиксируем ширину формы, тем самым обезопасим себя от возможных дальнейших изменений в её содержимом.
Детальную проработку стилей внутренних частей формы оставим на будущее.
Итак, без сетки остался только подвал.
Начнём с блока .page-footer
. Как обычно добавим центровщик и зададим нужные отступы.
В подвале есть три внутренних радела: верхний, средний и нижний.
Сейчас они располагаются слишком плотно друг к другу. Давайте зададим этим блокам вертикальные отступы, чтобы отделить их друг от друга.
Теперь детально займёмся каждым из разделов подвала.
В верхнем разделе нам нужно прижать логотип с помощью флоата влево и задать ему явные размеры по аналогии с тем, как мы это делали в шапке. Кнопку в подвале прижмём к правому краю по аналогии с шапкой, добавив ей такой же класс, что и у кнопки в шапке.
После этого останется только добавить clearfix
для блока footer-top
.
Теперь построим сетку среднего раздела подвала.
Тут всё по аналогии с предыдущими случаями из трёх колонок: флоат влево и clearfix
у footer-middle
.
Также не забываем задать ширину для колонок и добавить им внешние отступы справа, чтобы колонки не прилипали друг к другу.
Остался нижний раздел подвала.
Тут всё просто: блок с будущими иконками социальных сетей прижмём к левой части контейнера, а блок с копирайтом — к правой. А контейнеру добавим clearfix
.
На этом сетки крупных блоков готовы.
HTML
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 |
<!DOCTYPE HTML> <html lang="ru"> <head> <meta charset="utf-8"> <title>The Great Keksby</title> <base href="/assets/keksby8/"> <link rel="stylesheet" href="outlines.css"></link> </head> <body> <div class="page-header"> <div class="container"> <div class="header-top clearfix"> <div class="header-logo"> <img src="img/logo.png" alt="The Great Keksby" width="205" height="55"> </div> <ul class="main-nav"> <li><a href="#">Магазин</a></li> <li><a href="#">Каталог</a></li> <li><a href="#">Отзывы</a></li> </ul> <a class="btn btn-quick-order" href="#">Заказать</a> </div> <div class="promo"> <a href="#">Аксессуары для котов<br> Коллекция FW15</a> </div> </div> </div> <div class="features"> <div class="container"> <ul class="clearfix"> <li class="feature-item feature-choice"> <h2 class="feature-title">Выбор</h2> <p>Ваш питомец оценит широту нашего ассортимента аксессуаров.</p> </li> <li class="feature-item feature-quality"> <h2 class="feature-title">Качество</h2> <p>Наши товары не сломаются на второй день. Только на третий.</p> </li> <li class="feature-item feature-safety"> <h2 class="feature-title">Безопасность</h2> <p>Все изготовлено из натуральных материалов, безопасных для котов.</p> </li> </ul> </div> </div> <div class="cat-reference"> <div class="container"> <h2 class="section-title">Немного теории</h2> <a class="btn" href="#" title="Открыть справочник">Справочник</a> <dl> <dt> <h3 class="reference-title">Окрас кошек и котов</h3> <i class="reference-source">источник: <a target="_blank" href="https://ru.wikipedia.org">wikipedia</a></i> </dt> <dd> <img src="img/article-1.jpg" alt="Окрас кошек и котов" width="100" height="100"> <p>Окрас шерсти, кожи и глаз кошки обусловлен присутствием в них пигмента меланина. Меланин находится в теле волоса в виде микроскопических гранул, которые различаются по форме, размеру и количеству, что и вызывает различия в окрасе.</p> </dd> <dt> <h3 class="reference-title">Кошкин дом</h3> <i class="reference-source">источник: <a target="_blank" href="http://kotmur.spb.ru">kotmur.spb.ru</a></i> </i> </dt> <dd> <img src="img/article-2.jpg" alt="Кошкин дом" width="100" height="100"> <p>Нужен ли кошке Кошкин дом? Свой отдельный, обособленный от пространства городской квартиры Кошкин дом? Да, нужен! Нужен особый Кошкин дом, обустроенный по ее вкусу с лесенкой, с когтеточкой, с замкнутым, своим, отдельным уголком в ее, кошкином, доме.</p> </dd> </dl> </div> </div> <div class="reviews"> <div class="container"> <h2 class="section-title">Довольные коты</h2> <a class="btn" href="#" title="Посмотреть все отзывы">Все отзывы</a> <div class="reviews-list clearfix"> <blockquote class="review-item"> <p>Спасибо Кексу за давно напрашивающуюся идею! Набрал себе очков на все случаи жизни: для чтения и для вечеринки с котанами B-)</p> <cite class="review-author">Барсик, г. Москва</cite> </blockquote> <blockquote class="review-item"> <p>Я просто не могу без шоппинга и теперь не нужно тащить хозяйку в магазин, заказываю все аксессуары на сайте у Кекса он-лайн!</p> <cite class="review-author">Мурка, г. Санкт-Петербург</cite> </blockquote> </div> </div> </div> <div class="popular-and-price"> <div class="container"> <h2 class="section-title">Популярные товары</h2> <a class="btn" href="#" title="Посмотреть все товары">Каталог</a> <div class="popular-items clearfix"> <div class="catalog-item"> <img src="img/glasses-1.jpg" alt="очки «Классика жанра»" width="306" height="206"> <h3>Очки «Классика жанра»</h3> <b class="catalog-item-price">300 р.</b> <a href="#" class="btn btn-info">Описание</a> <a href="#" class="btn btn-buy">Купить</a> </div> <div class="catalog-item"> <img src="img/glasses-2.jpg" alt="очки «Жалюзи»" width="306" height="206"> <h3>Очки «Жалюзи»</h3> <b class="catalog-item-price">400 р.</b> <a href="#" class="btn btn-info">Описание</a> <a href="#" class="btn btn-buy">Купить</a> </div> <div class="catalog-item"> <img src="img/glasses-3.jpg" alt="очки «Базилис»" width="306" height="206"> <h3>Очки «Базилис»</h3> <b class="catalog-item-price">500 р.</b> <a href="#" class="btn btn-info">Описание</a> <a href="#" class="btn btn-buy">Купить</a> </div> </div> <h2 class="section-title">Прайс-лист на услуги</h2> <table class="price-list"> <tr> <th class="price-number">№</th> <th>Название услуги</th> <th>Кто оказывает</th> <th>Сколько стоит</th> </tr> <tr> <td class="price-number">1.</td> <td class="price-name">Стрижка</td> <td>Грумер</td> <td>500 руб.</td> </tr> <tr> <td class="price-number">2.</td> <td class="price-name">Заточка когтей</td> <td>Грумер</td> <td>300 руб.</td> </tr> <tr> <td class="price-number">3.</td> <td class="price-name">Накрутка усов</td> <td>Грумер</td> <td>100 руб.</td> </tr> <tr> <td class="price-number">4.</td> <td class="price-name">Подбор аксессуаров</td> <td>Стилист</td> <td>1550 руб.</td> </tr> </table> </div> </div> <div class="feedback"> <div class="container"> <h2 class="section-title">Остались вопросы?</h2> <p class="feedback-tip">Свяжитесь с нами и мы развеем оставшиеся у вас сомнения!</p> <form class="feedback-form" action="/keksby-mail" method="post"> <div class="feedback-form-group"> <label for="fullname">Представьтесь, пожалуйста:</label> <input type="text" name="fullname" id="fullname"> </div> <div class="feedback-form-group"> <label for="phone">Контактный телефон:</label> <input type="text" name="phone" id="phone"> </div> <div class="feedback-form-group"> <label for="email">Электронная почта:</label> <input type="text" name="email" id="email"> </div> <div class="checkbox-area"> <label> <input type="checkbox" name="subscription"> Я согласен получать спам и смс на телефон </label> </div> <div class="feedback-form-group"> <label for="topic">Тема обращения:</label> <select name="topic" id="topic"> <option value="1">Условия доставки</option> <option value="2">Возврат товара</option> <option value="3">Жалоба в Роспотребнадзор</option> </select> </div> <div class="feedback-form-group"> <label for="message">Текст обращения:</label> <textarea name="message" id="message"></textarea> </div> <input type="submit" class="btn" value="Отправить"> </form> </div> </div> <div class="page-footer"> <div class="container"> <div class="footer-top clearfix"> <div class="footer-logo"> <img src="img/logo.png" alt="The Great Keksby" width="205" height="55"> </div> <a href="#" class="btn btn-quick-order">Заказать</a> </div> <div class="footer-middle clearfix"> <div class="footer-menu"> <h3>Магазин</h3> <ul> <li><a href="#">Домики</a></li> <li><a href="#">Одежда</a></li> <li><a href="#">Очки</a></li> </ul> </div> <div class="footer-menu"> <h3>Отзывы</h3> <ul> <li><a href="#">Показать</a></li> <li><a href="#">Оставить</a></li> </ul> </div> <div class="footer-menu"> <h3>Прайс-лист</h3> <ul> <li><a href="#">Скачать прайс</a></li> </ul> </div> </div> <div class="footer-bottom clearfix"> <div class="footer-social"> <b>Давайте дружить!</b> <a class="social-btn" href="https://vk.com/htmlacademy">Вконтакте</a> <a class="social-btn" href="https://facebook.com/htmlacademy">Фейсбук</a> <a class="social-btn" href="https://instagram.com/htmlacademy">Инстаграм</a> </div> <div class="footer-copyright"> С <span class="heart">любовью</span> для <a href="https://htmlacademy.ru">HTML Academy</a> </div> </div> </div> </div> </body> </html> |
CSS
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 |
body { min-width: 1040px; margin: 0; padding: 0; font-size: 18px; line-height: 24px; font-family: "Arial", sans-serif; color: #404040; background-color: white; } .container { width: 1020px; margin: 0 auto; } .clearfix::after { content: ""; display: table; clear: both; } .page-header { min-height: 490px; padding-top: 35px; background-image: url("img/header-bg.jpg"); background-repeat: no-repeat; background-position: center; background-size: cover; } .page-header, .page-footer { background-color: #363636; color: #c3c3c3; } .header-top { margin-bottom: 125px; } .header-logo { float: left; width: 205px; height: 55px; } .main-nav { float: left; width: 520px; margin: 0; margin-left: 125px; padding: 0; list-style: none; } .main-nav li { text-transform: uppercase; } .main-nav a { color: #ffffff; text-decoration: none; } .main-nav a:hover { text-decoration: underline; } .main-nav a:active { color: rgba(255, 255, 255, 0.3); } .btn { color: #a38b70; text-transform: uppercase; text-decoration: none; } .btn:hover { color: #8d745a; } .btn:active { color: rgba(141, 116, 90, 0.3); } .btn-quick-order { float: right; } .promo { font-weight: bold; font-size: 45px; line-height: 55px; font-family: "Georgia", serif; text-align: center; } .promo a { color: #ffffff; text-decoration: none; } .features { padding-top: 50px; padding-bottom: 55px; } .features ul { margin: 0; padding: 0; list-style: none; } .feature-item { float: left; width: 279px; padding-top: 90px; padding-right: 30px; padding-left: 30px; text-align: center; border-left: 1px solid #d9d9d9; } .feature-item:first-child { border-left-color: transparent; } .feature-choice { background: url("img/feature-1.png") top center no-repeat; } .feature-quality { background: url("img/feature-2.png") top center no-repeat; } .feature-safety { background: url("img/feature-3.png") top center no-repeat; } .feature-title { font-weight: bold; font-size: 30px; line-height: 30px; font-family: "Georgia", serif; color: #a38b70; } .feature-item p { font-size: 16px; } .cat-reference { padding-top: 70px; padding-bottom: 90px; background-color: #f2f2f2; } .section-title { font-weight: bold; font-size: 45px; line-height: 55px; font-family: "Georgia", serif; color: #a38b70; } .cat-reference dl { width: 820px; } .cat-reference dt { margin: 0; margin-bottom: 10px; } .cat-reference dd { margin: 0; font-size: 16px; } .cat-reference dd + dt { margin-top: 70px; } .cat-reference dd img { border-radius: 5px; } .reference-title { font-size: 24px; } .reference-source { font-size: 16px; color: #666666; font-style: italic; } .reference-source a { color: #a38b70; } .reference-source a:hover { color: #8d745a; } .reference-source a:active { color: rgba(141, 116, 90, 0.3); } .reviews { padding-top: 70px; padding-bottom: 90px; } .review-item { float: left; width: 377px; margin: 0; margin-right: 80px; padding: 0; padding-left: 50px; font-size: 16px; border-left: 3px solid #a38b70; } .review-author { font-weight: bold; font-style: italic; } .popular-and-price { padding-top: 70px; padding-bottom: 90px; background-color: #f2f2f2; } .popular-items { margin-bottom: 50px; } .catalog-item { float: left; width: 308px; margin-right: 48px; font-size: 16px; } .catalog-item:last-child { margin-right: 0; } .catalog-item img { max-width: 100%; height: auto; } .catalog-item h3 { font-size: 16px; color: #000000; } .price-list { width: 100%; border-collapse: collapse; line-height: 30px; } .price-list th { font-weight: normal; font-size: 14px; text-align: left; text-transform: uppercase; } .price-list td { border: 1px solid #d8d8d8; } .price-list th, .price-list td { padding: 5px 10px; } .price-list .price-number { text-align: center; } .price-list .price-name { font-weight: bold; color: #000000; } .feedback { padding-top: 60px; padding-bottom: 70px; } .feedback-tip { font-size: 16px; } .feedback-form { width: 630px; padding-right: 390px; background-image: url("img/write.jpg"); background-repeat: no-repeat; background-position: 100% 40px; } .feedback-form-group { padding: 10px 0; } .feedback-form-group label { font-size: 12px; text-transform: uppercase; } .feedback-form input[type="text"], .feedback-form select, .feedback-form textarea { font: inherit; color: inherit; border: 2px solid #d5d5d5; } .feedback-form input[type="text"]:hover, .feedback-form select:hover, .feedback-form textarea:hover { border-color: #bebebe; } .feedback-form input[type="text"]:focus, .feedback-form select:focus, .feedback-form textarea:focus { border-color: #8d745a; } .checkbox-area { border-bottom: 1px solid #d5d5d5; } .page-footer { padding-top: 45px; padding-bottom: 50px; } .footer-top { margin-bottom: 45px; } .footer-logo { float: left; width: 205px; height: 55px; } .footer-middle { margin-bottom: 50px; padding-top: 50px; } .footer-middle, .footer-bottom { border-top: 1px solid #5e5e5e; } .footer-menu { float: left; width: 150px; margin-right: 20px; } .footer-menu h3 { font-weight: bold; font-size: 24px; font-family: "Georgia", serif; color: #a38b70; } .footer-menu ul { list-style: none; } .footer-menu a { font-size: 16px; color: #c3c3c3; text-decoration: none; } .footer-menu a:hover { color: #ffffff; } .footer-menu a:active { color: rgba(255, 255, 255, 0.3); } .footer-bottom { padding-top: 50px; } .footer-social{ float:left; width:490px; } .footer-copyright{ float:right; width:236px; } .footer-social b { font-size: 24px; font-family: "Georgia", serif; color: #a38b70; } .social-btn { color: #ffffff; } .footer-copyright { color: #ffffff; text-transform: uppercase; } .footer-copyright a { color: #ffffff; text-decoration: none; } .footer-copyright a:hover { text-decoration: underline; } .footer-copyright a:active { color: rgba(255, 255, 255, 0.3); } |