Анна Селезнёва
Базовое руководство
Анна Селезнёва

Анна Селезнёва
Ведущий фронтенд-разработчик в Spiral Scout
Соорганизатор сообществ MinskCSS и MinskJS
#freehugs
Не рекомендую
Вы бы перестали пользоваться любимым сайтом,
если бы он стал грузиться на 100ms дольше?
200ms?
500ms?
— Быстрый!
— Удобный!
Два фронтенд-разработчика сидят рядом в баре.
Им не о чем говорить

Если дизайнер не показал, как делать что-то,
нельзя делать вид, что этого нет

🤷Не было задачи или времени
🤷Недостаточно опыта или инструментов
🤷Его нет
Есть дизайнер? Спроси
Нет дизайнера? Сделай сам
Действуй!
Удовлетворительное решение, созданное верстальщиком, лучше, чем отсутствующее идеальное от дизайнера.
Не нужно ждать, нужно сделать самому, а дизайнеру потом сообщить.
Если не понравится, он поправит, но зачастую дизайнера вполне устроит ваше решение.
Ведь оно основано не на фантазии, а на опыте в подобных кейсах
Неудобно? Сложно? Спроси
Не согласен с решением? Спорь
Найди компромисс
Дизайн – это не только то,
как это выглядит и ощущается
Дизайн – это то, как это работает

В 2020 году более 80% людей
пользуются интернетом
* — в развитых странах
<meta
name="viewport"
content="width=device-width, initial-scale=1"
>
Важно! Не отключайте возможность масштабирования:
user-scalable=yes
270x240
.block {
width: 270px;
height: 240px;
}
.block {
width: 270px;
height: 240px;
}
/* 1rem = 16px */
.block {
width: 16.875rem;
height: 15rem;
}

html {
font-size: 16px; /* по умолчанию */
}
@media (max-width: 1280px) {
html {
font-size: 12px;
}
}
1440
?
1024
?
768
html {
font-size: calc($min_font_size +
($max_font_size - $min_font_size) *
((100vw - $min_viewport_width) /
($max_viewport_width - $min_viewport_width))
);
}
This cat happen now, it was too purr-fect!!! Trip owner up in kitchen i want food make meme, make cute face for where is my slave?
Paleo tousled snackwave, tumeric selvage XOXO lomo. Microdosing kickstarter shabby chic raw denim craft beer woke keffiyeh umami yr pug pitchfork.
Bender, we're trying our best. Yep, I remember. They came in last at the Olympics, then retired to promote alcoholic beverages! No!
Есть над чем задуматься: акционеры крупнейших компаний лишь добавляют фракционных разногласий и подвергнуты целой серии независимых исследований.
Было:
Стало:
Ничего не найдено
Интернационализация
Terms of Use
Условия
использования
?
Nutzungsbedingungen
Sozialversicherungsfachangestelltenauszubildender (49 букв)
Cтажер помощника социального страхового брокера
Принудительно перенести:
word-break: break-all;
До:
После:
Обрезать и добавить многоточие:
text-overflow: ellipsis;
overflow: hidden;
До:
После:
<svg viewBox="0 0 150 20">
<text x="0" y="15">Добавить в корзину</text>
</svg>
svg {
width: 100%;
}
elem.style.fontSize =`${
(elem.clientWidth / elem.innerText.length) * K
}rem`
/*
K = X / W
где W — средняя ширина буквы в пикселях при размере шрифта X
*/
Пропорционально центрировать:
img {
max-height:100%;
max-width: 100%;
object-fit: contain;
}

Инициалы:
Пример:
Пример:
Просто:
a {
text-decoration: underline;
}
Гибко:
a {
background-image: linear-gradient(currentColor,currentColor);
background-position: center bottom .25rem;
background-repeat: no-repeat;
background-size: 100% 1px;
}
Хотя бы так:
a:hover {
opacity: .75;
}
А лучше так:
a:hover {
color: darken($color, 10%);
/* или */
color: lighten($color, 10%);
}
button::after {
content: ;
}
Что надо?
Спустя 2 минуты:
— Введи сюда e-mail
— А сюда много текста
— Ты находишься здесь
— Сюда вводить нельзя
— Что-то пошло не так
<input name="email" type="email" placeholder="E-mail">
До:
После:
Что здесь?
input:placeholder-shown ~ label {
opacity: 0;
}
<label>E-mail</label>
<input name="email" type="email">
Чей я?
<label for="email-unique-id">E-mail</label>
<input id="email-unique-id" name="email" type="email">
<label>
<span>E-mail</span>
<input name="email" type="email">
</label>
+50 к доступности
— Сюда обязательно нужно что-то ввести
Не отключайте выделение:
outline: none
Подобрать стиль:
button:focus {
outline: none;
box-shadow: 0 0 0 .25em white,
0 0 0 .375em tomato;
}
Оставить выделение для навигации с клавиатуры:
button:focus:not(:focus-visible) {
outline: none;
}
Полифил: github.com/WICG/focus-visible
[data-js-focus-visible]
button:focus:not([data-focus-visible-added] {
outline: none;
}
Данные успешно сохранены
При отправке произошла ошибка
Всё будет хорошо, я проверяла
@keyframes shake {
10%,90% { transform: translateX(-.25rem); }
20%,80% { transform: translateX(.25rem); }
30%,50%,70% { transform: translateX(-.5rem); }
40%,60% { transform: translateX(.5rem); }
}
animation:
shake .75s cubic-bezier(.36,.07,.19,.97);
Promise.all([
loadData(),
timeOut()
])
.then(...)
1 секунда 🙂
2 секунды 😐
3 секунды 😒
5 секунд 😡
10 секунд 💀

Объясняйте, что происходит
Ищем лучшие варианты
Показывайте, что уже сделано
Обработано 99 источников
Отвлекайте от ожидания
А знаете ли вы, что...





Слайды: askd.rocks/pres/ui-2020