Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam efficitur nec dolor sed volutpat. Nulla nisi nibh, maximus quis turpis a, gravida sodales nisi.
Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Aliquam hendrerit finibus venenatis. Donec maximus volutpat lacus, ac mollis leo ultricies molestie. Maecenas volutpat nunc dui, sit amet pharetra odio ultrices quis. Ut tincidunt fringilla hendrerit. Vestibulum suscipit arcu a risus fermentum, non tristique lorem varius. Aliquam ut elit porttitor, iaculis ex id, dignissim neque. Sed a tincidunt mi. Pellentesque nec gravida lorem. Fusce laoreet interdum varius. Suspendisse semper tellus et lorem condimentum, ut iaculis metus consectetur. Proin aliquam sodales arcu eget tempus. Nulla pulvinar commodo ex, vel hendrerit massa posuere vitae. Pellentesque id augue nec nulla sollicitudin accumsan eget vel urna. Morbi vestibulum dolor ac urna suscipit, vel luctus sapien ornare. Maecenas feugiat condimentum lacus, eu iaculis sapien eleifend ac. Vivamus venenatis odio sed sapien consectetur mollis. Etiam velit ligula, tempus ac quam ac, interdum tristique mauris. Maecenas felis nisi, sagittis sed velit sed, varius mattis sapien. Donec in auctor mauris, sit amet eleifend quam. Pellentesque scelerisque, lorem a porta egestas, ipsum quam venenatis metus, sed finibus tortor mauris quis nulla. Aenean non tortor id nibh maximus ullamcorper. Nulla porta leo eu maximus vulputate. Etiam eu sagittis libero. Vivamus condimentum urna elementum, feugiat odio sit amet, ornare felis. Morbi vehicula, tellus sed fermentum facilisis, augue quam ullamcorper nibh, vitae rutrum ex enim vitae arcu. Praesent eu risus eget lectus scelerisque aliquam sed vel dolor. Aenean ultrices risus at sem euismod, vel faucibus metus cursus. Cras in ex ante. Morbi ac eleifend risus. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Donec vitae placerat lorem. Aliquam convallis odio eu nunc efficitur, quis sollicitudin sapien pretium. Donec ultrices, turpis in faucibus faucibus, orci orci accumsan magna, vel pulvinar libero purus at sapien. Sed tincidunt risus sed est vehicula condimentum. Aenean sit amet nulla tincidunt, sagittis diam vitae, tincidunt metus. Donec posuere urna eget ligula suscipit, nec rutrum odio venenatis. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam maximus est at nisl vulputate consequat. Maecenas sed aliquet risus, et eleifend enim. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Nulla nec risus ut sapien sagittis pharetra.
Donec pulvinar semper lectus iaculis accumsan. Fusce ex est, pulvinar sollicitudin pellentesque sit amet, tempus eget velit. Praesent porttitor consectetur faucibus. Quisque ex leo, posuere elementum pulvinar eu, rutrum scelerisque sem. Nullam auctor mauris non congue bibendum. Suspendisse enim lorem, rutrum eu diam at, viverra tincidunt orci. Nam nec ligula eu tellus malesuada fermentum. Aenean sit amet ex vitae est accumsan vestibulum. Curabitur eu vulputate turpis, vitae tincidunt dui. Phasellus auctor non enim sit amet egestas. Integer porta odio quis commodo cursus. Donec ornare, ipsum vitae lacinia gravida, ex tellus scelerisque sapien, pellentesque porttitor leo leo sit amet risus. Cras sit amet mattis eros. Vestibulum efficitur viverra metus a mattis. Quisque id imperdiet diam, eu iaculis massa. Aliquam vitae ipsum sit amet leo luctus ultricies. Nulla laoreet augue sapien, a tincidunt sapien consequat vel. Sed faucibus eu urna a porttitor. Nulla sit amet consequat arcu. Aliquam et fermentum justo, ac aliquam lacus. Aliquam congue purus ligula, sit amet molestie leo congue a. Etiam fringilla lorem ut tempor porta. Vivamus tempus ultrices nulla, ut ornare ex placerat non. Aenean aliquet purus a orci eleifend, sed porttitor purus pretium. Nulla condimentum feugiat commodo. Donec placerat placerat mi, id efficitur lectus tempus luctus. Vivamus luctus ut diam et facilisis. Vivamus non enim non purus mollis efficitur. Nullam ipsum nisl, fringilla sed arcu vel, suscipit efficitur magna. Praesent sed nibh ullamcorper, tempus ipsum eget, laoreet elit. Aenean convallis ex nisi, sed placerat nisl imperdiet eu. Aliquam pharetra ipsum ac felis gravida ullamcorper. Nulla vitae lacus tortor. Pellentesque laoreet eros a ipsum commodo, ac dapibus elit ullamcorper. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Duis fermentum fringilla orci ultricies vestibulum. Donec suscipit sapien vitae posuere placerat. Proin quis vehicula nunc, vitae bibendum dui. Etiam feugiat rhoncus egestas. Nulla facilisi. Curabitur ultrices lacus ut viverra euismod. Proin venenatis eu enim sed dignissim. Pellentesque nec libero lobortis, laoreet nulla aliquam, vulputate nulla. Vivamus in felis sit amet mauris convallis placerat eu non neque. Nunc pretium posuere ante, sit amet iaculis eros suscipit et. Vivamus pretium nibh accumsan, facilisis leo id, accumsan magna. Suspendisse potenti. Suspendisse potenti. Mauris in faucibus lacus. Suspendisse justo justo, scelerisque sed placerat id, tristique sed tellus. In volutpat bibendum dolor, ac porta augue maximus feugiat. Aliquam lobortis vestibulum mi, eget fermentum mauris tristique id. Duis accumsan fermentum mi et eleifend.
Показать поповер

.page

Это самый старший разметочный блок, значит. Он разбивает страницу на:

.page__panel.page__panel_id_header
.page__popover.page__popover_id_%popover-id%
.page__panel.page__panel_id_sidebar
.page__body
.page__panel.page__panel_id_aside.
                    


Панели

В этой мешанине на первом уровне есть три панели: .page__panel. У них одинаковая динамика - это зафиксированные на 100% высоты экрана, которые не поддаются скроллбару. Различаются они модификаторами:
.page__panel_id_header,
.page__panel_id_sidebar,
.page__panel_id_aside

Дальше в глубь этих панелей идут колонны с контентом .page__column. Соответствено всплывает проблема переполнения контентом. Если ничего не предпринять, то контент ниже 100% будет обрезан. Если предпринять скроллбар внутри колонны, то внутри будет overflow и невозможно будет использовать всякие тултипы, которые вылетают за границу колонны.

Решение следующее. По дефолту предпринимаем ничего и полагаем, что содержимое панелей всегда умещается в 100% высоты. Например шапка - там никаких проблем, там не бывает скроллбаров. С другой стороны на страницах диалогов или чата переполнение может быть. Там добавляем скроллбар. Делается это модификатором .page__column_scroll - он создает непосредственно сам скроллбар. Кастомизируем его блоком .scroll (добавляем еще и его классы .scroll и .scroll_skin_default).

В принципе - эта проблема встречается только с выпадайкой в меню пользователя: http://prntscr.com/cbamud. Больше никаких таких тултипов, которые вылетают за свою колонну у нас нет. Так что можно сказать, что шапка не обладает скроллбаром, а все остальные панели всегда обладают и можно их всегда делать со скроллбарами. Тем не менее, функционал добавления скроллбара - это отдельный модификатор и в случае чего его можно повесить на колонну в шапке или снять с колонны в сайдбаре.



Тело страницы

.page__body - оно ведет себя как обычно. Просто бесконечная лента. Она вполне себе может быть переполнена контентом. Скроллируется обычным браузерным скроллбаром. Этот, браузерный, уже не кастомизируется.



Поповер

Показать поповер

Это элемент .page__popover, что так же на первом уровне вложенности у .page. Идет после панели шапки и перед панелью сайдбара. Поповеров может быть сколько угодно.

В каком-то смысле поповеры - это модальные окна на нашем сайте. Но и на панели описанные выше они тоже похоже. Позиционируются так же фиксированно, так же не поддаются скроллбарам. Внутри поповеров точно такойже .page__column, на который можно вешать, а можно и не вешать скроллбар. Но версточные различия тут тоже есть

По дефолту поповеры прячутся за шапкой и за левым краем экрана. Вытаскивает их модификатор .page__popover_visible, который, как видно из названия, должен проставляться непосредственно к поповеру. При его наличии поповер видим. Убираем класс - скрывается. Анимация делается версткой.

Для открытия поповера предлагаю всем кнопка и ссылкам, которые являются хендлером проставлять дату data-popover=".page__popover_id_demo", которая ссылается на селектор нужного поповера. Но это так, для демонстрации в этих доках только. При программировании делать как угодно. Соответственно все классы типа .page__popover_id_demo нужны только для этой связи. В верстке они не используются. Если при программировании идет обращения к ним как-то по другому, то эти классы не нужны.



Скрываем сайдбар и асайд

У нас есть страницы на которых могут в принципе отсутствовать сайдбар или асайд или оба сразу. Например поиск. Так вот там недостаточно просто удалить панели из кода (у .page есть паддинги под этими панелями). Нужно добавлять соответствующие модификаторы (которые эти паддинги сбросят):
.page_no-sidebar
.page_no-aside



Адаптивный асайд

Еще один замес с панелью aside. Она у нас никак не вмещается в планшеты и там мы ее просто убиваем. Точнее даже так - изначально панель asid`а скрыта, но на ширине 1340+, когда на странице места для нее достаточно, она показывается. Почти везде, где у нас есть эта панель в ней какой-нибудь несущественный контент, типа "тренды сейчас" и его можно безболезнено скрывать.

Но есть проблемы с контактами. На странице профиля магазина в asid`е важная информация: http://prntscr.com/bjiaj4 и просто так версткой ее удалять нельзя. Этот случай рассматриваем индивидуально. Мы идем внутрь этой панели и ищем непосредственно блок .aside: http://prntscr.com/bjib5w. На этот блок никакой динамики, скроллбаров, ничего не завязано. Это просто статичная, разметочная обертка. Берем этот блок и копипастом помещаем его внутрь тела: http://prntscr.com/bjihaj. Добавляем модификатор .aside_tablet. Получается, что у нас в коде может быть два asid`а: один в панели для aside`ов, другой в теле страницы. Дальше я медиа-запросами скрываю / показываю нужный на нужной ширине.



Маленькие экраны

Все это хорошо работает только на больших экранах. Маленьким экранам, например телефонам, нужны горизонтальные скроллбары и тут фиксированное позиционирование все портит. В этом же его суть - не даваться скроллбарам. Еще одна проблема с ним - оно не очень хорошо работает на старых мобильниках (скачет при прокрутке). Решаю все это отменой фиксированного позиционирования, если экран недостаточно большой. Сайт становится просто статичным полотном и все скроллируется одновременно. Это не самый важный кейс, так как у нас есть мобильная версия, но на случай, когда пользователь все же как-то зашел на полную версию с мобилки (или просто сильно сузил экран) этот вариант лучше чем ничего.

Другими словами вся эта фигота с фиксирвоанным позиционированием начинается с какой-то конкретной высоты (от ширины тоже зависит, но там никаких проблем). Сейчас в верстке это 510px. Соответствено там, где мы не используем скроллбар в панелях обязательно должен умещаться контент в эти 510px высоты.



TO DO

Перетереть вот этот отступ: http://prntscr.com/cbasko

Nulla urna leo, pretium sed gravida id, maximus sit amet leo. Nulla nec cursus neque. Donec ex lectus, interdum vestibulum nibh at, pellentesque commodo erat. Pellentesque eu mattis nisi. Maecenas elit ex, ullamcorper a dolor id, vestibulum auctor magna. Fusce iaculis elit vitae convallis scelerisque. Ut euismod iaculis nunc, nec lobortis sem. Sed ac tristique tellus. Nam sit amet ex ex. Fusce sapien massa, elementum non placerat ut, pharetra at erat. Donec pharetra lacus non maximus tincidunt. Nulla mattis elementum urna, quis vehicula nibh aliquam id. Donec porttitor, eros lobortis tincidunt maximus, libero sem finibus leo, id pharetra justo ex sit amet sapien. Suspendisse nunc erat, condimentum at dictum in, suscipit eget leo. Sed eget fringilla dolor. In est ex, pellentesque nec nulla in, faucibus sollicitudin felis. Nunc vehicula ultrices nisi, ut egestas erat fermentum non. Vestibulum placerat viverra metus at molestie. In ac fringilla arcu.