Статьи

Как разработать и кодировать гибкий сайт

В этом уроке мы будем разрабатывать и кодировать простую веб-страницу в стиле блога. Мы уделим особое внимание тому, чтобы сделать наш дизайн гибким и доступным, используя чистый и простой XHTML и CSS. Это руководство предназначено для начинающих и для всех, кто хочет улучшить доступность своего веб-дизайна.


  • Сложность: Легко
  • Расчетное время завершения: 1,5-2 часа

Таким образом, наша примерная веб-страница будет основана на простой теме блога, с блоговой структурой WordPress, похожей на домашнюю страницу nettuts. Это будет выглядеть примерно так:

Идея здесь не в том, чтобы воспроизвести мой пример, а в том, чтобы вы могли следовать и применять методы к своим собственным проектам, надеясь узнать что-то одно или два о базовых концепциях.

Мы собираемся свести использование Photoshop здесь к минимуму. Обычно я макетирую весь дизайн в Photoshop перед кодированием, но здесь я просто собираюсь создать базовый макет, а потом буду беспокоиться о содержимом. Это пример другого рабочего процесса, он будет иметь больше смысла по мере продвижения вперед.

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

Я решил сделать страницу шириной 900px, так что мой документ имеет ширину 1000px и длину 1200px (не знаю, почему я оставил себе так мало места, сделайте вашу страницу шире, если хотите). Поместите направляющие на 50 пикселей и 950 пикселей, чтобы получить область шириной 900 пикселей. У нас будет область контента и боковая панель, а область контента будет иметь ширину 600 пикселей, поэтому поместите еще одно руководство на 650 пикселей.

Фон заголовка — это всего три прямоугольника для верхних ссылок, основного заголовка и области навигации. Я использовал слои формы и добавил градиенты к стилям слоя. Также есть границы в 1 пиксель между верхней панелью и областью заголовка, а также между заголовком и областью навигации.

Фон нижнего колонтитула — еще один градиент, но на этот раз с границей в 2 пикселя вверху.

2
3
4
5

Затем добавьте фон для боковой панели, я выбрал # d8ddd1.

6

Затем мы берем инструмент ввода (T) и добавляем логотип и слоган, а также некоторые основные навигационные ссылки. шрифты:

Название блога:

  • Шрифт: бесчисленное количество Pro
  • Размер: 48pt
  • Цвет: #ffffff (белый)

Описание блога:

  • Шрифт: бесчисленное количество Pro
  • Размер: 24pt
  • Цвет: #ffffff

Основные навигационные ссылки:

  • Шрифт: Arial
  • Размер: 18pt
  • Цвет: # 2b2b2b

«добро пожаловать, гость» и «оставаться в курсе»:

  • Шрифт: Arial
  • Размер: 12pt
  • Цвет: #fffff

«войти, зарегистрироваться» и «подписаться через …»:

  • Цвет: # a5bf8d
  • Стиль: подчеркивание
7

Мы собираемся включить только один пример «поста» в наш макет Photoshop, потому что я считаю, что работа с шрифтом в Photoshop — это настоящая боль, но мы подробнее расскажем о стилизации раздела контента позже. Шрифты, которые я использую для фиктивного поста:

Заголовок поста:

  • Шрифт: Arial
  • Размер: 24pt
  • Цвет: # 3c3f40
  • Стиль: Жирный

Дата, категория и информация об авторе:

  • Размер: 11pt

Пункты:

  • Размер: 12pt
8

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

Выберите инструмент «Срез» (C) и вырежьте тонкие кусочки каждого из фоновых прямоугольников: верхняя панель, область заголовка, навигация и нижний колонтитул. Не включайте границы, мы добавим их с помощью CSS. Попробуйте увеличить масштаб очень близко, чтобы убедиться, что вы получите правильные части. Срезы, которые я нарезаю, имеют ширину около 5 пикселей, но ширина не очень важна на этом этапе.

9
10

Выберите «Файл / Сохранить для Интернета и устройств …» Удерживая нажатой клавишу «Shift», щелкните, чтобы выбрать каждый фрагмент. Из выпадающего меню «presets» выберите «jpeg. Снимите флажок« convert to sRGB »» (я считаю, что преобразование приглушает цвета). Все остальные настройки следует оставить по умолчанию. Нажмите «Сохранить». Во всплывающем окне убедитесь, что «выбранные фрагменты» отображаются в выпадающем меню «фрагменты», и нажмите «Сохранить».

Пользователи GIMP: я не уверен, что у gimp есть такой инструмент, как ломтик, но вам просто нужно сделать прямоугольные выделения, сохранить их в отдельных документах, обрезать их и сохранить как оптимизированные JPEG-файлы.

Для более глубокого изучения процесса нарезки и сохранения см. Мой предыдущий учебник .

Если вы не знакомы с процессом организации файлов и папок для веб-страницы, снова посмотрите мой другой учебник, связанный выше.

Откройте ваш любимый редактор кода и создайте новый файл с именем index.html.
Мы попытаемся использовать как можно меньше тегов div, чтобы сделать нашу разметку содержательной и семантической. При этом для поддержания гибкого макета с изменяемыми размерами нам нужно заключить некоторые элементы в несколько элементов div. Подробнее об этом позже.

Все элементы на нашей странице будут содержаться в двух элементах div, называемых «main» и «footer». Внутри «основного» div у нас будет div для верхней панели, заголовка и области содержимого. Нижний колонтитул будет содержать внутренний div для письменного содержимого.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
    <!DOCTYPE html PUBLIC «-//W3C//DTD XHTML 1.0 Strict//EN»
    «http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd»>
    <html xmlns=»http://www.w3.org/1999/xhtml» xml:lang=»en» lang=»en»>
    <head>
        <meta http-equiv=»Content-Type» content=»text/html; charset=UTF-8″ />
        <title>My Blog</title>
    </head>
    <body>
         
        <div id=»main»>
             
            <div id=»top_bar»>
            </div><!— end top bar —>
             
            <div id=»header»>
            </div><!— end header —>
             
            <div id=»content»>
            </div><!— end content —>
         
        </div><!— end main —>
         
        <div id=»footer»>
         
            <div id=»footer_content»>
            </div><!— end footer content —>
         
        </div><!— end footer —>
    </body>
</html>

Фон синей полосы вверху растягивает всю ширину страницы, но две текстовые области должны находиться в пределах 900px от страницы. Чтобы достичь этого, нам нужно, чтобы содержимое содержалось в другом элементе div, который будет иметь класс «container».
В нашей верхней панели у нас будет два абзаца, один для входа в систему, другой для параметров подписки. Поскольку они собираются быть плавающими, каждому нужно дать уникальный идентификатор. На самом деле, если бы мы хотели быть полностью семантическими, мы могли бы закодировать эти два абзаца как неупорядоченный список с двумя элементами списка. Попробуйте оба способа, посмотрите, сможете ли вы заставить это работать.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
<div id=»main»>
             
    <div id=»top_bar»>
        <div class=»container»>
            <p id=»login»>Welcome, Guest <a href=»#»>Login</a> <a href=»#»>Sign Up</a></p>
            <p id=»subscribe»> Stay Updated: <a href=»#»>Subscribe via RSS</a> <a href=»#»>Email Updates</a></p>
        </div><!— end bar container —>
    </div><!— end top bar —>
             
    <div id=»header»>
        </div><!— end header —>
             
    <div id=»content»>
    </div><!— end content —>
         
</div><!— end main —>

Здесь мы сталкиваемся с той же проблемой, что и на последнем шаге: фоновое изображение должно растягиваться до бесконечности. Чтобы содержать контент, нам нужно поместить его в другой div. Поскольку заголовок также будет находиться на нашей центрированной странице шириной 900 пикселей, мы можем повторно использовать класс «контейнер». Заголовок блога будет заключен в тег <h1>, а описание / слоган будет абзацем с уникальным идентификатором.

1
2
3
4
5
6
<div id=»header»>
    <div id=»branding» class=»container»>
        <h1>My Blog</h1>
        <p id=»desc»>Description of My Blog</p>
    </div><!— end branding —>
</div><!— end header —>

Также внутри заголовка находится меню навигации, которое будет заключено в неупорядоченный список с идентификатором «menu», которое будет заключено в другой элемент div с идентификатором «navigation».
Поскольку мы хотим, чтобы навигационное меню было центрировано, мы можем также добавить наш класс-контейнер в ul.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
<div id=»header»>
                 
    <div id=»branding» class=»container»>
        <h1>My Blog</h1>
        <p class=»desc»>Description of My Blog</p>
    </div><!— end branding —>
                 
    <div id=»navigation»>
        <ul id=»menu» class=»container»>
            <li><a href=»#»>Home</a></li>
            <li><a href=»#»>About</a></li>
            <li><a href=»#»>Blog</a></li>
            <li><a href=»#»>Contact</a></li>
        </ul>
    </div><!— end navigation —>
             
</div><!— end header —>

Здесь мы пишем навигационные ссылки в нижнем регистре, но в нашем CSS-файле мы преобразуем их в верхний регистр. Вы можете написать их в заглавных буквах здесь, но мой ключ блокировки заглавных букв сломан, и этот способ обеспечивает более чистую разметку.

Область содержимого не имеет фонового изображения или цвета, поэтому нам не нужно заключать ее в дополнительный элемент div. Чтобы отцентрировать его, мы можем также дать контенту div класс «container». Внутри содержимого div у нас есть еще два div, один для постов в блоге, а другой для боковой панели.

При разработке блога мы должны учитывать тот факт, что содержание будет меняться и может включать в себя любое количество элементов, включая списки, изображения, цитаты, заголовки и выделенный текст. Чтобы подготовиться, нам нужно стилизовать каждый возможный элемент, который может появиться. Поэтому наш образец контента должен включать все . Это иногда называют «методом песочницы». Чтобы получить фиктивный контент, предлагаю посетить HTML Ipsum .

Мы собираемся разделить наш пример контента на пару разных постов с заголовками, заключенными в теги <h2>. Каждый пост также будет содержать стандартную информацию о дате, авторе и т. Д., Содержащуюся в теге <small>.

01
02
03
04
05
06
07
08
09
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
<div id=»content» class=»container»>
    <div id=»posts»>
        <h2>Don’t Cancel Chuck!</h2>
        <small>on July 01 in <a href=»#»>General</a> tagged <a href=»#»>petitions</a> by <a href=»#»>admin</a></small>
        <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
        Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
        Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.
        Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
        </p><blockquote><p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.
        Ut a est eget ligula molestie gravida.
        at luctus turpis elit sit amet quam.
        <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
        <a href=»#»>Read More</a></p>
                 
        <h2>Alien Spacecraft found in New Mexico</h2>
        <small>on July 01 in <a href=»#»>General</a> tagged <a href=»#»>petitions</a> by <a href=»#»>admin</a></small>
        <p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas.
        Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante.
        Aenean ultricies mi vitae est. Mauris placerat eleifend leo.</p>
        <ul>
            <li>Lorem ipsum dolor sit amet, consectetuer adipiscing elit.</li>
            <li>Aliquam tincidunt mauris eu risus.</li>
            <li>Vestibulum auctor dapibus neque.</li>
        </ul>
        <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
        Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p>
                 
        <h2>Ghostly Goo in your Kitchen Sink?</h2>
        <small>on July 01 in <a href=»#»>General</a> tagged <a href=»#»>petitions</a> by <a href=»#»>admin</a></small>
        <p><strong>Pellentesque habitant morbi tristique</strong> senectus et netus et malesuada fames ac turpis egestas.
        Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante.
        <em>Aenean ultricies mi vitae est.</em> Mauris placerat eleifend leo.
        ornare sit amet, wisi.
        <h4>Header Level 4</h4>
        <ol>
            <li>Lorem ipsum dolor sit amet, consectetuer adipiscing elit.</li>
            <li>Aliquam tincidunt mauris eu risus.</li>
        </ol>
        <blockquote><p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.
        Ut a est eget ligula molestie gravida.
        at luctus turpis elit sit amet quam.
        <h3>Header Level 3</h3>
        <ul>
            <li>Lorem ipsum dolor sit amet, consectetuer adipiscing elit.</li>
            <li>Aliquam tincidunt mauris eu risus.</li>
        </ul>
        <ol>
            <li>Lorem ipsum dolor sit amet</li>
            <li>Consectature vestiblum</li>
        </ol>
             
    </div><!— end posts —>
             
 
</div><!— end content —>

В типичном блоге боковая панель содержит различные виджеты, которые отображают ссылки на другие страницы или статьи, и каждый виджет обычно представляет собой неупорядоченный список тегов привязки. Здесь у нас будут виджеты «категории», «последние сообщения» и «архивы». Таким образом, наш div боковой панели будет содержать три списка, каждый с заголовком, заключенным в тег <h3>.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<div id=»sidebar»>
                 
    <h3>Categories</h3>
    <ul>
        <li><a href=»#»>General</a></li>
        <li><a href=»#»>Ghost Sightings</a></li>
        <li><a href=»#»>UFO Crashes</a></li>
        <li><a href=»#»>Government Coverups</a></li>
        <li><a href=»#»>International Conspiracies</a></li>
    </ul>
                     
    <h3>Recent Posts</h3>
    <ul>
        <li><a href=»#»>Ghost Sighting in Mansion</a></li>
        <li><a href=»#»>UFO picked up by satelites</a></li>
        <li><a href=»#»>Mutants amoung us?</a></li>
        <li><a href=»#»>Bigfoot: Fact or Fiction?</a></li>
    </ul>
                 
    <h3>Archives</h3>
    <ul>
        <li><a href=»»>June 2008</a></li>
        <li><a href=»»>May 2008</a></li>
        <li><a href=»»>April 2008</a></li>
        <li><a href=»»>March 2008</a></li>
    </ul>
                 
    </div><!— end sidebar —>
                 
</div><!— end content —>
         
</div><!— end main —>

Нижний колонтитул будет работать так же, как верхняя строка, верхний колонтитул и навигация, с внешним элементом div для размещения повторяющегося фона и внутренним элементом div для центрирования содержимого и его размещения в пределах 900 пикселей на нашей странице. Для этого нам просто нужно добавить класс «container» в наш div «footer content».

В нашем нижнем колонтитуле будет три столбца: информация об авторских правах, ссылки и параметры подписки. Каждый должен будет содержаться в своем собственном div.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<div id=»footer»>
         
    <div id=»footer_content» class=»container»>
                 
        <div id=»copyright»>
            <p>Copyright © 2009.<br /> All Rights Reserved.</p>
        </div>
                 
        <div id=»links»>
            <h4>Links</h4>
            <ul>
                <li><a href=»#»>PSDtuts — Photosohp tutorials</a></li>
                <li><a href=»#»>NetTtuts — Web development and design tutorials</a></li>
                <li><a href=»#»>VectorTuts — Illustrator and vector tutorials</a></li>
                <li><a href=»#»>FlashTuts — Adobe Flash tutorials</a></li>
            </ul>
        </div>
                 
        <div id=»feeds»>
            <h4>Follow our updates</h4>
            <ul>
                <li><a href=»#»>Subscribe to RSS Feed</a></li>
                <li><a href=»#»>What is RSS?</a></li>
                <li><a href=»#»>Email Updates</a></li>
            </ul>
        </div>
                 
                 
    </div><!— end footer content —>
         
</div><!— end footer —>

Хорошо, мы сделали нашу разметку! Давайте посмотрим в браузере (я использую Safari 4, который, кстати, потрясающий)

11

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

Теперь самое интересное: придание нашей странице стиля. Приготовьтесь — чтобы достичь желаемого макета, нам придется столкнуться с некоторыми непонятными головными болями CSS. Я попытаюсь объяснить основные концепции, которые приводят к этим проблемам, чтобы вы не только узнали, как их решать, но и получили лучшее понимание того, как работает CSS и как решать любые проблемы, с которыми вы можете столкнуться , Давайте начнем!

Создайте новый документ «style.css» и создайте ссылку на него в заголовке HTML-документа:

1
2
3
4
5
<head>
        <meta http-equiv=»Content-Type» content=»text/html; charset=UTF-8″ />
        <title>My Blog</title>
        <link href=»style.css» rel=»stylesheet» type=»text/css» media=»screen» />
</head>

Прежде всего, нам нужно знать, с чем мы работаем, что означает избавление от стилей браузера по умолчанию.

Мы собираемся использовать простой сброс CSS, чтобы избавиться от этих надоедливых полей и стилей:

1
2
3
body, div, h1, h2, h3, h4, h5, h6, p, ul, ol, dl, dt, dd, img, form, fieldset, blockquote {
    margin:0px;
}

У нас также есть неправильный шрифт для всей нашей страницы, давайте исправим это:

1
body {font-family: Arial, helvetica, sans-serif;

Следующий шаг выглядит довольно аккуратно: помните, как мы добавили класс «контейнер» ко всем элементам div с текстовым содержимым? Пришло время, чтобы этот контейнер содержал наш контент! Как я уже говорил ранее, мы делаем нашу страницу шириной 900px, и нам нужно сосредоточить контент.

1
.container {width: 900px;

И вот так у нас есть хорошая веб-страница по центру шириной 900 пикселей.

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

Когда мы смотрим на нашу веб-страницу в браузере, мы видим кучу элементов разной ширины и высоты. Браузер, однако, видит только несколько коробок, уложенных друг на друга, причем каждый элемент занимает всю ширину контейнера. Веб-страница имеет очень простой «поток»: каждый элемент перемещается вниз по странице элементом над ним.
Чтобы два элемента сидели рядом друг с другом, нам нужно вывести их из обычного «потока» страницы.

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

Давайте попробуем это с нашими двумя маленькими параграфами:

1
2
3
p#login {float: left;
 
p#subscribe {float: right;

Загляните в браузер, и у нас проблема! Логотип h1 переместился вверх между двумя плавающими элементами. Когда вы перемещаете элементы, вы как бы говорите им «нарушать правила», единственная проблема в том, что когда вы позволяете некоторым элементам нарушать правила, другие элементы тоже начинают это делать! Нам нужен способ сообщить браузеру, что эти два абзаца и ТОЛЬКО эти два абзаца могут нарушать правила, поэтому после всплывающих элементов нормальный поток восстанавливается. Для этого нам нужно добавить правило в родительский div двух плавающих элементов, что позволяет двум абзацам внутри него плавать, не затрагивая остальную часть страницы.

12

Для этого нам нужно добавить свойство в содержащий div div «overflow» и установить значение «hidden».

1
#top_bar {overflow: hidden;

Не очень важно понимать, что переполнено или где оно скрывается, если вы понимаете, что правило переполнения: скрытое управляет поведением плавающих элементов в div. Я не хочу никого запутывать или пугать, но эта техника не всегда работает во всех браузерах. Это работает здесь, но всегда проверяйте в IE свои собственные проекты. Есть целый ряд других техник, которые стоит отметить, и все они имеют свои преимущества. Питер-Поль Кох описывает метод, аналогичный тому, который я использую здесь, в своей статье « Очистка поплавков» . Стив Смит описывает свой метод «плавающего (почти) всего» в своем посте « Очистка поплавков: метод FnE» . Кроме того, это немного более продвинутая техника, но Тони Аслетт впервые применил довольно изобретательную и хитрую технику, описанную в статье « Как очистить плавающие объекты без структурной разметки» . Выберите метод, который лучше всего подходит для вас, и не забудьте проверить свои браузеры!

Еще одна важная вещь о float — вы всегда должны указывать ширину. Ваш CSS все равно будет проверяться, если вы этого не сделаете (вы получите предупреждение), но это лучшая практика, и вы иногда получаете неожиданные результаты в некоторых браузерах, если вы этого не делаете.

Поскольку мы хотим, чтобы размер нашего макета был легко изменяемым, мы не будем использовать значения в пикселях, вместо этого мы будем использовать проценты. Мы также можем позволить каждому элементу занимать 50% ширины. Поскольку мы предоставили ему столько места, абзац подписки переместился влево. Мы можем заставить его снова придерживаться права, указав text-align: right.

1
2
3
p#login {float: left;
 
p#subscribe {float: right;

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

Мы хотим сделать нашу веб-страницу максимально доступной и гибкой, чтобы охватить как можно большую аудиторию, верно? Это включает в себя разрешение читателям изменять размер текста до удобного размера. Сейчас разные браузеры по-разному справляются с изменением размера, но, как обычно, проблемным браузером является IE / Win. В Internet Explorer, если ваш размер текста установлен в пикселях, вы не можете изменить его размер, поэтому ваш читатель застрянет с любым размером шрифта, который вы указали. Это не очень приятно, особенно для читателей с плохим зрением. Чтобы исправить эту проблему, нам нужно использовать другой юнит — эмс.

Ems — это относительная единица измерения размера — это означает ширину буквы «m» независимо от размера шрифта. Размер по умолчанию, установленный браузерами, равен 16px, поэтому 1em будет равен размеру шрифта 16px.

Чтобы сделать нашу веб-страницу полностью масштабируемой, мы можем конвертировать все размеры наших шрифтов в ems. Простой способ сделать это с помощью веб-приложения Em Calculator (лучше всего работает в FireFox).

Однако, чтобы избежать путаницы, есть более простой способ. Поскольку ems относятся к стандартному размеру шрифта страницы, если мы изменим значение по умолчанию, значения em будут другими.

Чтобы упростить математику, мы можем дать себе основание 10, установив шрифт по умолчанию на 10 пикселей вместо 16. Чтобы сделать это, мы просто указываем в нашем файле CSS, что наши шрифты должны быть 62,5% от значения по умолчанию.

1
body {font-family: Arial, helvetica, sans-serif;

Теперь нам просто нужно разделить каждый размер шрифта в пикселях на 10, и у нас есть значение em. Для начала, размер шрифта для наших двух тегов <p> в верхней части страницы составляет 12 пикселей, что составляет 1,2 ems.

1
2
3
#top_bar p {font-size: 1.2em;
 
#top_bar a {font-size: 1.2em;

Затем мы добавляем повторяющееся фоновое изображение, которое мы вырезали из нашего PSD:

1
#top_bar {overflow: hidden;

Нам нужно добавить немного отступа к верху и низу абзацев, чтобы изображение растянулось на полную высоту. Чтобы получить правильные значения, нам нужно вернуться к нашему PSD и измерить высоту стержня с помощью инструмента линейки: у меня получается 26 пикселей в высоту. Поскольку наш текст имеет высоту 12px, общий отступ будет 26-12 или 14px. Это означает, что мы добавляем 7px отступов сверху и 7px снизу. (Эти значения иногда отключаются на пиксель или два, но это хорошее место для начала, просто продолжайте проверять в своем браузере)

1
2
3
4
5
6
#top_bar {
    overflow: hidden;
    background: url(images/bar_slice.jpg) repeat-x;
    padding-top: 7px;
    padding-bottom: 7px;
}

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

Проверьте это, это выглядит так же, как наш PSD. Но вот где все становится сложнее: попробуйте изменить размер текста в вашем браузере. Когда мы увеличиваем размер текста, меняются соотношения, мы теряем нижний отступ, и текст в конечном итоге выходит за пределы фона. Чтобы сделать сайт более «неразрушимым», нам нужно, чтобы фон растягивался по мере роста текста или добавления большего количества контента, чтобы всегда было 7px отступов сверху и снизу, независимо от размера текста. , Поскольку наше фоновое изображение имеет высоту всего 26 пикселей, нам нужно что-то еще, чтобы растянуть дальше. То, что мы собираемся сделать, это в основном поместить сплошной цвет позади изображения, чтобы, когда текст становится больше и изображение не может его содержать, цвет позади него просвечивает. Цвет в нижней части нашего градиента # 08413c. Итак, давайте добавим это к нашему фону. Чтобы указать, что мы хотим, чтобы изображение всегда прилипало к верхней части элемента, чтобы цвет растягивался снизу, мы добавляем значение background-position после URL-адреса изображения.

1
background: #08413c url(images/bar_slice.jpg) top repeat-x;

Теперь попробуйте изменить размер текста: фон растет вместе с ним, и выглядит примерно так же, как становится больше. Это также позволяет нам знать, что если бы мы захотели добавить вторую строку контента позже, нам бы не пришлось ничего менять в нашем CSS. Способность элемента расширяться для большего или большего объема текста часто упускается из виду при веб-разработке, и это приводит к разрушению страниц при изменении размера текста. Просто зайдите на домашнюю страницу моего университета , попробуйте сделать текст на шаг больше, и вы потеряете навигационную ссылку!

Еще одна вещь, нам просто нужно добавить эту границу 1px в нижней части нашего бара:

1
border-bottom: 1px solid #7ab7b7;

Итак, вот где мы сейчас находимся:

13

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

1
2
3
#header {
    background: #01835f url(images/header_slice2.jpg) top repeat-x;
}

Теперь давайте сделаем наши стили шрифтов:

01
02
03
04
05
06
07
08
09
10
11
12
13
h1 {
    font-family: «Myriad Pro», arial, sans-serif;
    color: #fff;
    font-weight: normal;
    font-size: 4.8em;
    padding-top: 25px;
}
 
p.desc {
    font-family: «Myriad Pro», arial, sans-serif;
    color: #fff;
    font-size: 2.4em;
}

Хорошо, теперь нам нужно выложить наше описание рядом с нашим логотипом. Это может быть достигнуто с помощью плавающего, но я попробовал это и столкнулся с проблемами с указанием ширины, и мне удалось получить гораздо лучший результат, используя абсолютное позиционирование. Плюс это дает мне возможность объяснить важную концепцию!

Если мы хотим позиционировать элемент вне «потока» страницы без использования плавающих элементов, мы можем использовать абсолютное позиционирование, которое в основном позволяет вам позиционировать элемент в любом месте внутри div, независимо от других элементов внутри div. Это означает, что когда вы указываете позицию, скажем, left: 10px, он будет располагать элемент 10px слева от стороны div, независимо от того, есть ли там другой элемент.
Во-первых, чтобы абсолютно позиционировать элемент, нам нужно установить относительное положение родительского элемента div, поскольку элемент с абсолютным позиционированием расположен относительно родительского элемента div.

1
2
3
4
5
#branding {
    overflow: hidden;
    margin-bottom: 30px;
    position: relative;
}

Теперь мы можем установить абсолютную позицию нашего описания. Когда используется position: absolute, мы можем указать его положение в терминах left, right, top и bottom, используя пиксели, проценты или ems. Во-первых, верх — описание почти точно на 50% от верха заголовка, поэтому давайте укажем, что:

1
2
3
4
5
6
7
p.desc {
    font-family: «Myriad Pro», arial, sans-serif;
    color: #fff;
    font-size: 2.4em;
    position: absolute;
    top: 50%;
}

Теперь нам нужно вытолкнуть его вправо, задав для него значение left:
если мы используем пиксели, то при изменении размера текста он будет ближе к h1, и в конечном итоге будет перекрывать его, поэтому отбросьте этот метод. Мы получаем ту же проблему с процентами, но не так резко. Лучше всего расположить его с помощью ems, который, как вы помните, увеличивается по мере увеличения размера текста, поэтому пространство между h1 и описанием останется при изменении размера текста.

1
2
position: absolute;
top: 50%;

И выглядит отлично!

14

Давайте очистим это меню навигации, избавимся от стиля списка и оформления текста, а также добавим стили шрифта.

1
2
3
4
5
6
7
8
ul#menu {list-style: none;
 
ul#menu li a {
    font-size: 1.8em;
    text-decoration: none;
    color: #2b2b2b;
    text-transform: uppercase;
}

Чтобы наши ссылки располагались горизонтально, мы собираемся установить для элементов списка значение float: left, чтобы каждый элемент списка «прилипал» к одному слева.

1
ul#menu li {float: left;

Мы, конечно же, сталкиваемся с той же проблемой, что и со всеми поплавками, но все, что нам нужно сделать, это добавить переполнение: скрыто в div навигации, и мы готовы идти дальше.

Каждый элемент списка находится на расстоянии около 45px, поэтому давайте добавим 45px отступа справа от каждого элемента.

1
2
3
4
ul#menu li {
    float: left;
    padding-right: 45px;
}

Примечание. Все эти значения заполнения могут быть записаны как:

1
padding: 11px 45px 11px 0px;

Сокращение для отступов (и полей) — это значения для верхнего-правого-нижнего-левого, все в одной строке. Я считаю, что лучший способ запомнить порядок — подумать о направлениях компаса: nesw.

Далее, давайте добавим фоновое изображение, используя ту же технику, что и раньше, чтобы гарантировать, что наш фон растягивается при изменении размера текста:

1
#navigation {background: #8ec196 url(images/nav_slice.jpg) top repeat-x;

Чтобы найти значение отступа, еще раз просто измерьте высоту бара (у меня 40px) и вычтите размер текста (18px), чтобы получить общее заполнение, и разделите на два: 40-18 = 22px.

1
ul#menu li {float: left;

Чтобы немного сдвинуть наше навигационное меню, проще всего просто добавить поле в нижней части элемента брендинга.

1
#branding {overflow: hidden;

И, наконец, граница в 1 пиксель в верхней части панели:

1
border-top: 1px solid #9cebda;

Это оно! Мы сделали с заголовком! Давайте взглянем:

15

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

1
2
3
#posts {float: left;
 
#sidebar {float: right;

И … ничего не случилось. По крайней мере, это выглядит так, прокрутите вниз, и вы увидите, что ваша боковая панель застряла с правой стороны под сообщениями. Прежде чем боковая панель сможет переместиться рядом с сообщениями, нам нужно указать, сколько места может занимать div сообщений, а также указать ширину боковой панели. Опять же, мы собираемся использовать проценты вместо пикселей, чтобы при изменении размера текста боковая панель оставалась в стороне.

1
2
3
#posts {float: left;
 
#sidebar {float: right;

И нам нужно скрыть переполнение нашего содержащего div:

1
#content {overflow: hidden;
16

Отлично, у нас есть хороший маленький макет с двумя колонками!

Так как мы использовали сброс CSS, содержание нашего поста вообще не имеет стиля, и нам нужно выполнить утомительную задачу по стилизации каждого возможного элемента. Мой рабочий процесс для этого немного отличается от остальной части страницы, поскольку я на самом деле не ссылаюсь на документ Photoshop. Я считаю, что стилизация шрифтов в Photoshop — это настоящая боль, поэтому я обычно их пропускаю. Чтобы получить стили для моих сообщений, я прошёл процесс проб и ошибок. Я обычно начинаю с настроек, похожих на стили браузера по умолчанию, которые вы можете найти по этой ссылке , и настраиваю их по своему вкусу. Я не собираюсь проходить весь процесс шаг за шагом, но вот что я придумал в конце:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#posts h2 {margin: 7px 0 4px 0;
 
#posts h2, h3, h4, h5, h6 {color: #3c3f40;
 
#posts p {line-height: 1.3em;
 
#posts small {font-size: 1.1em;
 
#posts a {color: #327800;
 
#posts blockquote {margin: 0.7em 3em;
 
#posts ol, ul, dl {font-size: 1.2em;
 
#posts h3, h4, h5, h6 {padding: 4px 0;
 
#posts strong {font-weight: bolder;
 
#posts em {font-style: italic;
 
#posts code {font-size: 1.2em;
 
#posts h3 {font-size: 1.8em;}
 
#posts h4 {font-size: 1.4em;

Который должен выглядеть примерно так:

17

Теперь в верхней части нашего поста около 35px, но у наших тегов h2 уже есть поле в 7px в верхней части, поэтому давайте добавим поле в 28px к верхней части div записей.

1
2
3
4
5
#posts {
    float: left;
    width: 67%;
    margin-top: 28px;
}

И это об этом для раздела сообщений. На боковой панели!

Прежде всего, давайте добавим в этот цвет фона:

1
#sidebar {float: right;

И исправьте стили шрифта:

01
02
03
04
05
06
07
08
09
10
11
#sidebar h3 {
    font-size: 1.6em;
    color: #3c3f40;
    margin-top: 10px
}
 
#sidebar ul {list-style: none;
 
#sidebar ul li {font-size: 1.2em;
 
#sidebar ul li a {text-decoration: none;color: #525254;

Нам также нужно сдвинуть боковую панель на 25 пикселей (35 пикселей — отступ 10 пикселей вверху тегов h3). На этот раз, однако, мы не можем использовать свойство margin-top, потому что это переместит всю боковую панель, включая фон, вниз по странице. Мы хотим, чтобы фон начинался прямо под панелью навигации, а содержание начиналось на 35 пикселей ниже, поэтому нам нужно использовать свойство padding-top. Нам также нужно заполнить слева, справа и снизу, и справа будет звучать 25 пикселей, поэтому мы можем объявить все это в одном значении заполнения:

1
2
3
4
5
6
#sidebar {
    float: right;
    background: #d8ddd1;
    padding: 25px;
    width: 33%;
}

Но нет! Наша боковая панель больше не на стороне! Это потому, что мы добавили отступы по бокам боковой панели. Когда вы добавляете отступ к элементу, вы фактически делаете его больше. Мы только что сделали нашу боковую панель на 50 пикселей шире, поэтому теперь ширина плавающих элементов составляет более 100%. Чтобы это исправить, давайте сначала конвертируем наши 25-процентные отступы в процентные доли в 900 пикселей. Получается примерно до 2,7%, но я округляю до 3%.

1
padding: 25px 3%;

Примечание: это еще одно сокращенное значение, оно означает, что верхняя и нижняя часть имеют размер 25px, а левая и правая — 3%.

Наша боковая панель теперь имеет ширину 33 + 6%, поэтому она все еще слишком широка, но все, что нам нужно сделать сейчас, это вычесть 6% из исходных 33%.

1
width: 27%;

Я думал, что боковая панель выглядит немного широкой в ​​этот момент, поэтому я уменьшил ее до 25%.

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

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

18

Сначала давайте сделаем шрифт немного больше и добавим несколько стилей:

1
2
3
4
5
6
7
#footer p {color: #a5bf8d;}
 
#footer h4 {color: #a5bf8d;
 
#footer ul {list-style: none;
 
#footer ul li a {text-decoration: none;

Далее мы можем добавить в наше фоновое изображение:

1
#footer {font-size: 1.2em;

И так как мы хотим, чтобы он был в состоянии растягиваться, мы можем добавить цвет в нижней части градиента к нашему значению фона, как мы делали раньше:

1
background: #093b2b url(images/footer_slice.jpg) top repeat-x;

Затем добавьте границу 2px вверху:

1
border-top: 2px solid #1e956c;

Давайте добавим поле и отступы сверху и снизу:

1
2
3
4
5
6
7
#footer {
    font-size: 1.2em;
    background: #093b2b url(images/footer_slice.jpg) top repeat-x;
    margin-top: 30px;
    padding-top: 20px;
    padding-bottom: 20px;
}

Далее мы собираемся создать три столбца с плавающей точкой. Плавающие три элемента работают почти так же, как плавающие два, мы собираемся плавать каждый столбец слева. Нам нужно объявить ширину каждого элемента с плавающей запятой, используя процентные значения для расширения.

1
2
3
4
5
#copyright {float: left;
 
#links {float: left;
 
#feeds {float: left;

Просто помните, что мы должны установить переполнение скрытым в родительском div.

1
#footer {overflow: hidden;}

На этом этапе я решил, что на самом деле лучше будет выглядеть, если сначала появятся ссылки и div-ы RSS, а информация об авторских правах находится справа, поэтому я изменил порядок div и установил для div авторского права значение float: right, и выровнял текст вправо.

1
2
3
4
5
#copyright {
    float: right;
    text-align: right;
    width: 20%;
}
19

И там у нас это есть, мы закончили кодирование и стилизацию нашей страницы!

В ходе обучения я тестировал свою страницу в Safari 4. Поскольку Safari 4, вероятно, является наиболее совместимым со стандартами и современным браузером, он отображает веб-страницы наиболее предсказуемо. Если бы все использовали браузер, совместимый со стандартами … К сожалению, все еще есть люди, использующие устаревшие браузеры, и мы должны подготовиться к этому.

Давайте начнем с самого проблемного браузера: Internet Explorer 6. Я использую Mac, но пока не нашел эффективного (бесплатного) способа тестирования моих веб-страниц в Internet Explorer. Если кто-то читает это, знает какую-то магическую технику, пожалуйста, дайте мне знать. В любом случае, пришло время вывезти старую семью Dell. Чтобы установить несколько версий Internet Explorer одновременно, перейдите в Google «Multiple IE» и загрузите ZIP-файл.

Удивительно, но в IE6 все работает отлично! IE7 тоже хорошо. Размер текста можно изменить! Я также проверил эту страницу в Firefox, Opera и Camino. У меня были проблемы с установкой Google Chrome на ПК, поэтому я не мог сказать вам, работает ли он, но я думаю, что это должно произойти, из-за простоты разметки и стиля.

Это оно! Надеюсь, вы узнали кое-что о кодировании гибких сайтов. Проверьте это в любом браузере, сделайте текст больше, сделайте его меньше, и наш макет адаптируется очень хорошо. Отключите CSS, и это все еще имеет смысл! Я надеюсь, вы понимаете, как легко сделать ваши сайты менее подверженными ошибкам! Эта страница была очень простой, без множества сложных задач. Когда ваши макеты станут более сложными, поддерживать гибкость будет немного сложнее.

  • Подпишитесь на нас в Твиттере или подпишитесь на ленту Nettuts + RSS для ежедневных новостей и статей о веб-разработке.