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

Тимофей Чаптыков, 2GIS

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

Тимофей Чаптыков

t.chaptykov@2gis.ru @chaptykov

Holy war

— What are you doing when you don’t code?
— Testing and debugging.

Yes, cap!


/* Префиксы */

.class {
	-khtml-border-radius: 10px;
	border-radius: 10px;
	}
		

6 посещений за прошедший месяц на 2gis.ru

~ 0.00% согласно Google Analytics

~ 128 МБ трафика


<!-- Метатеги -->

<meta http-equiv="Cache-Control" content="no-cache">
<meta http-equiv="cleartype" content="on">
<meta name="HandheldFriendly" content="True">
<meta name="viewport" content="width=device-width, height=device-height, 
initial-scale=1.0, user-scalable=no, maximum-scale=1.0"
>
<meta name="apple-mobile-web-app-capable" content="yes"t; <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta http-equiv="imagetoolbar" content="black-translucent"> <meta http-equiv="msthemecompatible" content="no"> <meta name="format-detection" content="telephone=no"> <meta name="format-detection" content="address=no"> <!-- ... -->

Flexbox на мобилках

Элементы интерфейса должны быть родными для браузера и системы

Готовые решения

Килобайты

Оверкил

Пишем сами

Optgroup

Много текста

Скролл

Управление с клавиатуры

Баги, баги

В реальной жизни

Можно было так

Или даже так

Больше, больше контроля

Много контроля

Проблемы подхода

Мало контроля

Baron

Много контроля

Мало контроля


<!-- Структура -->

<h1>Mindmap root</h1>
<ol>
    <li>
        Element
        <ol>
            <li>Element</li>
            <li>Element</li>
            <!-- ... -->
        </ol>
    </li>
    <!-- ... -->
</ol>
		

<!-- Узлы -->

<h1>Mindmap root</h1>
<ol>
    <li>
        Element
        <ol>
            <li>Element</li>
            <li>Element</li>
            <!-- ... -->
        </ol>
    </li>
    <!-- ... -->
</ol>
		

<!-- Список дочерних узлов -->

<h1>Mindmap root</h1>
<ol>
    <li>
        Element
        <ol>
            <li>Element</li>
            <li>Element</li>
            <!-- ... -->
        </ol>
    </li>
    <!-- ... -->
</ol>
		

<!-- Список дочерних узлов -->

<h1>Mindmap root</h1>
<ol>
    <li>
        Element
        <ol>
            <li>Element</li>
            <li>Element</li>
            <!-- ... -->
        </ol>
    </li>
    <!-- ... -->
</ol>
		

<!-- Немного БЭМ -->

<h1 class="node node_root">Mindmap root</h1>

<ol class="children">
    <li class="children__item">

        <div class="node">Element</div>

        <ol class="children">
            <li class="children__item">
                <div class="node">Element</div>
            </li>
            <li class="children__item">
                <div class="node">Element</div>
            </li>
            <!-- ... -->
        </ol>

    </li>
    <!-- ... -->
</ol>
		

/* Все позиционирование двумя CSS-правилами */

.node {
    display: inline-block;
    vertical-align: middle;
    }

.children {
    display: inline-block;
    vertical-align: middle;
    list-style: none;
    }
		

Добавляем стили для псевдоэлементов

Бонусы


// Вписываем фотографию в произвольный блок

function fitImage() {
	// ...
}

// Resize
// Debounce|Throttle
// On load
// Все равно не заработает для скрытых блоков
		

/* Вписываем фотографию в произвольный блок */

.image {
	background-size: contain;
	}

@media (max-width: 400px) {
	.image {
    	background-size: cover;
    	}
    }
		

/* Неожиданный бонус */

.image {
	background-size: contain;
	background-attachment: fixed;
	}
		

Photor

github.com/2gis/photor

Ахтунг

Как писать меньше кода

Думайте про фичу, а не про код

2ГИС

Тимофей Чаптыков

t.chaptykov@2gis.ru
@chaptykov