Float и Clear

Мы можем использовать float с любым элементом, который не был абсолютно спозиционирован. Это применяется для определения должен ли элемент переместиться влево, направо или не должен совсем. Вот список возможных значений:

  • left

  • right

  • none


Если элемент перемещается влево (float:left), он выравнивается по левой стороне содержащего элемента, а весь последующий контент выравнивается по правой стороне (до тех пор пока не достигнет нижней границы элемента).

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

В случае, если ширина последующего контента зафиксирована, он не будет переноситься ниже выровненного float’ом div’а. Вместо этого он применит свою ширину.

Пример кода

01

<html>

 

02

<head>

 

03

<title>CSS Float</title>

 

04

</head>

 

05

<body>

 

06

<h1 style="text-align:center">CSS Float</h1>

 

07

 

 

08

<div style="float:left">

 

09

<h2>Float Left</h2>

 

10

<div style="width:100px; border: 2px solid black">

 

11

<img src="Images/block.gif" height="50"

 

12

width="50" style="float:left" />

 

13

This is just text. This is just text. This is just text.

 

14

</div>

 

15

<h2>Float Left - Div</h2>

 

16

<div style="width:100px; height:180px; border: 2px solid black">

 

17

<div style="float:left;">

 

18

<img src="Images/block.gif" height="50" width="50" />

 

19

</div>

 

20

<div style="width:40px; float:left;">

 

21

This is just text. This is just text. This is just text.

 

22

</div>

 

23

</div>

 

24

</div>

 

25

 

 

26

<div style="float:right">

 

27

<h2>Float Right</h2>

 

28

<div style="width:100px; border: 2px solid black">

 

29

<img src="Images/block.gif" height="50"

 

30

width="50" style="float:right" />

 

31

This is just text. This is just text. This is just text.

 

32

</div>

 

33

<h2>Float Right - Div</h2>

 

34

<div style="width:100px; height:180px; border: 2px solid black">

 

35

<div style="float:right">

 

36

<img src="Images/block.gif" height="50" width="50" />

 

37

</div>

 

38

<div style="width:40px;">

 

39

This is just text. This is just text. This is just text.

 

40

</div>

 

41

</div>

 

42

</div>

 

43

</body>

 

44

</html>

Clear

Мы можем использовать свойство clear для определения, должен ли контент, который «обтекает» float-блок, быть сброшен вниз. Вот список возможных значений:

  • left – не допускает обтекание «floated» объекта слева

  • right – запрещает обтекание элемента справа

  • both – запрещает обтекание объекта с обеих сторон, т.е. и слева, и справа

  • none – разрешено обтекание

Пример кода:

01

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

 

02

<html xmlns="http://www.w3.org/1999/xhtml">

 

03

<head>

 

04

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

 

05

<style type="text/css">

 

06

#wrapper

 

07

position:absolute;

 

08

left:50%;

 

09

top:30px;

 

10

width: 450px;

 

11

margin-left:-225px;

 

12

 

13

 

 

14

.box

 

15

border: 2px solid #f00;

 

16

background-color:#000066;

 

17

color:#f90;

 

18

text-align:center;

 

19

font-size:100px;

 

20

font-weight:bold;

 

21

font-family:Arial, Helvetica, sans-serif;

 

22

 

23

 

 

24

#box2

 

25

top:10px;

 

26

left:10px;

 

27

height:200px;

 

28

width:200px;

 

29

margin-bottom:15px;

 

30

 

31

 

 

32

#box1

 

33

float:right;

 

34

height:400px;

 

35

width:200px;

 

36

margin-bottom:15px;

 

37

 

38

 

 

39

#box3

 

40

height:100px;

 

41

width:100%;

 

42

clear:both;

 

43

 

44

</style>

 

45

<title>Positioning Boxes</title>

 

46

</head>

 

47

 

 

48

<body>

 

49

<div id="wrapper">

 

50

<div id="box1" class="box">1</div>

 

51

<div id="box2" class="box">2</div>

 

52

<div id="box3" class="box">3</div>

 

53

</div>

 

54

</body>

 

55

</html>

Пример кода:

view s

print

?

01

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

 

02

<html xmlns="http://www.w3.org/1999/xhtml">

 

03

<head>

 

04

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

 

05

<style type="text/css">

 

06

#wrapper

 

07

width:800px;

 

08

 

09

 

 

10

#insideWrapper

 

11

width:612px;

 

12

position:relative;

 

13

left:50%;

 

14

margin-left:-311px;

 

15

 

16

 

 

17

.box

 

18

border: 2px solid #f60;

 

19

background-color:#006;

 

20

color:#f90;

 

21

text-align:center;

 

22

font-size:100px;

 

23

font-weight:bold;

 

24

font-family:Arial, Helvetica, sans-serif;

 

25

 

26

 

 

27

#box1

 

28

float:left;

 

29

top:10px;

 

30

left:10px;

 

31

height:300px;

 

32

width:200px;

 

33

 

34

 

 

35

#box2

 

36

float:left;

 

37

height:400px;

 

38

width:200px;

 

39

 

40

 

 

41

#box3

 

42

float:left;

 

43

height:300px;

 

44

width:200px;

 

45

 

46

 

 

47

#divClear

 

48

height:50px;

 

49

clear:both;

 

50

border:4px solid #000;

 

51

background-color:#f00;

 

52

 

53

 

 

54

#divTop

 

55

height:50px;

 

56

border:4px solid #000;

 

57

background-color:#00f;

 

58

 

59

</style>

 

60

<title>Positioning Boxes</title>

 

61

</head>

 

62

 

 

63

<body>

 

64

<div id="wrapper">

 

65

<div id="divTop" style=""></div>

 

66

<div id="insideWrapper">

 

67

<div id="box1" class="box">1</div>

 

68

<div id="box2" class="box">2</div>

 

69

<div id="box3" class="box">3</div>

 

70

</div>

 

71

<div id="divClear" style="background:red"></div>

 

72

</div>

 

73

</body>

 

74

</html>

 

Группировка и вложенность

Группировка

Одни и те же свойства могут быть даны нескольким селекторам без необходимости повторять их. Для этого селекторы надо разделять запятыми.

Например, этот код:

01

h2

 

02

    color: red;

 

03

 

04

 

 

05

.thisOtherClass

 

06

    color: red;

 

07

 

08

 

 

09

.yetAnotherClass

 

10

    color: red;

 

11

Можно заменить на этот, более компактный:

1

h2, .thisOtherClass, .yetAnotherClass

 

2

    color: red;

 

3

Вложение

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

Подобный код:

01

#top

 

02

    background-color: #ccc;

 

03

    padding: 1em

 

04

 

05

 

 

06

#top h1

 

07

    color: #ff0;

 

08

 

09

 

 

10

#top p

 

11

    color: red;

 

12

    font-weight: bold;

 

13

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

1

<div id="top">

 

2

<h1>Chocolate curry</h1>

 

3

<p>This is my recipe for making curry purely with chocolate</p>

 

4

<p>Mmm mm mmmmm</p>

 

5

</div>

Это происходит, когда селекторы разделяются пробелами. В результате h1 внутри id top получает цвет #ff0, а p внутри id top становится red (красным) и bold (жирное начертание).

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

Div и Span

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

Как и большинство остальных тегов, <div> и <span> могут иметь класс, идентификатор и стилевые атрибуты. Благодаря этим атрибутам стили можно применять к элементам. Теги применяются таким же способом, как и другие HTML-теги. Допускается вложенность одних тегов в другие в несколько уровней.
 

Образец кода:

01

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

 

02

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">

 

03

<head>

 

04

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

 

05

<title>Div and Span</title>

 

06

</head>

 

07

<body>

 

08

<div style="position:absolute; left:0px; top:0px;

 

09

font-family:Verdana; font-size:10pt;

 

10

border-style:groove; border-width:30px; border-color:blue; padding:4px">

 

11

This text appears in the

 

12

<span style="font-style:italic; color:red">upper-left hand corner</span>

 

13

of the page.<br />

 

14

It also has a big blue groovy border around it.

 

15

</div>

 

16

</body>

 

17

</html>

Упражнение: Div и Span

Продолжительность задачи: от 10 до 20 мин.

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

Никаких подробных инструкций. Просто анализируйте правила во встроенной таблице стилей, используйте классы и идентификаторы id и соответствующим образом применяйте их.

Единицы измерений

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

Единица измерений

Описание

Пример

px

Пиксели

margin-top: 10px;

pt

Пункты

font-size: 12pt;

in

Дюймы

padding-top: .5in;

cm

Сантиметры

top: 5cm;

mm

Миллиметры

left: 45mm;

pc

Пика

bottom: 12pc;

em

Em

font-size: 1.5em;

ex

Ex

font-size: 1.5ex;

%

Проценты

width: 80%;

Пиксели (px)

Единица измерений, которая наиболее часто используется в веб-дизайне, — это пиксели. В отличие, например, от дюймов и пунктов, пиксель не является абсолютной величиной. Окончательный размер пикселя определяется размером и разрешением экрана пользователя. Представьте себе картину шириной 900 пикселей. Если установленное разрешение монитора 800 на 600 пикселей, изображение не поместится на экране. Но если на том же мониторе установлено разрешение 1024 на 768 пикселей, картинка поместится и останется немного пространства.

Типографский пункт (pt)

Пункты должны использоваться для печати. Один дюйм равен 72 пунктам.

Дюймы (in), сантиметры (cm), миллиметры (mm)

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

Пики (pc)

Пика (Picas) — единица измерений, которая используется для печати. Один дюйм равен 6 пикам.

Em (em)

Em, или Мутт, — это относительная единица измерений, определяющая размер буквы «М» в шрифте. Поскольку em — величина относительная, а не абсолютное значение, она часто используется в веб-дизайне.

Ex (em)

Ex, или “x-высота”, определяет высоту строчной «x» шрифта. Ex применяется для установки размера контента в зависимости от размера окружающего шрифта.

 

Элемент Flow

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

Position

Мы используем свойство position для того, чтобы определить позицию (расположение) элемента. Стандартное значение: статичное размещение (static). Но есть и другие варианты:

  • absolute (абсолютное)

  • relative (относительное)

  • fixed (зафиксированное)

Абсолютное позиционирование

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

Офсетные свойства: top, right, bottom и left

Офсетными свойствами (свойствами смещения) могут быть: top (наверх), right (вправо), bottom (вниз) и left (налево). Мы можем указать их значения в цифрах измерения (например, 10px) или процентах от содержащего блока (например 20%). Эти свойства смещают элемент от наиболее близкого блочного элемента, который спозиционирован нестатично (т.е. абсолютно, относительно или зафиксировано). В случае, если нет предшествующего элемента, спозиционированного нестатично, смещение происходит относительно браузерного окна.

Пример кода

01

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

 

02

<html xmlns="http://www.w3.org/1999/xhtml">

 

03

<head>

 

04

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

 

05

<style type="text/css">

 

06

h1

 

07

position:absolute;

 

08

top:70px;

 

09

left:50px;

 

10

border:2px solid #006;

 

11

padding:1px;

 

12

background-color:#600;

 

13

color:#eee;

 

14

 

 

15

#explanation

 

16

color:#006;

 

17

font-weight:bold;

 

18

font-size:1.2em;

 

19

 

 

20

#wrapper

 

21

width:600px;

 

22

background-color:#def;

 

23

border:1px solid #006;

 

24

 

 

25

</style>

 

26

<title>CSS Absolute Positioning</title>

 

27

</head>

 

28

<body>

 

29

<div id="wrapper">

 

30

<h1>Абсолютное позиционирование CSSg</h1>

 

31

<h2>From the Left and the Top</h2>

 

32

<div id="explanation">

 

33

  <p>Notice how this text is in the upper corner.</p>

 

34

  <p>That's because the preceding h1 element has been absolutely positioned.</p>

 

35

  <p>Positioning an element absolutely takes the element out of the regular flow of the document.</p>

 

36

</div>

 

37

</div>

 

38

</body>

 

39

</html>

Обратите внимание, что позиционирование родственных элементов h2 и div не было затронуто предшествующим элементом h1. Это результат того, что элемент был спозиционирован абсолютно

Посмотрите, что произойдет, если мы опустим вниз содержащий div «wrapper» значением свойства margin-top:

1

#wrapper

 

2

margin-top:100px;

 

3

width:600px;

 

4

background-color:#def;

 

5

border:1px solid #006;

 

6

 

Обратите внимание, что элемент h1 не был затронут этим. Это потому, что div «wrapper» не был в том же потоке, что и элемент h1. Чтобы поместить его в тот же поток, его требуется спозиционировать абсолютно. Достигнуть этого можно следующим кодом (тогда div переместится из-за применения свойства top, а не margin-top):

1

#wrapper

 

2

position:absolute;

 

3

top:100px;

 

4

width:600px;

 

5

background-color:#def;

 

6

border:1px solid #006;

 

7

 

Далее мы должны спозиционировать элемент h1 относительно нижнего правого угла, используя этот код:

1

h1

 

2

position:absolute;

 

3

bottom:0px;

 

4

right:0px;

 

5

border:2px solid #00f;

 

6

background-color:#600;

 

7

color:#eee;

 

8

 

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

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

Как видно на скриншоте h1 элемент на той же дистанции от правого нижнего угла после изменения окна браузера.

По-прежнему, в случае когда div «wrapper» спозиционирован абсолютно, элемент h1 будет спозиционирован внутри элемента div. Вот почему этот код будет обрабатывать страницу под ним:

1

#wrapper

 

2

position:absolute;

 

3

top:10px;

 

4

width:600px;

 

5

background-color:#def;

 

6

border:1px solid #006;

 

7

 

Взгляните на div «wrapper». Полностью содержит элемент h1.

Margin и Padding

margin и padding являются наиболее популярными свойствами для расстановки элементов. В то время как margin определяет пространство за пределами (снаружи) элемента, padding определяет пространство внутри элемента.

Замените CSS-код для элемента h2 следующим:

1

h2

 

2

    font-size: 1.5em;

 

3

    background-color: #ccc;

 

4

    margin: 1em;

 

5

    padding: 3em;

 

6

Вы заметите, что пространство шириной в один знак (margin) было оставлено около заголовка второго уровня,а сам заголовок стал толще в результате padding, равного 3 знакам.

Вы можете задавать margin и padding для четырех сторон элемента по отдельности: margin-top, margin-right, margin-bottom, margin-left, padding-top, padding-right, padding-bottom и padding-left.

Блочная модель

Margin, padding и border – это части так называемой Блочной модели. Механизм Блочной модели следующий: Посередине есть зона контента, которую окружает padding, окруженный границей border, которая в свою очередь окружена полями margin. Визуально представление Блочной модели выглядит так:

Margin box

Border box

Padding box

Element box

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

Унаследованные значения и @import

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

@import

Мы можем использовать правило @import для импорта одной таблицы стилей в другую. Два синтаксиса могут использоваться для @import:

 

@import "styles.css" mediatypes;
@import url("styles.css") mediatypes;

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

Медиа типы

Стили могут относиться к различным типам медиа. Например, можно создать отдельный стиль для страницы, которая будет просматриваться в браузере, и другой стиль для печати страницы. Вы можете определять тип медиа в теге <link> для внешней таблицы стилей и внутри тега <style> для внедряемых таблиц стилей.
 

1

<link href="stylesheet.css" rel="stylesheet" type="text/css" media="screen">

 

2

<style type="text/css" media="all">

 

3

/* rules */

 

4

</style>

Когда тип медиа неопределен, стили относятся ко всем медиа. Медиа типы могут принимать следующие значения:

  • all – стили для всех типов медиа

  • aural – для синтезаторов речи

  • braille – для устройств чтения символов Брайля

  • embossed – для устройств печати символов Брайля

  • handheld – для портативных устройств

  • print – для печати на принтере

  • projection – для демонстрации с помощью проекторов

  • screen – для показа на экране монитора

  • tty – для показа на терминалах и телетайпах

  • tv – для показа на экране ТВ

Код ниже демонстрирует как применить CSS для дизайна различных медиа:

Пример кода

01

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

 

02

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">

 

03

<head>

 

04

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

 

05

<title>CSS Media</title>

 

06

<style type="text/css" media="screen">

 

07

.warning color:#ff0000

 

08

h1.warning text-decoration:underline

 

09

p.warning font-weight:bold

 

10

.printDisplay display:none

 

11

</style>

 

12

<style type="text/css" media="print">

 

13

.warning color:#660000;

 

14

h1.warning text-decoration:underline; font-size:1in;

 

15

p.warning font-weight:bold; font-size:.5in;

 

16

.screenDisplay display:none

 

17

</style>

 

18

</head>

 

19

<body>

 

20

<h1 class="warning">WARNING</h1>

 

21

<p class="warning">Don't go there!</p>

 

22

<p class="printDisplay">This is the print version.</p>

 

23

<p class="screenDisplay">This is the screen version.</p>

 

24

</body>

 

25

</html>

Указанный выше CSS-файл может быть прикреплен к любому количеству HTML-страниц. Тег <link>, расположенный в секции head каждой веб-страницы, может использоваться для прикрепления внешней каскадной таблицы стилей к любой странице вашего сайта.

Пример кода

01

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

 

02

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">

 

03

<head>

 

04

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

 

05

<title>External Style Sheet</title>

 

06

<link href="StyleSheet.css" rel="stylesheet" type="text/css" />

 

07

</head>

 

08

<body>

 

09

<h1 class="warning">WARNING</h1>

 

10

<p class="warning">Don't go there!</p>

 

11

</body>

 

12

</html>

 

Атрибуты

Описание

href

указывает на местонахождение внешней каскадной таблицы стилей

rel

атрибут должен устанавливать значение “stylesheet” для ссылки на таблицу стилей

type

должно быть установлено “text/css” для ссылки на таблицу стилей

Количество внешних каскадных таблиц стилей, которые может использовать страница HTML, неограниченно. Более, того, мы можем объединять внешние таблицы стилей, используя технику внедрения стилевых таблиц.

Встроенные стили

Мы создаем встроенные стили, добавляя тегам атрибуты стиля. Так же как и в случае с классом или атрибутами идентификатора (id), большинство элементов могут иметь стилевые атрибуты. Значения атрибута стиля разделяются точкой с запятой. Образец кода ниже демонстрирует, как применяется встроенный стиль:

Пример кода

view source

print

?

01

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

 

02

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">

 

03

<head>

 

04

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

 

05

<title>Inline Styles</title>

 

06

</head>

 

07

<body>

 

08

<p style="color:blue; font-weight:bold; font-size:12pt">Common Greetings</p>

 

09

<ul style="margin-top:-20px; font-size:10pt">

 

10

<li style="list-style-type:square">Hello</li>

 

11

<li style="list-style-type:circle">Hi</li>

 

12

<li style="list-style-type:disc">Howdy</li>

 

13

</ul>