SlideShare a Scribd company logo
1 of 24
Back to Basics
Как подружить верстку с логикой?
Front-End
Что, если я скажу тебе ...
Front-end разработка
— это создание клиентской части сайта. Front-end
разработчик занимается версткой шаблона сайта и
созданием пользовательского интерфейса.
- Интернеты
Из чего состоит клиентская часть сайта?
Почему фронты
открещиваются от верстки?
Основные причины
● Пришли во фронтенд из мира
бэкендадесктопас улицы
● Считают, что Bootstrap’a достаточно
● Верстка – это вообще изи
● Ленивые мудаки чудаки
● Редко разрабатывают сложные интерфейсы,
работая преимущественно с логикой на
клиенте
Уметь в верстку - это не больно
Чем вредно НЕ уметь в верстку
Ваша логика может быть бесконечно прекрасна, но
какой в этом толк, если пользователь не может
нажать на кнопку?
Чем полезно уметь в верстку
1. Повышается читаемость кода.
2. Ваши интерфейсы становятся
функциональными, доступными,
производительными и с плавной
анимацией.
3. Дизайнеры становятся вашими
друзьями.
4. SEO начинает приносить пользу.
JS - для логики
верстка для всего остального
!JS
Все, что вы можете сделать
без использования JS’a
должно быть сделано БЕЗ
использования JS’a.
HTML и CSS сегодня
HTML5
★ Больше семантики
★ Больше функционала
★ Больше API
★ Регулярные выражения
★ Меньше рамок и
условностей
★ IE8 мертв
★ FLASH мертв
CSS
★ Анимация
★ Плавные переходы
★ Градиенты
★ Медиа-выражения
★ Больше селекторов
★ Вычисляемые значения
★ Новые единицы
★ CSS переменные
Где пруфы, Билли?
НЕвнятный контент
<div class="card">
<div class="card-header">
<div class="card-title">{{ card.title }}</div>
<div class="card-time">{{ card.time }}</div>
</div>
<div class="card-body">
<img :src="card.img.src" :alt="card.img.alt">
<span>{{ card.img.caption }}</span>
</div>
<div class="card-footer">
<a :href="card.link.url" class="card-link">{{ card.link.text }}</a>
</div>
</div>
Внятный контент
<article class="card">
<header class="card-header">
<h3 class="card-title">{{ card.title }}</h3>
<time class="card-time" :datetime="card.time">{{ card.time }}</time>
</header>
<div class="card-body">
<figure class="card-thumb">
<img :src="card.img.src" :alt="card.img.alt">
<figcaption>{{ card.img.caption }}</figcaption>
</figure>
<img :src="card.img.src" :alt="card.img.alt">
<p>{{ card.text }}</p>
</div>
<footer class="card-footer">
<a :href="card.link.url" class="card-link">{{ card.link.text }}</a>
</footer>
</article>
CSS animation VS Built-in transitions
<div id="list-demo">
<button v-on:click="add">Добавить</button>
<button v-on:click="remove">Удалить</button>
<transition-group name="list" tag="p">
<span v-for="item in items" v-bind:key="item" class="list-item">
{{ item }}
</span>
</transition-group>
</div>
CSS animation VS Built-in transitions
.list-item {
display: inline-block;
margin-right: 10px;
}
.list-enter-active, .list-leave-active {
transition: all 1s;
}
.list-enter, .list-leave-to {
opacity: 0;
transform: translateY(30px);
}
CSS animation VS Built-in transitions
var list = [...data];
list.forEach((item, index) => {
if (index === arr.length - 1) {
// сделать круто
}
});
CSS animation VS Built-in transitions
.is-new-item {
position: relative;
animation: fadeIn 1s ease-out backwards;
}
@keyframes fadeIn {
0% {
opacity: 0;
bottom: -50px;
}
100% {
opacity: 1;
bottom: 0;
}
}
JS vs CSS
<ul class="todo-list">
<li class="todo-item done">Выпить кофе</li>
<li class="todo-item done">Подвигать таски</li>
<li class="todo-item done">Выпить кофе</li>
<li class="todo-item done">Посмотреть мемасики</li>
<li class="todo-item">Поиграть в теннис</li>
<li class="todo-item">Пообедать</li>
<li class="todo-item">Выпить кофе</li>
<li class="todo-item">Написать пару строк кода</li>
<li class="todo-item">Пойти домой</li>
<li class="todo-item">Выпить пива</li>
<li class="todo-item">Посмотреть мемасики до 3:00</li>
<li class="todo-item">Очнуться в 12:00 и ползти на бровях в офис</li>
</ul>
JS vs CSS
/* JS */
document.querySelectorAll('.todo-item').forEach(item => {
if (item.classList.contains('done')) {
item.classList.add('hide');
}
})
/* CSS */
.hide {
display: none;
}
JS vs CSS
/* JS */
document.querySelector('.todo-list').classList.toggle('hide-done');
/* CSS */
.hide-done .done {
display: none;
}
Кроссбраузерная “Утка”
Chrome
Firefox
Back to Basics — Как подружить верстку с логикой? | Odessa Frontend Meetup #9

More Related Content

Similar to Back to Basics — Как подружить верстку с логикой? | Odessa Frontend Meetup #9

всплывающее окно при закрытии сайта
всплывающее окно при закрытии сайта  всплывающее окно при закрытии сайта
всплывающее окно при закрытии сайта
Olga Pirozhenko
 
сысоев андрей
сысоев андрейсысоев андрей
сысоев андрей
Vlado Sudin
 
сысоев андрей
сысоев андрейсысоев андрей
сысоев андрей
Vlado Sudin
 
Web весна 2013 лекция 10
Web весна 2013 лекция 10Web весна 2013 лекция 10
Web весна 2013 лекция 10
Technopark
 
Take more from Jquery
Take more from JqueryTake more from Jquery
Take more from Jquery
Magento Dev
 
Конструктор / Денис Паясь (Яндекс)
Конструктор / Денис Паясь (Яндекс)Конструктор / Денис Паясь (Яндекс)
Конструктор / Денис Паясь (Яндекс)
Ontico
 
Js templating stepan_reznikov
Js templating stepan_reznikovJs templating stepan_reznikov
Js templating stepan_reznikov
yaevents
 

Similar to Back to Basics — Как подружить верстку с логикой? | Odessa Frontend Meetup #9 (20)

Bootstrap 3. Адаптивная верстка для WordPress
Bootstrap 3. Адаптивная верстка для WordPressBootstrap 3. Адаптивная верстка для WordPress
Bootstrap 3. Адаптивная верстка для WordPress
 
Bootstrap 3
Bootstrap 3Bootstrap 3
Bootstrap 3
 
всплывающее окно при закрытии сайта
всплывающее окно при закрытии сайта  всплывающее окно при закрытии сайта
всплывающее окно при закрытии сайта
 
Trening modul2-conf3-tema5
Trening modul2-conf3-tema5Trening modul2-conf3-tema5
Trening modul2-conf3-tema5
 
JavaScript Базовый. Занятие 09.
JavaScript Базовый. Занятие 09.JavaScript Базовый. Занятие 09.
JavaScript Базовый. Занятие 09.
 
Itfrk documentolog
Itfrk documentologItfrk documentolog
Itfrk documentolog
 
Проектирование интернет-сайтов и систем в Redsoft
Проектирование интернет-сайтов и систем в RedsoftПроектирование интернет-сайтов и систем в Redsoft
Проектирование интернет-сайтов и систем в Redsoft
 
WP Kitchen Meetup Spring 2015 - Виктор Кулебякин: WordPress JavaScript Utils
WP Kitchen Meetup Spring 2015 - Виктор Кулебякин: WordPress JavaScript UtilsWP Kitchen Meetup Spring 2015 - Виктор Кулебякин: WordPress JavaScript Utils
WP Kitchen Meetup Spring 2015 - Виктор Кулебякин: WordPress JavaScript Utils
 
сысоев андрей
сысоев андрейсысоев андрей
сысоев андрей
 
сысоев андрей
сысоев андрейсысоев андрей
сысоев андрей
 
Js fuckworks
Js fuckworksJs fuckworks
Js fuckworks
 
Web весна 2013 лекция 10
Web весна 2013 лекция 10Web весна 2013 лекция 10
Web весна 2013 лекция 10
 
Scino: Front-end [part-1]
Scino: Front-end [part-1]Scino: Front-end [part-1]
Scino: Front-end [part-1]
 
Take more from Jquery
Take more from JqueryTake more from Jquery
Take more from Jquery
 
Trening modul2-webinar13
Trening modul2-webinar13Trening modul2-webinar13
Trening modul2-webinar13
 
Компонентный дизайн
Компонентный дизайнКомпонентный дизайн
Компонентный дизайн
 
External Widgets Performance
External Widgets PerformanceExternal Widgets Performance
External Widgets Performance
 
Конструктор / Денис Паясь (Яндекс)
Конструктор / Денис Паясь (Яндекс)Конструктор / Денис Паясь (Яндекс)
Конструктор / Денис Паясь (Яндекс)
 
Webuibasics - Lesson 2 - HTML5 Layouts (in russian)
Webuibasics - Lesson 2 - HTML5 Layouts (in russian)Webuibasics - Lesson 2 - HTML5 Layouts (in russian)
Webuibasics - Lesson 2 - HTML5 Layouts (in russian)
 
Js templating stepan_reznikov
Js templating stepan_reznikovJs templating stepan_reznikov
Js templating stepan_reznikov
 

More from OdessaFrontend

Частые ошибки при разработке фронтенда | Odessa Frontend Meetup #17
Частые ошибки при разработке фронтенда | Odessa Frontend Meetup #17Частые ошибки при разработке фронтенда | Odessa Frontend Meetup #17
Частые ошибки при разработке фронтенда | Odessa Frontend Meetup #17
OdessaFrontend
 

More from OdessaFrontend (20)

Викторина | Odessa Frontend Meetup #19
Викторина | Odessa Frontend Meetup #19Викторина | Odessa Frontend Meetup #19
Викторина | Odessa Frontend Meetup #19
 
Использование Recoil в React и React Native приложениях | Odessa Frontend Mee...
Использование Recoil в React и React Native приложениях | Odessa Frontend Mee...Использование Recoil в React и React Native приложениях | Odessa Frontend Mee...
Использование Recoil в React и React Native приложениях | Odessa Frontend Mee...
 
Великолепный Gatsby.js | Odessa Frontend Meetup #19
Великолепный Gatsby.js | Odessa Frontend Meetup #19Великолепный Gatsby.js | Odessa Frontend Meetup #19
Великолепный Gatsby.js | Odessa Frontend Meetup #19
 
Функциональное программирование с использованием библиотеки fp-ts | Odessa Fr...
Функциональное программирование с использованием библиотеки fp-ts | Odessa Fr...Функциональное программирование с использованием библиотеки fp-ts | Odessa Fr...
Функциональное программирование с использованием библиотеки fp-ts | Odessa Fr...
 
Canvas API как инструмент для работы с графикой | Odessa Frontend Meetup #18
Canvas API как инструмент для работы с графикой | Odessa Frontend Meetup #18Canvas API как инструмент для работы с графикой | Odessa Frontend Meetup #18
Canvas API как инструмент для работы с графикой | Odessa Frontend Meetup #18
 
Викторина | Odessa Frontend Meetup #17
Викторина | Odessa Frontend Meetup #17Викторина | Odessa Frontend Meetup #17
Викторина | Odessa Frontend Meetup #17
 
Антихрупкий TypeScript | Odessa Frontend Meetup #17
Антихрупкий TypeScript | Odessa Frontend Meetup #17Антихрупкий TypeScript | Odessa Frontend Meetup #17
Антихрупкий TypeScript | Odessa Frontend Meetup #17
 
Частые ошибки при разработке фронтенда | Odessa Frontend Meetup #17
Частые ошибки при разработке фронтенда | Odessa Frontend Meetup #17Частые ошибки при разработке фронтенда | Odessa Frontend Meetup #17
Частые ошибки при разработке фронтенда | Odessa Frontend Meetup #17
 
OAuth2 и OpenID Connect простым языком | Odessa Frontend Meetup #17
OAuth2 и OpenID Connect простым языком | Odessa Frontend Meetup #17OAuth2 и OpenID Connect простым языком | Odessa Frontend Meetup #17
OAuth2 и OpenID Connect простым языком | Odessa Frontend Meetup #17
 
Объекты в ECMAScript | Odessa Frontend Meetup #16
Объекты в ECMAScript | Odessa Frontend Meetup #16Объекты в ECMAScript | Odessa Frontend Meetup #16
Объекты в ECMAScript | Odessa Frontend Meetup #16
 
Фриланс как профессиональная деградация | Odessa Frontend Meetup #16
Фриланс как профессиональная деградация | Odessa Frontend Meetup #16Фриланс как профессиональная деградация | Odessa Frontend Meetup #16
Фриланс как профессиональная деградация | Odessa Frontend Meetup #16
 
Cлайдер на CSS | Odessa Frontend Meetup #16
Cлайдер на CSS | Odessa Frontend Meetup #16Cлайдер на CSS | Odessa Frontend Meetup #16
Cлайдер на CSS | Odessa Frontend Meetup #16
 
Современный станок верстальщика
Современный станок верстальщикаСовременный станок верстальщика
Современный станок верстальщика
 
Викторина | Odessa Frontend Meetup #15
Викторина | Odessa Frontend Meetup #15Викторина | Odessa Frontend Meetup #15
Викторина | Odessa Frontend Meetup #15
 
DRY’им Vuex | Odessa Frontend Meetup #15
DRY’им Vuex | Odessa Frontend Meetup #15DRY’им Vuex | Odessa Frontend Meetup #15
DRY’им Vuex | Odessa Frontend Meetup #15
 
А/Б тестирование: Что? Как? Зачем? | Odessa Frontend Meetup #15
А/Б тестирование: Что? Как? Зачем? | Odessa Frontend Meetup #15А/Б тестирование: Что? Как? Зачем? | Odessa Frontend Meetup #15
А/Б тестирование: Что? Как? Зачем? | Odessa Frontend Meetup #15
 
Пощупать 3д в браузере | Odessa Frontend Meetup #15
Пощупать 3д в браузере | Odessa Frontend Meetup #15Пощупать 3д в браузере | Odessa Frontend Meetup #15
Пощупать 3д в браузере | Odessa Frontend Meetup #15
 
Викторина | Odessa Frontend Meetup #14
Викторина | Odessa Frontend Meetup #14Викторина | Odessa Frontend Meetup #14
Викторина | Odessa Frontend Meetup #14
 
Викторина | Odessa Frontend Meetup #13
Викторина | Odessa Frontend Meetup #13Викторина | Odessa Frontend Meetup #13
Викторина | Odessa Frontend Meetup #13
 
Структуры данных в JavaScript | Odessa Frontend Meetup #13
Структуры данных в JavaScript | Odessa Frontend Meetup #13Структуры данных в JavaScript | Odessa Frontend Meetup #13
Структуры данных в JavaScript | Odessa Frontend Meetup #13
 

Back to Basics — Как подружить верстку с логикой? | Odessa Frontend Meetup #9

  • 1. Back to Basics Как подружить верстку с логикой?
  • 2. Front-End Что, если я скажу тебе ...
  • 3. Front-end разработка — это создание клиентской части сайта. Front-end разработчик занимается версткой шаблона сайта и созданием пользовательского интерфейса. - Интернеты
  • 4. Из чего состоит клиентская часть сайта?
  • 6. Основные причины ● Пришли во фронтенд из мира бэкендадесктопас улицы ● Считают, что Bootstrap’a достаточно ● Верстка – это вообще изи ● Ленивые мудаки чудаки ● Редко разрабатывают сложные интерфейсы, работая преимущественно с логикой на клиенте
  • 7. Уметь в верстку - это не больно
  • 8. Чем вредно НЕ уметь в верстку Ваша логика может быть бесконечно прекрасна, но какой в этом толк, если пользователь не может нажать на кнопку?
  • 9. Чем полезно уметь в верстку 1. Повышается читаемость кода. 2. Ваши интерфейсы становятся функциональными, доступными, производительными и с плавной анимацией. 3. Дизайнеры становятся вашими друзьями. 4. SEO начинает приносить пользу.
  • 10. JS - для логики верстка для всего остального
  • 11. !JS Все, что вы можете сделать без использования JS’a должно быть сделано БЕЗ использования JS’a.
  • 12. HTML и CSS сегодня HTML5 ★ Больше семантики ★ Больше функционала ★ Больше API ★ Регулярные выражения ★ Меньше рамок и условностей ★ IE8 мертв ★ FLASH мертв CSS ★ Анимация ★ Плавные переходы ★ Градиенты ★ Медиа-выражения ★ Больше селекторов ★ Вычисляемые значения ★ Новые единицы ★ CSS переменные
  • 14. НЕвнятный контент <div class="card"> <div class="card-header"> <div class="card-title">{{ card.title }}</div> <div class="card-time">{{ card.time }}</div> </div> <div class="card-body"> <img :src="card.img.src" :alt="card.img.alt"> <span>{{ card.img.caption }}</span> </div> <div class="card-footer"> <a :href="card.link.url" class="card-link">{{ card.link.text }}</a> </div> </div>
  • 15. Внятный контент <article class="card"> <header class="card-header"> <h3 class="card-title">{{ card.title }}</h3> <time class="card-time" :datetime="card.time">{{ card.time }}</time> </header> <div class="card-body"> <figure class="card-thumb"> <img :src="card.img.src" :alt="card.img.alt"> <figcaption>{{ card.img.caption }}</figcaption> </figure> <img :src="card.img.src" :alt="card.img.alt"> <p>{{ card.text }}</p> </div> <footer class="card-footer"> <a :href="card.link.url" class="card-link">{{ card.link.text }}</a> </footer> </article>
  • 16. CSS animation VS Built-in transitions <div id="list-demo"> <button v-on:click="add">Добавить</button> <button v-on:click="remove">Удалить</button> <transition-group name="list" tag="p"> <span v-for="item in items" v-bind:key="item" class="list-item"> {{ item }} </span> </transition-group> </div>
  • 17. CSS animation VS Built-in transitions .list-item { display: inline-block; margin-right: 10px; } .list-enter-active, .list-leave-active { transition: all 1s; } .list-enter, .list-leave-to { opacity: 0; transform: translateY(30px); }
  • 18. CSS animation VS Built-in transitions var list = [...data]; list.forEach((item, index) => { if (index === arr.length - 1) { // сделать круто } });
  • 19. CSS animation VS Built-in transitions .is-new-item { position: relative; animation: fadeIn 1s ease-out backwards; } @keyframes fadeIn { 0% { opacity: 0; bottom: -50px; } 100% { opacity: 1; bottom: 0; } }
  • 20. JS vs CSS <ul class="todo-list"> <li class="todo-item done">Выпить кофе</li> <li class="todo-item done">Подвигать таски</li> <li class="todo-item done">Выпить кофе</li> <li class="todo-item done">Посмотреть мемасики</li> <li class="todo-item">Поиграть в теннис</li> <li class="todo-item">Пообедать</li> <li class="todo-item">Выпить кофе</li> <li class="todo-item">Написать пару строк кода</li> <li class="todo-item">Пойти домой</li> <li class="todo-item">Выпить пива</li> <li class="todo-item">Посмотреть мемасики до 3:00</li> <li class="todo-item">Очнуться в 12:00 и ползти на бровях в офис</li> </ul>
  • 21. JS vs CSS /* JS */ document.querySelectorAll('.todo-item').forEach(item => { if (item.classList.contains('done')) { item.classList.add('hide'); } }) /* CSS */ .hide { display: none; }
  • 22. JS vs CSS /* JS */ document.querySelector('.todo-list').classList.toggle('hide-done'); /* CSS */ .hide-done .done { display: none; }