- Реализация одного из вариантов мобильной версии сайта
- Адаптивный и мобильный дизайн с CSS3 Media Queries
- Для начала посмотрим это в действии.
- Другие примеры
- Обзор
- HTML
- HTML5.js
- CSS
- Сбрасываем HTML5 элементы в block
- Описываем основную структуру в CSS
- Шаг 1
- CSS3 Media Queries
- Подключаем Media Queries Javascript
- Подключаем CSS media queries
- Размер экрана меньше 980px (резиновый макет)
- Размер экрана меньше 650px (одноколоночный макет)
- Размер экрана меньше 480px
- Эластичные изображения
- Эластичные встраиваемые видео
- Initial Scale Meta Tag (iPhone)
- Финальное Демо
Реализация одного из вариантов мобильной версии сайта
Оговорюсь сразу, пишу для таких же непрофессионалов в сфере веб-разработки, как и я. По основному роду деятельности я фотограф. Надеюсь, кому-то поможет в аналогичной ситуации.
В определенный момент времени (откровенно говоря, очень поздний, надо было гораздо раньше сделать) озаботился я созданием мобильной версии своего сайта. Проанализировав основные способы реализации этой задачи (почитав это и это), пришел к выводу, что в моем случае (сайт фотографа) проще всего будет создать сильно урезанную отдельную версию на поддомене. Сильно вникать в подробности не буду, постараюсь осветить те моменты, на реализацию которых потратил больше всего времени.
- Правильный редирект мобильных и десктопных устройств на соответствующие версии сайта
- Возможность просмотра полной версии с мобильных устройств
- Так как на урезанной версии сайта некоторые страницы из полной отсутствуют, то надо обрабатывать эти случаи, не теряя посетителей
- Удобство мобильной версии сайта для пользователей
- Избегание всевозможных сеошных проблем — появления дублей и т.д.
Первую задачу с редиректом решаем следующим образом:
В htaccess полной версии добавляем код:
RewriteEngine on RewriteCond % ((.*iPhone.*)|(.*iPod.*)|(.*BlackBerry.*)|(.*Android.*Mobile.*)|(.*Windows\ CE.*)|(.*IEMobile.*)|(.*Opera\ Mini.*)|(.*Opera\ Mobi.*)) RewriteCond % !\.(jpg|gif|png|css|js|txt|ico|pdf|bmp|tif|mp3|wav|wma|asf|mp4|flv|mpg|avi|csv|doc|docx|xls|xlsx|ppt|pptx|zip|rar|tar|gz|dmg|iso)$ [NC] RewriteCond % !^http://yourdomain\.ru(/)? RewriteCond % !no_redirect=true [NC] RewriteRule ^(.*)$ http://m.yourdomain.ru/$1 [L,R=302]
В htaccess мобильной версии пишем следующее:
RewriteEngine on RewriteCond % !Windows\ NT.+Touch [NC] RewriteCond % Windows\ NT\ 6|Macintosh|Ubuntu|Linux\ (x86_64|i686)|CrOS [NC] RewriteCond % !no_redirect=true [NC] RewriteCond % !^http://m\.yourdomain\.ru(/)? RewriteRule ^(.*)$ http://yourdomain.ru/$1 [L,R=302]
Десктопные пользователи, пришедшие на мобильную версию (вообще говоря они туда никак не должны попадать, но на всякий случай) редиректятся на полную версию, мобильные пользователи с полной версии — на мобильную.
При это используются следующие исключения:
— при наличии в УРЛе параметра no_redirect=true (неважно у какого пользователя и на какой версии) — редирект не происходит;
— если реферером пользователя является та версия сайта, на которой он находится сейчас — редирект не происходит;
— если мобильный пользователь делает запрос к конкретному файлу на полной версии сайта — редирект не происходит.
Причина для последнего исключения очевидна, а вот первые два относятся уже ко второму пункту нашей повестки дня — возможности просматривать полную версию сайта с мобильных устройств.
Итак, предположим мобильному пользователю нужна полная версия сайта.
Что делает адекватный пользователь? В настройках браузера тыкает галку «Полная версия» и счастлив. Но. Во-первых, не все пользователи столь адекватны, а во вторых — вероятно, не во всех мобильных браузерах есть такая галочка.
Поэтому нужна ссылка. Окей, ссылку запилили. Но если мобильный пользователь по ней перейдет, его тут же снова отправит на мобильную версию сайта. Для этого мы сделали исключение для параметра no_redirect=true, и добавим его в ссылку на полную версию. Отлично, мобильный пользователь перешел на полную версию. Но если он попытается перейти на любую другую страницу сайта, его снова кинет на мобильную версию, ведь параметр no_redirect=true из урла исчезнет. Для этого нам нужно второе исключение в htaccess — если пользователь перешел по ссылке на полной версии, то на мобильную его кидать не надо (и наоборот). Данный способ я придумал сам, поэтому несколько сомневаюсь в его надежности, но сколько ни тестировал — все работает как надо.
Третий пункт. Ошибки 404 на мобильной версии.
На полной версии сайта у меня примерно 70+ страниц. Но для мобильной я сделал только самые необходимые (около 8-10). Соответственно, мобильные пользователи, придя с поисковика, часто натыкались на 404. Сперва я просто разместил там информацию, что мол, нужная страничка в полной версии, но % отказов все равно был очень высок. Поэтому я сделал ход конем: если на мобильном сайте получаем 404-ю ошибку, то редиректим пользователя на полную версию с тем же урлом, добавив незабвенный no_redirect=true. Как это сделано:
В htaccess мобильной версии:
Четвертая задача: удобство для мобильных пользователей
В принципе, там все рекомендации расписаны, подчеркну только главное — в header мобильной версии добавляем
И следим за правильным расположением и масштабированием контента.
Чтобы при горизонтальном просмотре сайт сильно не растягивался в ширину.
И, наконец, сеошные проблемы
В случае, если у вас каждой странице полной версии соответствует страница в мобильной, есть метки типа canonical.
Но я не стал заморачивался, и тупо запретил индексацию мобильной версии совсем.
Есть такое замечательное руководство гугла по сео-оптимизации для мобильных устройств
Основной интересующий нас момент:
В URL, который размещен на странице мобильного сайта и указывает на аналог этой страницы для обычных компьютеров, обязательно нужно добавить тег rel=«canonical».
Помимо этого указываем мобильность сайта в файле sitemap:
http://m.photocrew.ru/ 2015-05-26T18:07:54+06:00 never 1.0
Яндекс утверждает, что он сам распознает стандартные поддомены типа m.example.com, pda.example.com и т.п.
Для пущей надежности можно еще каждой мобильной страничке указать соответствующий доктайп:
Думаю, уж после такого комплекса мер, поисковики должны адекватно разобраться, где какая версия сайта.
Все вышенаписанное реализовано и работает. Возможно, есть косяки, неучтенные кейсы и т.д. — буду рад выслушать критику и советы. В личку могу отправить ссылку для тестирования.
Адаптивный и мобильный дизайн с CSS3 Media Queries
Разрешение экрана в наши дни колеблется от 320px (iPhone) до 2560px (большие мониторы) или даже выше. Пользователи больше не просматривают сайты только на настольных компьютерах. Теперь пользователи используют мобильные телефоны, небольшие ноутбуки, планшетные устройства, такие как iPad или Playbook для доступа в интернет. Поэтому, традиционный дизайн с фиксированной шириной больше не работает. Дизайн должен быть адаптивным. Структура должна автоматически изменяться с учетом всех разрешений дисплеев. Эта статья покажет вам как создавать кросс-браузерный адаптивный дизайн при помощи HTML5 и CSS3 media queries.
Для начала посмотрим это в действии.
Пред началом посмотрите на финальное демо, что бы увидеть, как хорошо это выглядит. Изменяйте размер браузера, что бы увидеть как структура автоматически изменяется основываясь на ширине окна.
Другие примеры
Если вы хотите увидеть больше примеров, посмотрите следующие темы для WordPress, которые я сделал используя media queries: iTheme2, Funki, Minblr и Wumblr.
Обзор
Контейнер страницы имеет ширину 980px для любого разрешения, больше 1024px. Для проверки ширины используются media queries, если ширина меньше чем 980px, в этом случае макет становится резиновым, вместо фиксированной ширины. Если ширина меньше 650px, то контейнеры с контентом и боковой панелью расширяются на полный экран и становятся в одну колонку.
HTML
Не будем останавливаться на подробном описании HTML. Ниже описана основная структура макета. У меня есть «pagewrap», который включает в себя «header», «content», «sidebar» и «footer».
HTML5.js
Обратите внимание, что в демо используется HTML5. Internet Explorer ниже 9-й версии не поддерживает новые элементы содержащиеся в HTML5, такие как , , , и прочие. Поэтому подключаем Javascript файл html5.js в HTML документ, который позволит IE понимать новые элементы.
CSS
Сбрасываем HTML5 элементы в block
article , aside , details , figcaption , figure , footer , header , hgroup , menu , nav , section <
display : block ;
>
Описываем основную структуру в CSS
Я снова не буду вдаваться в подробности. Основной контейнер «pagewrap» имеет ширину 980px. «Header» имеет фиксированную высоту 160px. Контейнер «content» шириной 600px и прижат влево. «Sidebar» шириной 280px и прижат вправо.
#pagewrap <
width : 980px ;
margin : 0 auto ;
>
#header <
height : 160px ;
>
#content <
width : 600px ;
float : left ;
>
#sidebar <
width : 280px ;
float : right ;
>
#footer <
clear : both ;
>
Шаг 1
На первом шаге в демо не реализованы media queries, поэтому при изменении размера окна браузера, макет будет оставаться фиксированной ширины.
CSS3 Media Queries
Теперь начинается самое интересное – media queries.
Подключаем Media Queries Javascript
Internet Explorer 8 и более ранних версий не поддерживает CSS3 media queries. Вы можете включить ее, добавив Javascript файл css3-mediaqueries.js.
Подключаем CSS media queries
Создаем новый CSS файл для media queries. Посмотрите мою прошлую статью, что бы увидеть как работают media queries.
Размер экрана меньше 980px (резиновый макет)
@media screen and (max-width: 980px) <
#pagewrap <
width : 95 % ;
>
#content <
width : 60 % ;
padding : 3 % 4 % ;
>
#sidebar <
width : 30 % ;
>
#sidebar .widget <
padding : 8 % 7 % ;
margin-bottom : 10px ;
>
>
Размер экрана меньше 650px (одноколоночный макет)
- header = сбрасываем высоту в auto;
- searchform = позиционируем — 5px сверху;
- main-nav = сбрасываем позиционирование в static;
- site-logo = сбрасываем позиционирование в static;
- site-description = сбрасываем позиционирование в static;
- content = устанавливаем ширину auto (это растянет контейнер на всю ширину)
- sidebar = устанавливаем ширину 100% и убираем float.
@media screen and (max-width: 650px) <
#header <
height : auto ;
>
#searchform <
position : absolute ;
top : 5px ;
right : 0 ;
>
#main-nav <
position : static ;
>
#site-logo <
margin : 15px 100px 5px 0 ;
position : static ;
>
#site-description <
margin : 0 0 15px ;
position : static ;
>
#content <
width : auto ;
float : none ;
margin : 20px 0 ;
>
#sidebar <
width : 100 % ;
float : none ;
margin : 0 ;
>
>
Размер экрана меньше 480px
- html = отключаем регулировку размера шрифта. По умолчанию iPhone увеличивает размер шрифта, для более комфортного чтения. Вы можете это отключить добавив -webkit-text-size-adjust: none;
- main-nav = сбрасываем размер шрифта до 90%.
@media screen and (max-width: 480px) <
html <
-webkit-text-size-adjust : none ;
>
#main-nav a <
font-size : 90 % ;
padding : 10px 8px ;
>
>
Эластичные изображения
Для того, чтобы сделать изображения эластичными, просто добавьте max-width:100% и height:auto . Изображения max-width:100% и height:auto работает в IE7, но не работает в IE8 (да, еще один странный баг). Для исправления нужно добавить width:auto\9 для IE8.
Эластичные встраиваемые видео
Для видео применяем те же правила, как для изображений. По непонятным причинам max-width:100% (для видео) не работает в Safari. Нужно использовать width: 100% .
Initial Scale Meta Tag (iPhone)
По умолчанию iPhone Safari сжимает станицы, что бы вместить в экран. Следующий мета-тег говорит iPhone Safari использовать ширину устройства как ширину окна и отключить.
Финальное Демо
Откроем финальное демо и поизменяем размер экрана, что бы увидеть media queries в действии. Не забудьте проверить в iPhone, iPad, Blackberry (последние версии) и Android телефонах, что бы увидеть мобильную версию.