urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках:...

146
Лена Рашкован Layout 1

Transcript of urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках:...

Page 1: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

Лена Рашкован

Layout

1

Page 2: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

взаимное расположение крупных блоковстраницы.

Layout (раскладка) –

2

Page 3: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

3

Page 4: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

4

Page 5: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

5

Page 6: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

6

Page 7: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

7

Page 8: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

8

Page 9: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

<div class="column-1"> </div> <div class="column-2"> </div> <div class="column-3"> </div>

.column­1

.column­2

.column­3

.column­1 .column­2 .column­3

9

Page 10: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

Таблицы

10

Page 11: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

<table> <tbody> <tr> <td style="width: 33%;">колонка раз</td> <td style="width: 33%;">колонка два</td> <td style="width: 33%;">колонка три</td> </tr> </tbody> </table>

td td td

11

Page 12: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

td tdtd

12

Page 13: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

Раскладка на таблицах:

колонки выравниваются по высоте

адекватна при переполнении

куча лишней разметки

не семантично

13

Page 14: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

Флоаты

14

Page 15: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

float: le� float: le�float: le�

15

Page 16: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

float: le� float: le�

clear: both

float: le�

16

Page 17: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

Раскладка на флоатах:можно задавать размеры

переносятся

колонки не выравниваются по высоте

спецэффекты (схлопывание родителя) и хаки (clearfix)

перекрытие контента при переполнении

17

Page 18: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

Инлайн-блоки

18

Page 19: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

display:inline-block

display:inline-block

display:inline-block

19

Page 20: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

Раскладка на инлайн-блоках:реагируют на выравнивание (text-align и vertical-align)

можно задавать размеры

переносятся

лишние пробелы

при переполнении всё может развалиться

колонки не выравниваются по высоте20

Page 21: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

Чем раскладывать-то тогда?таблицы — для табличных данных

флоаты — для обтекания текстом

инлайн-блоки — лучше не надо :)

флексбоксы �

гриды �

21

Page 22: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

Флексбокс

22

Page 23: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

flex = гибкий

Гибкие раскладки: - управление распределением места

- мощные возможности для выравнивания

display: flex

23

Page 24: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

флекс-контейнер (flex-container)

флекс-элемент (flex-item)

главная ось (main axis)

поперечная ось (cross axis)

24

Page 25: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

Флекс-элементы располагаются вдоль

главной оси.

Свойство flex-direction меняет еёнаправление.

25

Page 26: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

flex-direction: row

по умолчанию

целовались студенты распускались тюльпаны чик-чирикало там и тут

26

Page 27: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

flex-direction: row-reverse

целовались студентыраспускались тюльпанычик-чирикало там и тут

27

Page 28: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

flex-direction: column

целовались студенты

распускались тюльпаны

чик-чирикало там и тут

28

Page 29: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

flex-direction: column-reverse

целовались студенты

распускались тюльпаны

чик-чирикало там и тут

29

Page 30: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

Свойство justify-content управляетвыравниванием флекс-элементов вдоль

главной оси.

30

Page 31: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

justify-content: flex-start по умолчанию

целовались студенты распускались тюльпаны чик-чирикало там и тут

31

Page 32: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

justify-content: flex-end

целовались студенты распускались тюльпаны чик-чирикало там и тут

32

Page 33: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

justify-content: center

целовались студенты распускались тюльпаны чик-чирикало там и тут

33

Page 34: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

justify-content: space-between

целовались студенты распускались тюльпаны чик-чирикало там и тут

34

Page 35: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

justify-content: space-around

целовались студенты распускались тюльпаны чик-чирикало там и тут

35

Page 36: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

Поперечная ось всегда перпендикулярнаглавной оси.

Направление изменить нельзя.

36

Page 37: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

37

Page 38: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

Свойство align-items управляетвыравниванием флекс-элементов вдоль

поперечной оси.

38

Page 39: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

align-items: stretch по умолчанию

целовались студенты распускались тюльпаны чик-чирикало там и тут

39

Page 40: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

align-items: flex-start

целовались студенты распускались тюльпаны чик-чирикало там и тут

40

Page 41: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

align-items: flex-end

целовались студенты распускались тюльпаны чик-чирикало там и тут

41

Page 42: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

align-items: center

целовались студенты распускались тюльпаны чик-чирикало там и тут

42

Page 43: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

align-items: baseline

целовались студенты распускались тюльпаны чик-чирикало там и тут

43

Page 44: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

align-self даёт переопределить

выравнивание у флекс-элемента.

Значения те же, что и у align-items.

нам сказали стоять в началея не с вами, ребят

44

Page 45: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

Что если флекс-элементов много?

целовались студенты распускались тюльпаны чик-чирикало там и тут

45

Page 46: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

Будут сжиматься до предела.

целовалисьстуденты

распускалисьтюльпаны

чик-чирикалотам и тут

я забраладокументы

поругаласьс деканом

мам, ябросилаинститут

46

Page 47: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

Выйдут за пределы контейнера,но продолжат располагаться в один ряд.

целовалисьстуденты

распускалисьтюльпаны

чик-чирикалотам и тут

я забраладокументы

поругаласьс деканом

мам, ябросилаинститут

эсс

47

Page 48: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

Переносом элементов управляет свойствоflex-wrap, и по умолчанию перенос

запрещён.

48

Page 49: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

flex-wrap: nowrap wrap

целовались студенты распускались тюльпаны чик-чирикало там и тут

я забрала документы поругалась с деканом мам, я бросила институт

это мне сказал сделать Слава, мой хороший друг чемодан, вокзал, поезд

Москва – Екатеринбург

49

Page 50: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

flex-wrap: wrap-reverse

целовались студенты распускались тюльпаны чик-чирикало там и тут

я забрала документы поругалась с деканом мам, я бросила институт

это мне сказал сделать Слава, мой хороший друг чемодан, вокзал, поезд

Москва – Екатеринбург

50

Page 51: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

Можно комбинировать направлениеи перенос в свойстве flex-flow:

.container { display: flex; flex-flow: row wrap; }

51

Page 52: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

Cвойство align-content управляетраспределением рядов флекс-элементов

вдоль поперечной оси.

52

Page 53: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

align-content: stretch по умолчанию

целовались студенты распускались тюльпаны чик-чирикало там и тут

я забрала документы поругалась с деканом мам, я бросила институт

это мне сказал сделать Слава, мой хороший друг чемодан, вокзал, поезд

Москва – Екатеринбург

53

Page 54: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

align-content: flex-start

целовались студенты распускались тюльпаны чик-чирикало там и тут

я забрала документы поругалась с деканом мам, я бросила институт

это мне сказал сделать Слава, мой хороший друг чемодан, вокзал, поезд

Москва – Екатеринбург

54

Page 55: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

align-content: flex-end

целовались студенты распускались тюльпаны чик-чирикало там и тут

я забрала документы поругалась с деканом мам, я бросила институт

это мне сказал сделать Слава, мой хороший друг чемодан, вокзал, поезд

Москва – Екатеринбург

55

Page 56: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

align-content: center

целовались студенты распускались тюльпаны чик-чирикало там и тут

я забрала документы поругалась с деканом мам, я бросила институт

это мне сказал сделать Слава, мой хороший друг чемодан, вокзал, поезд

Москва – Екатеринбург

56

Page 57: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

align-content: space-between

целовались студенты распускались тюльпаны чик-чирикало там и тут

я забрала документы поругалась с деканом мам, я бросила институт

это мне сказал сделать Слава, мой хороший друг чемодан, вокзал, поезд

Москва – Екатеринбург

57

Page 58: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

align-content: space-around

целовались студенты распускались тюльпаны чик-чирикало там и тут

я забрала документы поругалась с деканом мам, я бросила институт

это мне сказал сделать Слава, мой хороший друг чемодан, вокзал, поезд

Москва – Екатеринбург

58

Page 59: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

Если активно align-content, то что с align-items?

59

Page 60: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

align-content: stretch; align-items: center

целовались студенты распускались тюльпаны чик-чирикало там и тут

я забрала документы поругалась с деканом мам, я бросила институт

это мне сказал сделать Слава, мой хороший друг чемодан, вокзал, поезд

Москва – Екатеринбург

60

Page 61: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

С помощью свойства order можно менятьпорядок следования флекс-элементов.

61

Page 62: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

order: 0 по умолчанию

раз

0

два

0

три

0

четыре

0

пять

0

62

Page 63: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

order: 1

раз

0

два

0

три

1

четыре

0

пять

0

63

Page 64: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

order: -1

раз

0

два

0

три

-1

четыре

0

пять

0

64

Page 65: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

order

раз

1

два

2

три

3

четыре

4

пять

5

65

Page 66: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

Как указать размер флекс-элемента?

Cвойство flex-basis задает размерна главной оси.

Если не указать, то базовый размервозьмётся из ширины или высоты.

66

Page 67: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

flex-basis: 50%

50% по горизонтали auto

50% по вертикали

auto

67

Page 68: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

Почему размер базовый?

Это исходный размер.

Свободное место можно распределятьв соответствии с коэффициентом

жадности флекс-элемента (flex-grow).

68

Page 69: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

flex-grow: 0 по умолчанию

0

0

0

69

Page 70: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

flex-grow: 1

0

1

0

70

Page 71: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

flex-grow: 2

0

1

2

71

Page 72: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

Как вычисляется итоговый размер?1. Посчитаем свободное место:

free space = width - ∑ flex-basis

2. Посчитаем долю свободного места: fraction = free space / ∑ flex-grow

3. Вычислим итоговый размер: final size = flex-basis + (fraction × flex-grow)

На размер свободного места ещё могутвлиять рамки и отступы :)

72

Page 73: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

Особенности внешних отступов:не схлапываются

не выпадают

отступ с auto заберет все свободное местопо своему направлению

часть базового размера элемента

73

Page 74: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

0

1

2

width = 980px

flex-basis = 2×10px + 2×10px + 25px = 65px

free space = 980px - 3 × 65px = 785px

fraction = 785px / (0 + 1 + 2) = ~262px

final size1 = 65px + (262px × 0) = 65px;

final size2 = 65px + (262px × 1) = ~326px;

final size3 = 65px + (262px × 2) = ~589px;74

Page 75: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

Что если сумма базовых размеров больше,чем свободного места?

Будем делить отрицательноепространство в соответствии

с коэффициентами сжатия (flex-shrink).

75

Page 76: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

flex-shrink: 1 по умолчанию

�?

1

�))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))

1

плак;(

1

76

Page 77: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

flex-shrink: 0

� !

0

�))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))

1

плак;(

1

77

Page 78: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

flex-shrink: 0

� !

0

�))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))

1

не плак :)

0

78

Page 79: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

Хардкорный алгоритм расчёта

79

Page 80: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

С помощью сокращённого свойства flexможно одновременно задать

флекс-элементу flex-grow, flex-shrink и flex-basis.

80

Page 81: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

flex: [flex-grow] [flex-shrink] [flex-basis]

.elem { flex: initial; /* = 0 1 auto — все по умолчанию */ } 81

Page 82: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

flex: [flex-grow] [flex-shrink] [flex-basis]

.elem { flex: initial; /* = 0 1 auto — все по умолчанию */ flex: auto; /* = 1 1 auto */ } 82

Page 83: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

flex: [flex-grow] [flex-shrink] [flex-basis]

.elem { flex: initial; /* = 0 1 auto — все по умолчанию */ flex: auto; /* = 1 1 auto */ flex: none; /* = 0 0 auto */ } 83

Page 84: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

flex: [flex-grow] [flex-shrink] [flex-basis]

.elem { flex: initial; /* = 0 1 auto — все по умолчанию */ flex: auto; /* = 1 1 auto */ flex: none; /* = 0 0 auto */ flex: 2; /* число -> flex-grow, = 2 1 auto */ } 84

Page 85: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

flex: [flex-grow] [flex-shrink] [flex-basis]

.elem { flex: initial; /* = 0 1 auto — все по умолчанию */ flex: auto; /* = 1 1 auto */ flex: none; /* = 0 0 auto */ flex: 2; /* число -> flex-grow, = 2 1 auto */ flex: 50%; /* единица измерения длины -> flex-basis = 50%, = 0 1 50% */ } 85

Page 86: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

flex: [flex-grow] [flex-shrink] [flex-basis]

.elem { flex: initial; /* = 0 1 auto — все по умолчанию */ flex: auto; /* = 1 1 auto */ flex: none; /* = 0 0 auto */ flex: 2; /* число -> flex-grow, = 2 1 auto */ flex: 50%; /* единица измерения длины -> flex-basis = 50%, = 0 1 50% */ flex: 2 50%; /* flex-grow & flex-basis, = 2 1 50% */ } 86

Page 87: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

flex: [flex-grow] [flex-shrink] [flex-basis]

.elem { flex: initial; /* = 0 1 auto — все по умолчанию */ flex: auto; /* = 1 1 auto */ flex: none; /* = 0 0 auto */ flex: 2; /* число -> flex-grow, = 2 1 auto */ flex: 50%; /* единица измерения длины -> flex-basis = 50%, = 0 1 50% */ flex: 2 50%; /* flex-grow & flex-basis, = 2 1 50% */ flex: 2 0 50%; } 87

Page 88: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

А самое крутое...

88

Page 89: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

Родителю — display: flex, ребёнку — margin: auto

стою по-царски по центру и чихал на все выравнивания

89

Page 90: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

caniuse.com/#feat=flexbox

90

Page 91: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

Полезные ссылки

1.

2.

3.

Гайд по флексбоксу

Flexbox Playground

Игра для изучения флексбокса

91

Page 92: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

Грид

92

Page 93: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

grid = сетка

Даёт возможность располагать элементыпо сетке!

display: grid

93

Page 94: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

грид-контейнер (grid-container)

грид-элемент (grid-item)

линия (grid-line)

ячейка (grid-cell)

область (grid-area)

дорожка (grid-track)

интервал (grid-gap) 94

Page 95: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

95

Page 96: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

96

Page 97: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

97

Page 98: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

98

Page 99: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

99

Page 100: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

100

Page 101: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

101

Page 102: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

Чтобы наполнить сетку колонкамии рядами существуют свойства

grid-template-columns и grid-template-rows.

102

Page 103: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

.container { display: grid; grid-template-columns: 100px auto 100px; /* ширины столбцов */

grid-template-rows: 100px 100px 100px; /* высоты рядов */ }

1 2 3 41

2

3

4

103

Page 104: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

.container { display: grid; grid-template-columns: 100px auto 100px; /* ширины столбцов */

grid-template-rows: 100px 100px 100px; /* высоты рядов */ }

a1 2 3 41

2

3

4

104

Page 105: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

.container { display: grid; grid-template-columns: 100px auto 100px; /* ширины столбцов */

grid-template-rows: 100px 100px 100px; /* высоты рядов */ }

a b1 2 3 41

2

3

4

105

Page 106: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

.container { display: grid; grid-template-columns: 100px auto 100px; /* ширины столбцов */

grid-template-rows: 100px 100px 100px; /* высоты рядов */ }

a b c1 2 3 41

2

3

4

106

Page 107: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

.container { display: grid; grid-template-columns: 100px auto 100px; /* ширины столбцов */

grid-template-rows: 100px 100px 100px; /* высоты рядов */ }

a b c

d

1 2 3 41

2

3

4

107

Page 108: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

.container { display: grid; grid-template-columns: 100px auto 100px; /* ширины столбцов */

grid-template-rows: 100px 100px 100px; /* высоты рядов */ }

a b c

d e

1 2 3 41

2

3

4

108

Page 109: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

.a { grid-row: 1 / 2; grid-column: 1 / 4;

}

a

b c d

e

1 2 3 41

2

3

4

109

Page 110: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

.a { grid-row: 1 / 2; grid-column: 1 / 4;

}

.b { grid-row: 2 / 4; grid-column: 1 / 2;

}

a

b c d

e

1 2 3 41

2

3

4

110

Page 111: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

.a { grid-row: 1 / 2; grid-column: 1 / 4;

}

.b { grid-row: ➩ 1 / 4; grid-column: 1 / 2;

}

ab

c d

e

1 2 3 41

2

3

4

111

Page 112: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

.a { grid-row: 1 / 2; grid-column: 1 / 4;

➩ z-index: 1; }

.b { grid-row: 1 / 4;

grid-column: 1 / 2; }

b

c d

e

1 2 3 41

2

3

4

a

112

Page 113: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

Размер дорожки можно указывать в fr –долях свободного места.

Свободное место вычисляется послерасположения всех элементов

фиксированных размеров.

113

Page 114: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

.container { display: grid; grid-template-columns: 100px 1fr 1fr;

grid-template-rows: 100px 100px 100px; }

a b c

d e

1 2 3 41

2

3

4

114

Page 115: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

.a { grid-column: span 3; }

a

b c d

e

1 2 3 41

2

3

4

115

Page 116: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

.a { grid-column: span 3; }

.b { grid-row: span 2; }

a

b c d

e

1

2

3

4

1

2

3

4

116

Page 117: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

В контейнере можно создаватьименованные области с помощью

свойства grid-template-areas.

Поместить элемент в область можносвойством grid-area.

117

Page 118: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

.container { display: grid; grid-template-columns: 1fr 1fr; grid-template-rows: 100px 100px 100px; grid-template-areas: 'sand water'

'sand water' 'grass grass'; }

.a { grid-area: grass; } .b { grid-area: sand;

} .c { grid-area: water; }

a

b c

118

Page 119: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

.container { display: grid; grid-template-columns: 1fr 1fr; grid-template-rows: 100px 100px 100px; grid-template-areas: 'sand water'

'sand water' '. grass'; }

.a { grid-area: grass; } .b { grid-area: sand;

} .c { grid-area: water; }

a

b c

119

Page 120: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

Короче!

Свойство grid-template:

.container { display: grid; grid-template: 'header header' 100px 'sidebar content' 100px 'footer content' 100px / 100px auto; }

120

Page 121: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

Используя свойство grid-gap, можно

управлять размером интервалов междулиниями.

Интервал только между рядами —grid-row-gap, только между столбцами —

grid-column-gap.

121

Page 122: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

.container { grid-column-gap: 1%;

grid-row-gap: 16px; }

a b

c d

e

122

Page 123: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

123

Page 124: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

Писать руками?

.container { grid-template-columns: 1fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr...; }

НЕТ. Есть функция repeat()

.container { grid-template-columns: repeat(12, 1fr); }

124

Page 125: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

caniuse.com/#feat=css-grid

125

Page 126: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

Полезные ссылки 1.

2.

3.

4.

Grid Explained In 7 Minutes

Гайд по гриду

Grid By Example

Игра для изучения грида

126

Page 127: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

Флексбокс или грид?

127

Page 128: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

Флексбокс.container { display: flex; }

.column-i { flex: auto; }

Грид.container { display: grid; grid-template-columns: 1fr 1fr 1fr; }

128

Page 129: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

Флексбоксодно измерение — ряд или столбец

Гриддва измерения — ряды и столбцы

129

Page 130: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

Флексбокс

Грид

130

Page 131: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

Флексбоксодно измерение — ряд или столбец

content-first

Гриддва измерения — ряды и столбцы

layout-first

131

Page 132: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

<header class="header">

<div class="home">Home</div> <div class="search">Search</div> <div class="logout">Logout</div> </header>

132

Page 133: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

Флексбокс.header { display: flex; align-items: center; }

.logout { margin-left: auto; }

Грид.header { display: grid; grid-template-columns: repeat(10, 1fr); }

.logout { grid-column: 10; }

133

Page 134: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

<div class="container"> <header class="header">HEADER</header> <aside class="menu">MENU</aside> <main class="content">CONTENT</main>

<footer class="footer">FOOTER</footer> </div>

134

Page 135: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

.container { display: grid; grid-template-columns: repeat(12, 1fr);

grid-template-rows: 50px 350px 50px; }

.header { display: flex; align-items: center; } .logout { margin-left: auto; }

.header { grid-column: span 12; }

.menu { grid-column: span 2; } .content { grid-column: span 10; } .footer { grid-column: span 12; }

135

Page 136: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

Подходы можно совмещать

136

Page 137: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

Две новости

Используя флексбокс и грид, можно сверстать всё что угодно

А таблицы пригодятся для вёрсткиэлектронных писем

137

Page 138: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

Про домашку

138

Page 139: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

139

Page 140: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

условное применение CSS-правил.

Одна разметка, разные наборы стилей.

Медиа-выражения –

140

Page 141: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

Задаются с помощью at-правила @media, закоторым следует условие:

141

Page 142: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

Media Type задает тип устройства

all – все устройства (по умолчанию)

print — принтеры и режим предпросмотра

screen — устройства с экраном

speech — скринридеры

142

Page 143: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

Media Features задают техническиехарактеристики устройства

width – ширина вьюпорта

height — высота вьюпорта

orientation — ориентация вьюпорта

resolution — разрешение устройствавывода

143

Page 144: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

Ширина вьюпорта/* для мобильных */ body { background: red; }

/* для планшетов */ @media screen and (min-width: 768px) { body { background: yellow; } } /* для десктопов */ @media screen and (min-width: 1280px) { body { background: blue; } }

144

Page 145: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

145

Page 146: urfu-2018.github.io · 2019. 5. 20. · Раскладка на инлайн-блоках: реагируют на выравнивание (text-align и vertical-align) можно

Полезные ссылки 1.

2.

@media на MDN

Responsive Design Tutorial

146