77
Гибкие коробки на практике Арсений Форштретер Старший разработчик интерфейсов

Гибкие коробки на практике — Арсений Форштретер

  • Upload
    yandex

  • View
    484

  • Download
    3

Embed Size (px)

DESCRIPTION

Flexbox – замечательная технология с одним существенным недостатком: ей почему-то никто не пользуется. Я попытаюсь сломать расхожие стериотипы о флексбоксах и поделюсь опытом их использования в реальном проекте. Будет несколько интересных примеров, рассказ об особенностях работы в разных браузерах, фолбэки для старых IE и особенности взаимодействия с другими CSS-свойствами.

Citation preview

Page 1: Гибкие коробки на практике — Арсений Форштретер

Гибкие коробки на практике

Арсений Форштретер

Старший разработчик интерфейсов

Page 2: Гибкие коробки на практике — Арсений Форштретер

Y U NO USE FLEXBOX?

— Нигде не поддерживается

1

Page 3: Гибкие коробки на практике — Арсений Форштретер
Page 4: Гибкие коробки на практике — Арсений Форштретер

Y U NO USE FLEXBOX?

— Нигде не поддерживается

— Много префиксов

3

Page 5: Гибкие коробки на практике — Арсений Форштретер

Очень много префиксов

.box display: -webkit-box; display: -moz-box; display: -ms-flexbox; display: -webkit-flex; display: flex; -webkit-box-direction: normal; -moz-box-direction: normal; -webkit-box-orient: horizontal; -moz-box-orient: horizontal; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; -webkit-box-pack: center; -moz-box-pack: center; -webkit-justify-content: center; -ms-flex-pack: center; justify-content: center; -webkit-box-align: center; -moz-box-align: center; -webkit-align-items: center; -ms-flex-align: center; align-items: center;

01.02.03.04.05.06.07.08.09.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.

4

Page 6: Гибкие коробки на практике — Арсений Форштретер

Автопрефиксер же!

.box

display: flex;

flex-direction: column;

justify-content: center;

align-items: center;

01.

02.

03.

04.

05.

06.

5

Page 7: Гибкие коробки на практике — Арсений Форштретер

Y U NO USE FLEXBOX?

— Нигде не поддерживается

— Много префиксов

— IE ≤ 9

6

Page 8: Гибкие коробки на практике — Арсений Форштретер

display: table;

7

Page 9: Гибкие коробки на практике — Арсений Форштретер

Y U NO USE FLEXBOX?

— Нигде не поддерживается

— Много префиксов

— IE ≤ 9

— Производительность

8

Page 10: Гибкие коробки на практике — Арсений Форштретер

Flexbox layout isn't slowPaul Irish

Page 11: Гибкие коробки на практике — Арсений Форштретер

Y U NO USE FLEXBOX?

— Нигде не поддерживается

— Много префиксов

— IE ≤ 9

— Производительность

— Новое и непонятное

10

Page 12: Гибкие коробки на практике — Арсений Форштретер

Flexbox. Теперь понятноВадим Макеев

Page 13: Гибкие коробки на практике — Арсений Форштретер

Ликбез

<div class="container">

<div class="item">Item 1</div>

<div class="item">Item 2</div>

<div class="item">Item 3</div>

</div>

01.

02.

03.

04.

05.

12

Page 14: Гибкие коробки на практике — Арсений Форштретер

Ликбез

Item 1

Item 2

Item 3

13

Page 15: Гибкие коробки на практике — Арсений Форштретер

Добавляем flexbox

.container display: flex;

Item 1 Item 2 Item 3

.container display: inline-flex;

Item 1 Item 2 Item 3

14

Page 16: Гибкие коробки на практике — Арсений Форштретер

Задаем направление

.container flex-direction: column;

Item 1

Item 2

Item 3

15

Page 17: Гибкие коробки на практике — Арсений Форштретер

Выравниваем по главной оси

.container justify-content: flex-end;

Item 1 Item 2 Item 3

.container justify-content: center;

Item 1 Item 2 Item 3

16

Page 18: Гибкие коробки на практике — Арсений Форштретер

Выравниваем по главной оси

.container justify-content: space-between;

Item 1 Item 2 Item 3

.container justify-content: space-around;

Item 1 Item 2 Item 3

17

Page 19: Гибкие коробки на практике — Арсений Форштретер

Добавляем margin

.item:nth-child(3) margin: auto;

Item 1 Item 2Item 3

Item 4 Item 5

18

Page 20: Гибкие коробки на практике — Арсений Форштретер

Выравниваем по дополнительной оси

.container align-items: flex-start;

Item 1 Item 2 Item 3

.container align-items: flex-end;

Item 1 Item 2 Item 3

19

Page 21: Гибкие коробки на практике — Арсений Форштретер

Выравниваем по дополнительной оси

.container align-items: center;

Item 1 Item 2 Item 3

.container align-items: baseline;

Item 1 Item 2 Item 3

20

Page 22: Гибкие коробки на практике — Арсений Форштретер

Выравниваем по дополнительной оси

.container align-items: flex-start;

.item:first-child align-self: flex-end;

Item 1

Item 2 Item 3

21

Page 23: Гибкие коробки на практике — Арсений Форштретер

Растягиваем

.item:first-child flex-grow: 1;

Item 1 Item 2 Item 3

.item flex-grow: 1;

.item:last-child flex-grow: 2;

Item 1 Item 2 Item 3

22

Page 24: Гибкие коробки на практике — Арсений Форштретер

Сжимаем

.item flex-shrink: 1 /* По умолчанию */

Item number one Item number two Item number three Item number four

.item:last-child flex-shrink: 0

Item number oneItem number twoItem number threeItem number four

23

Page 25: Гибкие коробки на практике — Арсений Форштретер

Базовый размер

.item flex-basis: 150px;

Item 1 Item 2 Item 3

.item flex-basis: main-size; /* По умолчанию */

.item width: 150px;

Item 1 Item 2 Item 3

24

Page 26: Гибкие коробки на практике — Арсений Форштретер

Базовый размер

.item flex: 1 1 250px;

Item 1 Item 2 Item 3

25

Page 27: Гибкие коробки на практике — Арсений Форштретер
Page 28: Гибкие коробки на практике — Арсений Форштретер
Page 29: Гибкие коробки на практике — Арсений Форштретер

От забора и до обеда

Header

Представляется логичным, что интеграл от функции, обращающейся в бесконечность в изолированнойточке небезынтересно развивает косвенный интеграл от функции, имеющий конечный разрыв, явнодемонстрируя всю чушь вышесказанного. Интересно отметить, что дивергенция векторного полятрансформирует контрпример. Не доказано, что целое число монотонно. Если предположить, что a < b,то минимум существенно ускоряет интеграл от функции комплексной переменной. Интеграл отфункции, имеющий конечный разрыв поддерживает лист Мёбиуса. Скачок функции вполне вероятен.Бином Ньютона восстанавливает интеграл от функции, обращающейся в бесконечность вдоль линии.

Footer

28

Page 30: Гибкие коробки на практике — Арсений Форштретер

Подход первый

<body>

<header>...</header>

<main>...</main>

<footer>...</footer>

</body>

01.

02.

03.

04.

05.

29

Page 31: Гибкие коробки на практике — Арсений Форштретер

Подход первый

body

min-height: 100vh;

display: flex;

flex-direction: column;

main flex-grow: 1;

01.

02.

03.

04.

05.

06.

30

Page 32: Гибкие коробки на практике — Арсений Форштретер

Не тянется

Header

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

Footer

31

Page 33: Гибкие коробки на практике — Арсений Форштретер

Не тянется

Не работает minheight на body

32

Page 34: Гибкие коробки на практике — Арсений Форштретер

Не тянется

body

height: 100vh;

display: flex;

flex-direction: column;

main flex-grow: 1;

01.

02.

03.

04.

05.

06.

33

Page 35: Гибкие коробки на практике — Арсений Форштретер

Когда текста много

Header

Представляется логичным, что интеграл от функции, обращающейся в бесконечность в изолированнойточке небезынтересно развивает косвенный интеграл от функции, имеющий конечный разрыв, явнодемонстрируя всю чушь вышесказанного. Интересно отметить, что дивергенция векторного полятрансформирует контрпример. Не доказано, что целое число монотонно. Если предположить, что a < b,то минимум существенно ускоряет интеграл от функции комплексной переменной. Интеграл отфункции, имеющий конечный разрыв поддерживает лист Мёбиуса. Скачок функции вполне вероятен.Бином Ньютона восстанавливает интеграл от функции, обращающейся в бесконечность вдоль линии.Мнимая единица концентрирует тройной интеграл. В общем, интеграл от функции, обращающейся вбесконечность в изолированной точке последовательно концентрирует эмпирический сходящийся ряд.Итак, ясно, что интеграл по ориентированной области основан на тщательном анализе.Представляется логичным, что интеграл от функции, обращающейся в бесконечность в изолированнойточке небезынтересно развивает косвенный интеграл от функции, имеющий конечный разрыв, явнодемонстрируя всю чушь вышесказанного. Интересно отметить, что дивергенция векторного полятрансформирует контрпример. Не доказано, что целое число монотонно. Если предположить, что a < b,то минимум существенно ускоряет интеграл от функции комплексной переменной. Интеграл от

Footer

34

Page 36: Гибкие коробки на практике — Арсений Форштретер

flex-shrink: 1;

Page 37: Гибкие коробки на практике — Арсений Форштретер

Итого

body

height: 100vh;

display: flex;

flex-direction: column;

main flex: 1 0 auto;

header, footer flex: 0 0 auto;

01.

02.

03.

04.

05.

06.

07.

36

Page 38: Гибкие коробки на практике — Арсений Форштретер

IE ≤ 9

body

display: table;

header, main, footer

display: table-cell;

main, body

height: 100%;

01.

02.

03.

04.

05.

06.

07.

08.

09.

37

Page 39: Гибкие коробки на практике — Арсений Форштретер
Page 40: Гибкие коробки на практике — Арсений Форштретер

При чем тут flexbox?

<div class="overlay">

<div class="modal">...</div>

</div>

01.

02.

03.

39

Page 41: Гибкие коробки на практике — Арсений Форштретер

При чем тут flexbox?

.overlay

position: fixed;

padding: 50px 0;

.modal

max-height: 100%;

overflow-y: auto;

01.

02.

03.

04.

05.

06.

07.

08.

40

Page 42: Гибкие коробки на практике — Арсений Форштретер

При чем тут flexbox?

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

41

Page 43: Гибкие коробки на практике — Арсений Форштретер

При чем тут flexbox?

Представляется логичным, что интеграл отфункции, обращающейся в бесконечность визолированной точке небезынтересноразвивает косвенный интеграл от функции,имеющий конечный разрыв, явнодемонстрируя всю чушь вышесказанного.Интересно отметить, что дивергенциявекторного поля трансформируетконтрпример. Не доказано, что целое числомонотонно. Если предположить, что a < b, томинимум существенно ускоряет интеграл от

42

Page 44: Гибкие коробки на практике — Арсений Форштретер

Добавляем иконку

<div class="overlay">

<div class="modal">

<span class="icon">i</span>

...

</div>

</div>

01.

02.

03.

04.

05.

06.

43

Page 45: Гибкие коробки на практике — Арсений Форштретер

Добавляем иконку

Представляется логичным, что интеграл отфункции, обращающейся в бесконечность визолированной точке небезынтересноразвивает косвенный интеграл от функции,имеющий конечный разрыв, явнодемонстрируя всю чушь вышесказанного.Интересно отметить, что дивергенциявекторного поля трансформируетконтрпример. Не доказано, что целое числомонотонно. Если предположить, что a < b, томинимум существенно ускоряет интеграл от

i

44

Page 46: Гибкие коробки на практике — Арсений Форштретер

Добавляем флексбоксы

<div class="overflay">

<div class="wrapper">

<span class="icon"></span>

<div class="modal">...</div>

</div>

</div>

01.

02.

03.

04.

05.

06.

45

Page 47: Гибкие коробки на практике — Арсений Форштретер

Добавляем флексбоксы

.overlay, .wrapper

display: flex;

flex-direction: column;

align-items: center;

justify-content: center;

01.

02.

03.

04.

05.

06.

46

Page 48: Гибкие коробки на практике — Арсений Форштретер

Добавляем флексбоксы

Представляется логичным, что интеграл отфункции, обращающейся в бесконечность визолированной точке небезынтересноразвивает косвенный интеграл от функции,имеющий конечный разрыв, явнодемонстрируя всю чушь вышесказанного.Интересно отметить, что дивергенциявекторного поля трансформируетконтрпример. Не доказано, что целое числомонотонно. Если предположить, что a < b, томинимум существенно ускоряет интеграл от

i

47

Page 49: Гибкие коробки на практике — Арсений Форштретер

Фоллбэк на таблицы

.overlay

display: table;

.wrapper

display: table-cell;

vertical-align: middle;

text-align: center;

01.

02.

03.

04.

05.

06.

07.

08.

48

Page 50: Гибкие коробки на практике — Арсений Форштретер

Фоллбэк на таблицы

.modal

width: 50%;

max-height: 80vh;

display: inline-block;

.icon

display: inline-block;

margin: -20px 50% -20px 0;

01.

02.

03.

04.

05.

06.

07.

08.

09.

49

Page 51: Гибкие коробки на практике — Арсений Форштретер

Фоллбэк на таблицы

Представляется логичным, что интеграл отфункции, обращающейся в бесконечность визолированной точке небезынтересноразвивает косвенный интеграл от функции,имеющий конечный разрыв, явнодемонстрируя всю чушь вышесказанного.Интересно отметить, что дивергенциявекторного поля трансформируетконтрпример. Не доказано, что целое числомонотонно. Если предположить, что a < b, томинимум существенно ускоряет интеграл отфункции комплексной переменной. Интеграл

i

50

Page 52: Гибкие коробки на практике — Арсений Форштретер

Преимущества flexbox-решения

ОК

Представляется логичным, что интеграл отфункции, обращающейся в бесконечность визолированной точке небезынтересноразвивает косвенный интеграл от функции,имеющий конечный разрыв, явнодемонстрируя всю чушь вышесказанного.Интересно отметить, что дивергенциявекторного поля трансформируетконтрпример. Не доказано, что целое числомонотонно. Если предположить, что a < b, то

i

51

Page 53: Гибкие коробки на практике — Арсений Форштретер

Преимущества flexbox-решения

Представляется логичным, что интеграл отфункции, обращающейся в бесконечность визолированной точке небезынтересноразвивает косвенный интеграл от функции,имеющий конечный разрыв, явно

Представляется логичным, что интеграл отфункции, обращающейся в бесконечность визолированной точке небезынтересноразвивает косвенный интеграл от функции,имеющий конечный разрыв, явно

i

52

Page 54: Гибкие коробки на практике — Арсений Форштретер

Панель города

Page 55: Гибкие коробки на практике — Арсений Форштретер

Панель города

Page 56: Гибкие коробки на практике — Арсений Форштретер

Сначала на таблицах. Шаг 1.

<table class="info">

<td class="city">Петропавловск-Камчатский</td>

<td class="wrapper">...</td>

</table>

01.

02.

03.

04.

55

Page 57: Гибкие коробки на практике — Арсений Форштретер

Сначала на таблицах. Шаг 1.

.info

width: 100%;

.city

white-space: nowrap;

.wrapper

width: 100%;

01.

02.

03.

04.

05.

06.

07.

08.

09.

56

Page 58: Гибкие коробки на практике — Арсений Форштретер

Сначала на таблицах. Шаг 1

ПетропавловскКамчатский

57

Page 59: Гибкие коробки на практике — Арсений Форштретер

Сначала на таблицах. Шаг 2.

<table class="info">

<td class="city">Петропавловск-Камчатский</td>

<td class="wrapper">

<div class="another-wrapper">...</div>

</td>

</table>

01.

02.

03.

04.

05.

06.

58

Page 60: Гибкие коробки на практике — Арсений Форштретер

Сначала на таблицах. Шаг 2.

.another-wrapper

position: relative;

01.

02.

03.

59

Page 61: Гибкие коробки на практике — Арсений Форштретер

Сначала на таблицах. Шаг 3.

<table class="info">

<td class="city">Петропавловск-Камчатский</td>

<td class="wrapper">

<div class="another-wrapper">

<div class="just-one-more-wraper-ok">...</td>

</div>

</td>

</table>

01.

02.

03.

04.

05.

06.

07.

08.

60

Page 62: Гибкие коробки на практике — Арсений Форштретер

Сначала на таблицах. Шаг 3.

.just-one-more-wrapper-ok

position: absolute;

right: 0;

min-width: 100%;

01.

02.

03.

04.

05.

61

Page 63: Гибкие коробки на практике — Арсений Форштретер

Сначала на таблицах. Шаг 4.

<div class="just-one-more-wrapper-ok">

<table class="links">

<td class="left">...</td>

<td class="center">...</td>

<td class="right">...</td>

</table>

</td>

01.

02.

03.

04.

05.

06.

62

Page 64: Гибкие коробки на практике — Арсений Форштретер

Сначала на таблицах. Шаг 4.

.links

width: 100%;

01.

02.

03.

63

Page 65: Гибкие коробки на практике — Арсений Форштретер

Сначала на таблицах. Шаг 4.

ПетропавловскКамчатский Вокзалы Аэроэкспресс Служба поддержки

64

Page 66: Гибкие коробки на практике — Арсений Форштретер

Сначала на таблицах. Шаг 4.

ПетропавловскКамчатскийВокзалы Аэропорты Такси Аэроэкспресс Автобус Служба поддержки

65

Page 67: Гибкие коробки на практике — Арсений Форштретер

Еще раз

<table class="info"> <td class="city">Петропавловск-Камчатский</td> <td class="wrapper"> <div class="another-wrapper"> <div class="just-one-more-wraper-ok"> <table class="links"> <td class="left">...</td> <td class="center">...</td> <td class="right">...</td> </table> </div> </div> </td></table>

01.02.03.04.05.06.07.08.09.10.11.12.13.14.

66

Page 68: Гибкие коробки на практике — Арсений Форштретер
Page 69: Гибкие коробки на практике — Арсений Форштретер

Теперь на флексах

<div class="info">

<div class="city">Петропавловск-Камчатский</div>

<div class="left">Аэропорты</div>

<div class="center">Аэроэкспресс</div>

<div class="right">Служба поддержки</div>

</div>

01.

02.

03.

04.

05.

06.

68

Page 70: Гибкие коробки на практике — Арсений Форштретер

Теперь на флексах

.info display: flex;

.city flex: 0 1 auto; /* По умолчанию */

.center flex: 1 0 auto;

.left, .right flex: 0 0 auto;

01.

02.

03.

04.

69

Page 71: Гибкие коробки на практике — Арсений Форштретер

Теперь на флексах

Вокзалы Аэроэкспресс Служба поддержкиПетропавловскКамчатский

70

Page 72: Гибкие коробки на практике — Арсений Форштретер

Теперь на флексах

Аэропорты Вокзалы Аэроэкспресс Такси Автобус Служба поддержкиПетропавловскКамчатский

71

Page 73: Гибкие коробки на практике — Арсений Форштретер

Список литературы

— A Complete Guide to Flexbox – Chris Coyer

— Solved by Flexbox – Philip Walton

— Dive into Flexbox – Greg Smith

— Flexbox isn't slow – Paul Irish

— Flexbox. Теперь понятно – Вадим Макеев

— Leveling Up With Flexbox – Zoe Gillenwater

72

Page 74: Гибкие коробки на практике — Арсений Форштретер

О достоинствах

— Легко решает нетривиальные задачи

— Не хак

— Делает код лучше

73

Page 75: Гибкие коробки на практике — Арсений Форштретер

Y U NO USE FLEXBOX?

— Нигде не поддерживается

— Много префиксов

— IE ≤ 9

— Производительность

— Новое и непонятное

74

Page 76: Гибкие коробки на практике — Арсений Форштретер

FLEXBOX YEAH

— Нигде не поддерживается

— Много префиксов

— IE ≤ 9

— Производительность

— Новое и непонятное

75