html5 web components: следующий шаг к модульности вашего...
TRANSCRIPT
![Page 1: HTML5 Web Components: следующий шаг к модульности вашего проекта](https://reader031.vdocuments.mx/reader031/viewer/2022020208/55c6e9b8bb61ebed298b4631/html5/thumbnails/1.jpg)
1
HTML5 Web Components: следующий шаг к модульности вашего проекта
Андрей Рахманов, Enaza
![Page 2: HTML5 Web Components: следующий шаг к модульности вашего проекта](https://reader031.vdocuments.mx/reader031/viewer/2022020208/55c6e9b8bb61ebed298b4631/html5/thumbnails/2.jpg)
2
![Page 3: HTML5 Web Components: следующий шаг к модульности вашего проекта](https://reader031.vdocuments.mx/reader031/viewer/2022020208/55c6e9b8bb61ebed298b4631/html5/thumbnails/3.jpg)
Как мы решили попробовать
3
![Page 4: HTML5 Web Components: следующий шаг к модульности вашего проекта](https://reader031.vdocuments.mx/reader031/viewer/2022020208/55c6e9b8bb61ebed298b4631/html5/thumbnails/4.jpg)
Single-Page App
4
![Page 5: HTML5 Web Components: следующий шаг к модульности вашего проекта](https://reader031.vdocuments.mx/reader031/viewer/2022020208/55c6e9b8bb61ebed298b4631/html5/thumbnails/5.jpg)
5
![Page 6: HTML5 Web Components: следующий шаг к модульности вашего проекта](https://reader031.vdocuments.mx/reader031/viewer/2022020208/55c6e9b8bb61ebed298b4631/html5/thumbnails/6.jpg)
6
![Page 7: HTML5 Web Components: следующий шаг к модульности вашего проекта](https://reader031.vdocuments.mx/reader031/viewer/2022020208/55c6e9b8bb61ebed298b4631/html5/thumbnails/7.jpg)
Код победил!
7
![Page 10: HTML5 Web Components: следующий шаг к модульности вашего проекта](https://reader031.vdocuments.mx/reader031/viewer/2022020208/55c6e9b8bb61ebed298b4631/html5/thumbnails/10.jpg)
10
![Page 11: HTML5 Web Components: следующий шаг к модульности вашего проекта](https://reader031.vdocuments.mx/reader031/viewer/2022020208/55c6e9b8bb61ebed298b4631/html5/thumbnails/11.jpg)
Поиск подходящего решения
• Плохо сочетать Backbone.js с другими фреймворками
• Надо использовать native-реализацию или библиотеку
11
![Page 12: HTML5 Web Components: следующий шаг к модульности вашего проекта](https://reader031.vdocuments.mx/reader031/viewer/2022020208/55c6e9b8bb61ebed298b4631/html5/thumbnails/12.jpg)
Составные части Web Components
• Templates
• HTML Imports
• Custom Elements
• Shadow DOM
12
![Page 13: HTML5 Web Components: следующий шаг к модульности вашего проекта](https://reader031.vdocuments.mx/reader031/viewer/2022020208/55c6e9b8bb61ebed298b4631/html5/thumbnails/13.jpg)
Native: Пока весьма печально…
Templates
HTML Imports
Custom Elements
Shadow DOM
13
![Page 14: HTML5 Web Components: следующий шаг к модульности вашего проекта](https://reader031.vdocuments.mx/reader031/viewer/2022020208/55c6e9b8bb61ebed298b4631/html5/thumbnails/14.jpg)
Polyfills: Уже лучше!
Templates
HTML Imports
Custom Elements
Shadow DOM
14
![Page 15: HTML5 Web Components: следующий шаг к модульности вашего проекта](https://reader031.vdocuments.mx/reader031/viewer/2022020208/55c6e9b8bb61ebed298b4631/html5/thumbnails/15.jpg)
Что нам предлагают на текущий момент?
Bosonic
X-Tag (Mozilla)
Native
Polymer (Google)
15
![Page 16: HTML5 Web Components: следующий шаг к модульности вашего проекта](https://reader031.vdocuments.mx/reader031/viewer/2022020208/55c6e9b8bb61ebed298b4631/html5/thumbnails/16.jpg)
Мы выбрали Polymer
• Декларативное описание элементов
• Удобный «синтаксический сахар» над нативнойреализацией
16
![Page 17: HTML5 Web Components: следующий шаг к модульности вашего проекта](https://reader031.vdocuments.mx/reader031/viewer/2022020208/55c6e9b8bb61ebed298b4631/html5/thumbnails/17.jpg)
17
На пороге интеграции в существующий проект
![Page 18: HTML5 Web Components: следующий шаг к модульности вашего проекта](https://reader031.vdocuments.mx/reader031/viewer/2022020208/55c6e9b8bb61ebed298b4631/html5/thumbnails/18.jpg)
Стек технологий
18
![Page 19: HTML5 Web Components: следующий шаг к модульности вашего проекта](https://reader031.vdocuments.mx/reader031/viewer/2022020208/55c6e9b8bb61ebed298b4631/html5/thumbnails/19.jpg)
Стек технологий
19
![Page 20: HTML5 Web Components: следующий шаг к модульности вашего проекта](https://reader031.vdocuments.mx/reader031/viewer/2022020208/55c6e9b8bb61ebed298b4631/html5/thumbnails/20.jpg)
Стек технологий
20
![Page 21: HTML5 Web Components: следующий шаг к модульности вашего проекта](https://reader031.vdocuments.mx/reader031/viewer/2022020208/55c6e9b8bb61ebed298b4631/html5/thumbnails/21.jpg)
Как делаем мы
21
![Page 22: HTML5 Web Components: следующий шаг к модульности вашего проекта](https://reader031.vdocuments.mx/reader031/viewer/2022020208/55c6e9b8bb61ebed298b4631/html5/thumbnails/22.jpg)
Чего ожидает от нас Polymer
<dom-module>
<style>
</style>
<template>
</template>
</dom-module>
<script>
</script>
Файл с компонентом
}
22
![Page 23: HTML5 Web Components: следующий шаг к модульности вашего проекта](https://reader031.vdocuments.mx/reader031/viewer/2022020208/55c6e9b8bb61ebed298b4631/html5/thumbnails/23.jpg)
Подключаем один компонент
my-component
23
![Page 24: HTML5 Web Components: следующий шаг к модульности вашего проекта](https://reader031.vdocuments.mx/reader031/viewer/2022020208/55c6e9b8bb61ebed298b4631/html5/thumbnails/24.jpg)
Подключаем один компонент
my-component
level_1_1
polymer.html
24
![Page 25: HTML5 Web Components: следующий шаг к модульности вашего проекта](https://reader031.vdocuments.mx/reader031/viewer/2022020208/55c6e9b8bb61ebed298b4631/html5/thumbnails/25.jpg)
Подключаем один компонент
my-component
level_2_1
level_2_2
level_2_3
level_1_1
polymer.html
25
![Page 26: HTML5 Web Components: следующий шаг к модульности вашего проекта](https://reader031.vdocuments.mx/reader031/viewer/2022020208/55c6e9b8bb61ebed298b4631/html5/thumbnails/26.jpg)
1 import == 6 запросов
а за ним пойдут…
26
![Page 28: HTML5 Web Components: следующий шаг к модульности вашего проекта](https://reader031.vdocuments.mx/reader031/viewer/2022020208/55c6e9b8bb61ebed298b4631/html5/thumbnails/28.jpg)
Можно ли ограничиться минимумом сетевых запросов?
vendor.js
app.js
28
![Page 29: HTML5 Web Components: следующий шаг к модульности вашего проекта](https://reader031.vdocuments.mx/reader031/viewer/2022020208/55c6e9b8bb61ebed298b4631/html5/thumbnails/29.jpg)
Как положить всё в скрипты
???
vendor.jswebcomponents-lite.js
прочие библиотеки
polymer.html
app.js
<наши компоненты>.html
???29
![Page 31: HTML5 Web Components: следующий шаг к модульности вашего проекта](https://reader031.vdocuments.mx/reader031/viewer/2022020208/55c6e9b8bb61ebed298b4631/html5/thumbnails/31.jpg)
Использовать - удобно
31
![Page 32: HTML5 Web Components: следующий шаг к модульности вашего проекта](https://reader031.vdocuments.mx/reader031/viewer/2022020208/55c6e9b8bb61ebed298b4631/html5/thumbnails/32.jpg)
1) Требуется fix для Polymer:
2) Требуется HTML Inject:
Но реализация - неудачная
32
![Page 33: HTML5 Web Components: следующий шаг к модульности вашего проекта](https://reader031.vdocuments.mx/reader031/viewer/2022020208/55c6e9b8bb61ebed298b4631/html5/thumbnails/33.jpg)
Что будет, если регистрировать веб-компонент из скрипта?
33
![Page 34: HTML5 Web Components: следующий шаг к модульности вашего проекта](https://reader031.vdocuments.mx/reader031/viewer/2022020208/55c6e9b8bb61ebed298b4631/html5/thumbnails/34.jpg)
Результат
• Такой код неудобно поддерживать
• Нерешенный вопрос с подключением polymer.html
34
![Page 35: HTML5 Web Components: следующий шаг к модульности вашего проекта](https://reader031.vdocuments.mx/reader031/viewer/2022020208/55c6e9b8bb61ebed298b4631/html5/thumbnails/35.jpg)
Итак, Vulcanize
polymer.html
component_1.html
component_2.html component_3.html
styles.css
script.js
35
![Page 36: HTML5 Web Components: следующий шаг к модульности вашего проекта](https://reader031.vdocuments.mx/reader031/viewer/2022020208/55c6e9b8bb61ebed298b4631/html5/thumbnails/36.jpg)
Варианты подключения
36
components.html
?index.html
![Page 37: HTML5 Web Components: следующий шаг к модульности вашего проекта](https://reader031.vdocuments.mx/reader031/viewer/2022020208/55c6e9b8bb61ebed298b4631/html5/thumbnails/37.jpg)
Внедрение в index.html
37
Меньше запросов
Сборкане кэшируется
![Page 38: HTML5 Web Components: следующий шаг к модульности вашего проекта](https://reader031.vdocuments.mx/reader031/viewer/2022020208/55c6e9b8bb61ebed298b4631/html5/thumbnails/38.jpg)
HTML Import сборки
38
1 лишний запросне так страшен
Сборкакэшируется
![Page 39: HTML5 Web Components: следующий шаг к модульности вашего проекта](https://reader031.vdocuments.mx/reader031/viewer/2022020208/55c6e9b8bb61ebed298b4631/html5/thumbnails/39.jpg)
Резюме
• Подключение компонентов в сборки JS –нестабильное решение
• Vulcanize снижает число сетевых запросов и решает проблему
39
![Page 40: HTML5 Web Components: следующий шаг к модульности вашего проекта](https://reader031.vdocuments.mx/reader031/viewer/2022020208/55c6e9b8bb61ebed298b4631/html5/thumbnails/40.jpg)
40
Хочется удобства: подружим Polymer, Jade,
Stylus и Browserify
![Page 41: HTML5 Web Components: следующий шаг к модульности вашего проекта](https://reader031.vdocuments.mx/reader031/viewer/2022020208/55c6e9b8bb61ebed298b4631/html5/thumbnails/41.jpg)
41
![Page 42: HTML5 Web Components: следующий шаг к модульности вашего проекта](https://reader031.vdocuments.mx/reader031/viewer/2022020208/55c6e9b8bb61ebed298b4631/html5/thumbnails/42.jpg)
42
vulcanize
![Page 43: HTML5 Web Components: следующий шаг к модульности вашего проекта](https://reader031.vdocuments.mx/reader031/viewer/2022020208/55c6e9b8bb61ebed298b4631/html5/thumbnails/43.jpg)
43
? vulcanize
![Page 44: HTML5 Web Components: следующий шаг к модульности вашего проекта](https://reader031.vdocuments.mx/reader031/viewer/2022020208/55c6e9b8bb61ebed298b4631/html5/thumbnails/44.jpg)
Вот кто нам поможет!44
![Page 45: HTML5 Web Components: следующий шаг к модульности вашего проекта](https://reader031.vdocuments.mx/reader031/viewer/2022020208/55c6e9b8bb61ebed298b4631/html5/thumbnails/45.jpg)
Gulp Task: Jade -> HTML
45
![Page 46: HTML5 Web Components: следующий шаг к модульности вашего проекта](https://reader031.vdocuments.mx/reader031/viewer/2022020208/55c6e9b8bb61ebed298b4631/html5/thumbnails/46.jpg)
Gulp Task: Stylus -> CSS
46
![Page 47: HTML5 Web Components: следующий шаг к модульности вашего проекта](https://reader031.vdocuments.mx/reader031/viewer/2022020208/55c6e9b8bb61ebed298b4631/html5/thumbnails/47.jpg)
Gulp Task: склеим 3 файла в 1
47
![Page 48: HTML5 Web Components: следующий шаг к модульности вашего проекта](https://reader031.vdocuments.mx/reader031/viewer/2022020208/55c6e9b8bb61ebed298b4631/html5/thumbnails/48.jpg)
48
first.html
second.html
third.html
![Page 49: HTML5 Web Components: следующий шаг к модульности вашего проекта](https://reader031.vdocuments.mx/reader031/viewer/2022020208/55c6e9b8bb61ebed298b4631/html5/thumbnails/49.jpg)
49
first.html
second.html
third.html
vulcanize
register_components.html
html imports:
first.htmlsecond.htmlthird.html
![Page 50: HTML5 Web Components: следующий шаг к модульности вашего проекта](https://reader031.vdocuments.mx/reader031/viewer/2022020208/55c6e9b8bb61ebed298b4631/html5/thumbnails/50.jpg)
Этот реестр формирует Gulp
50
![Page 51: HTML5 Web Components: следующий шаг к модульности вашего проекта](https://reader031.vdocuments.mx/reader031/viewer/2022020208/55c6e9b8bb61ebed298b4631/html5/thumbnails/51.jpg)
51
Управление JS-зависимостями
<script src="…"> VS require('module')
![Page 52: HTML5 Web Components: следующий шаг к модульности вашего проекта](https://reader031.vdocuments.mx/reader031/viewer/2022020208/55c6e9b8bb61ebed298b4631/html5/thumbnails/52.jpg)
<script src="…"> VS require('module')
• Одного JS-файла в компоненте не хватает
• Почему не использовать <script src="…">?CommonJS удобнее!
• Polymer не поддерживает CommonJS.Как собрать самим?
52
![Page 53: HTML5 Web Components: следующий шаг к модульности вашего проекта](https://reader031.vdocuments.mx/reader031/viewer/2022020208/55c6e9b8bb61ebed298b4631/html5/thumbnails/53.jpg)
* jQuery *
* plugins *
* lodash *
* Backbone *
vendor.js
expose external
app.js
external
components.htmlmain.js
module_1.js
* jQuery *не дублируется
53
![Page 54: HTML5 Web Components: следующий шаг к модульности вашего проекта](https://reader031.vdocuments.mx/reader031/viewer/2022020208/55c6e9b8bb61ebed298b4631/html5/thumbnails/54.jpg)
Как сделать так, чтобы компоненты писались сами?
54
![Page 55: HTML5 Web Components: следующий шаг к модульности вашего проекта](https://reader031.vdocuments.mx/reader031/viewer/2022020208/55c6e9b8bb61ebed298b4631/html5/thumbnails/55.jpg)
55
![Page 56: HTML5 Web Components: следующий шаг к модульности вашего проекта](https://reader031.vdocuments.mx/reader031/viewer/2022020208/55c6e9b8bb61ebed298b4631/html5/thumbnails/56.jpg)
Резюме
• Web Components успешно интегрируются с имеющимися инструментами
• Gulp способен решить множество задач по сборке компонентов
• Создание нового компонента сводится к одной строке кода для генератора
56
![Page 57: HTML5 Web Components: следующий шаг к модульности вашего проекта](https://reader031.vdocuments.mx/reader031/viewer/2022020208/55c6e9b8bb61ebed298b4631/html5/thumbnails/57.jpg)
57
Где применитьвеб-компоненты?
![Page 58: HTML5 Web Components: следующий шаг к модульности вашего проекта](https://reader031.vdocuments.mx/reader031/viewer/2022020208/55c6e9b8bb61ebed298b4631/html5/thumbnails/58.jpg)
Декомпозиция Single-Page App
Переиспользуемые логические блоки
На высоком уровне
Расширение стандартных элементов управления
На низком уровне
58
![Page 59: HTML5 Web Components: следующий шаг к модульности вашего проекта](https://reader031.vdocuments.mx/reader031/viewer/2022020208/55c6e9b8bb61ebed298b4631/html5/thumbnails/59.jpg)
59
Низкий уровень
Расширение стандартных элементов управления
![Page 60: HTML5 Web Components: следующий шаг к модульности вашего проекта](https://reader031.vdocuments.mx/reader031/viewer/2022020208/55c6e9b8bb61ebed298b4631/html5/thumbnails/60.jpg)
Расширение стандартных элементов управления
• <input is="up-autoresizable" />- автоподстройка длины
• <input is="up-colorpicker" />- выбор цвета с альфа-каналом- указание цвета числом
• <up-textarea-count></..>- подсчет числа оставшихся символов
• <up-select></..>- иерархия- запрещенные значения в списке
60
![Page 61: HTML5 Web Components: следующий шаг к модульности вашего проекта](https://reader031.vdocuments.mx/reader031/viewer/2022020208/55c6e9b8bb61ebed298b4631/html5/thumbnails/61.jpg)
<input is="up-autoresizable"/>
| наследование | от input
| подключение | плагина
| отключение | плагина
61
| зависимости через | Browserify
![Page 62: HTML5 Web Components: следующий шаг к модульности вашего проекта](https://reader031.vdocuments.mx/reader031/viewer/2022020208/55c6e9b8bb61ebed298b4631/html5/thumbnails/62.jpg)
<input is="up-colorpicker"/>
62
| наследование | от input
| кастомное| событие
![Page 63: HTML5 Web Components: следующий шаг к модульности вашего проекта](https://reader031.vdocuments.mx/reader031/viewer/2022020208/55c6e9b8bb61ebed298b4631/html5/thumbnails/63.jpg)
63
![Page 64: HTML5 Web Components: следующий шаг к модульности вашего проекта](https://reader031.vdocuments.mx/reader031/viewer/2022020208/55c6e9b8bb61ebed298b4631/html5/thumbnails/64.jpg)
<up-textarea-count>
64
| Public API | для взаимодействия|||
![Page 65: HTML5 Web Components: следующий шаг к модульности вашего проекта](https://reader031.vdocuments.mx/reader031/viewer/2022020208/55c6e9b8bb61ebed298b4631/html5/thumbnails/65.jpg)
65
![Page 66: HTML5 Web Components: следующий шаг к модульности вашего проекта](https://reader031.vdocuments.mx/reader031/viewer/2022020208/55c6e9b8bb61ebed298b4631/html5/thumbnails/66.jpg)
<up-select>
66
| свойства| для биндинга|||||||
![Page 67: HTML5 Web Components: следующий шаг к модульности вашего проекта](https://reader031.vdocuments.mx/reader031/viewer/2022020208/55c6e9b8bb61ebed298b4631/html5/thumbnails/67.jpg)
67
![Page 68: HTML5 Web Components: следующий шаг к модульности вашего проекта](https://reader031.vdocuments.mx/reader031/viewer/2022020208/55c6e9b8bb61ebed298b4631/html5/thumbnails/68.jpg)
68
Высокий уровень
Переиспользуемыелогические блоки
![Page 69: HTML5 Web Components: следующий шаг к модульности вашего проекта](https://reader031.vdocuments.mx/reader031/viewer/2022020208/55c6e9b8bb61ebed298b4631/html5/thumbnails/69.jpg)
Переиспользуемые логические блоки
<внешний блок (атрибуты…)>
<внутренний блок 1 (атрибуты…)>
<поле 1>
<поле 2>
<внутренний блок 2 (атрибуты…)>
<поле 1>
<поле 2>
69
![Page 70: HTML5 Web Components: следующий шаг к модульности вашего проекта](https://reader031.vdocuments.mx/reader031/viewer/2022020208/55c6e9b8bb61ebed298b4631/html5/thumbnails/70.jpg)
Полигон для испытаний70
![Page 71: HTML5 Web Components: следующий шаг к модульности вашего проекта](https://reader031.vdocuments.mx/reader031/viewer/2022020208/55c6e9b8bb61ebed298b4631/html5/thumbnails/71.jpg)
Полигон для испытаний71
![Page 72: HTML5 Web Components: следующий шаг к модульности вашего проекта](https://reader031.vdocuments.mx/reader031/viewer/2022020208/55c6e9b8bb61ebed298b4631/html5/thumbnails/72.jpg)
<up-inspector>
<up-inspector-list label="Позиционирование"
<!– элементы управления -->
<up-inspector label="Свойства"…
<!– элементы управления -->
<up-inspector-list label="Отступы"
<!– элементы управления -->
<!– элементы управления -->
72
![Page 73: HTML5 Web Components: следующий шаг к модульности вашего проекта](https://reader031.vdocuments.mx/reader031/viewer/2022020208/55c6e9b8bb61ebed298b4631/html5/thumbnails/73.jpg)
73
![Page 74: HTML5 Web Components: следующий шаг к модульности вашего проекта](https://reader031.vdocuments.mx/reader031/viewer/2022020208/55c6e9b8bb61ebed298b4631/html5/thumbnails/74.jpg)
74
![Page 75: HTML5 Web Components: следующий шаг к модульности вашего проекта](https://reader031.vdocuments.mx/reader031/viewer/2022020208/55c6e9b8bb61ebed298b4631/html5/thumbnails/75.jpg)
<up-sausage>
<up-state-marker />
<up-sausage type="full" inner-length="200" length="400" …
75
![Page 76: HTML5 Web Components: следующий шаг к модульности вашего проекта](https://reader031.vdocuments.mx/reader031/viewer/2022020208/55c6e9b8bb61ebed298b4631/html5/thumbnails/76.jpg)
76
![Page 77: HTML5 Web Components: следующий шаг к модульности вашего проекта](https://reader031.vdocuments.mx/reader031/viewer/2022020208/55c6e9b8bb61ebed298b4631/html5/thumbnails/77.jpg)
Резюме
• Web Components сильны на обоих уровнях
• Система превращается в набор логических блоков
• Полученный результат удобно поддерживать
77
![Page 78: HTML5 Web Components: следующий шаг к модульности вашего проекта](https://reader031.vdocuments.mx/reader031/viewer/2022020208/55c6e9b8bb61ebed298b4631/html5/thumbnails/78.jpg)
Так здорово ли работать с веб-компонентами в реальном проекте?
78
![Page 79: HTML5 Web Components: следующий шаг к модульности вашего проекта](https://reader031.vdocuments.mx/reader031/viewer/2022020208/55c6e9b8bb61ebed298b4631/html5/thumbnails/79.jpg)
79
Определенно, ДА!
![Page 80: HTML5 Web Components: следующий шаг к модульности вашего проекта](https://reader031.vdocuments.mx/reader031/viewer/2022020208/55c6e9b8bb61ebed298b4631/html5/thumbnails/80.jpg)
Наиболее частые проблемы
• Не все документировано
• Возможны изменения API
• Мало информации на stackoverflowпо свежим версиям библиотек (…но это временно)
80
![Page 81: HTML5 Web Components: следующий шаг к модульности вашего проекта](https://reader031.vdocuments.mx/reader031/viewer/2022020208/55c6e9b8bb61ebed298b4631/html5/thumbnails/81.jpg)
81
Перспективы развития
![Page 82: HTML5 Web Components: следующий шаг к модульности вашего проекта](https://reader031.vdocuments.mx/reader031/viewer/2022020208/55c6e9b8bb61ebed298b4631/html5/thumbnails/82.jpg)
Если вы начинаете прямо сейчас и прямо с Polymer
0.5
0.9
1.0
Много готовых компонентов
База API для 1.0
Обещают уже летом!
82
![Page 83: HTML5 Web Components: следующий шаг к модульности вашего проекта](https://reader031.vdocuments.mx/reader031/viewer/2022020208/55c6e9b8bb61ebed298b4631/html5/thumbnails/83.jpg)
Производительность polyfills (меньше - лучше)https://github.com/polymerlabs/benchmarks
83
![Page 87: HTML5 Web Components: следующий шаг к модульности вашего проекта](https://reader031.vdocuments.mx/reader031/viewer/2022020208/55c6e9b8bb61ebed298b4631/html5/thumbnails/87.jpg)
Pluralsight - HTML5 Web Component Fundamentals
87
![Page 89: HTML5 Web Components: следующий шаг к модульности вашего проекта](https://reader031.vdocuments.mx/reader031/viewer/2022020208/55c6e9b8bb61ebed298b4631/html5/thumbnails/89.jpg)
Резюме
• Интеграция в реальный проект – уже возможна
• Инструменты – активно развиваются
• Библиотеки уже сегодня имеют широкие возможности
• Вы получаете модульность, о которой можно только мечтать!
89
![Page 90: HTML5 Web Components: следующий шаг к модульности вашего проекта](https://reader031.vdocuments.mx/reader031/viewer/2022020208/55c6e9b8bb61ebed298b4631/html5/thumbnails/90.jpg)
Андрей Рахманов[email protected]
Дмитрий Чертков[email protected]
goo.gl/qOuhYP
Попробуйте Web Components.Это вкусно!
90