Особенности дизайна сайта для мобильных устройств

Речь пойдет о мобильных устройствах, которые на данное время занимают большой % на рынке WAP’a (телефоны без ОС, Symbian и прочие), об Android и iPhone сегодня говорить не будем



Давайте посмотрим на модели телефонов и разрешения экранов посетителей одного крупного WAP-портала. Как видно среди браузеров лидирует с большим отрывом Opera Mini (ей надо посвящать целую тему, сейчас рассматривать не будем), а дальше обычные мобильные телефоны с или без ОС. Android и iPhone там нет из-за очень низкого %

Посмотрим на экраны. Хватает первых двух позиций: 240х320, 128х160. Что это нам говорит?
  • логотип должен быть до 120 пикселей шириной
  • padding и margin должны использоваться в пределах разумного (40 пикселей с левого края, это что-то)
  • не большое количество графики (телефон с расширением экрана 128х160 думаете потянет тяжелую страницу?)

Так выглядит шапка сайта:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//WAPFORUM//DTD XHTML Mobile 1.0//EN" "http://www.wapforum.org/DTD/xhtml-mobile10.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ru">
<head><title>Domain.com</title>
<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8"/>
<link rel="stylesheet" href="style.css" type="text/css" />
<link rel="shortcut icon" href="favicon.ico" />
</head>

Третью снизу строчку иногда не пишут, а копируют на страницу весь css в тег <style> Почему? Узнал у владельца одного крупного портала, что старенькие Nokia не умеют обращаться с css, как отдельным файлом (но % таких очень мал).

Вторая снизу, как вы поняли, отвечает за иконку сайта. Делается обычная PNG-иконка 16х16 пикселей и переименовывается в favicon.ico

Вы заметили в шапке слово XHTML? Это значит что надо строго следовать правилам разметки этого языка, иначе последствия будут печальными.

Вся информация, что выводится на экран в теге <body>, должна содержаться внутри <div>, иначе получим ошибку валидатора (рекомендую именно этот), конечно. Стоит помнить что лучше не использовать <div id="">, валидатор опять будет ругаться. Следует id заменить на class. Классов может быть несколько, что очень удобно для больших проектов. Почему я заговорил о валидаторе? Если на сайте есть ошибки, то будьте готовы что некий % мобильных телефонов не смогут попасть на сайт

Пример ошибок:
  • не закрыт <br />, <hr />, <input /> и т.д.
  • тег <img> пишется именно так <img src="" alt="" />
  • вся информация, что выводится внутри тега <form>, обязательно должна быть помещена в тег <div>, даже если сам < form> уже находится внутри дива.
    <form action="" method="post"> <div></div> </form>
Остальные вам покажет валидатор

Сейчас модно делать сайт «полоской» (200-700px в среднем), можно, но с телефона на экране 128х160 вы этого не увидите. Это делается для красоты, которую оценит только компьютер, но все же давайте посмотрим как правильно делать (встречаются сайты, где дизайн идет полоской и выравнивается по левому краю — убого смотрится):

body { margin: 0 auto; max-width: 600px; }

Но лучше придерживаться классического стиля, ведь сайт-то для мобильных устройств, а не компьютеров

Старайтесь не трогать свойства input в css, а если надо — делайте с умом (с параметром type=text, например, а то делают красивое поле ввода, а чекбоксы, радиобаттоны смотрятся ужасно)

О сочетании цветов. Большинство крупных проектов стараются делать дизайн в 2-3 цветах. Много цветов никогда не портят дизайн, если их хорошо скомбинировать. Надо помнить, что на экране мобильного телефона дизайн выглядит не как на компьютере. Иногда очень красиво выглядят дивы, которые плавно меняют цвет (картинка 15-30px высотой), но ключевое слово, как вы уже поняли, «плавно». Очень много браузеров сами “сжимают” картинки (даже фоновые). Представьте как выглядит картинка высотой 20 пикселей с градиентом от #aaa до #222 в таких браузерах. Я вам подскажу – будет несколько линий высотой по пару пикселей. Это очень портит впечатление о дизайне сайта.

В продолжении о цветах и фонах. Очень много «умельцев» делают так:

background: url(img.gif) repeat-x top left #ccc;

Сама картинка – это градиент от #ccc до #bbb. Высота дива — 12 пикселей (например, див со ссылками «вход, регистрация, забыли пароль?»), но так он выглядит на компьютере. Какое расширение экрана занимает второе место?



Возможно это очевидно, но очень часто такое встречается.

В следующем топике буду рассматривать реальные дизайны и анализировать их, ведь на практике (примерах) материал намного лучше воспринимается :)

UPD: На счет того, что css вставляют в саму страничку мне написал в ICQ один человек: «CSS внутри страницы вставляют для того, чтобы как можно меньше было новых соединений. Потому что на создание соединения тратится больше времени, чем на отрисовку страницы.»
+36
20 ноября 2010, 12:27
113
vermilion1 56,6

комментарии (51)

0
kabachok #
еще на некоторых мобилках получалась такая ситуация, что если css отдельно, то сначала загружалась страничка без форматирования и через несколько секунд она уже форматировалась исходя из подгруженного css. Особенно это напрягало в чатах и т.п.
Если css прописан в хедере, то таких неприятностей не происходило.
0
isafdar #
Выравнивать по центру и давать максимальную ширину для body я считаю дурным тоном, во-первых из-за того, что на мобильную версию пользователь с ПК попадать не должен, а во-вторых, представьте как будет такое выглядеть такой сайт на четвертом айфоне при повороте с портретной в альбомную ориентацию.
0
vermilion1 #
О выравнивании по центру я ничего не говорил, имелось ввиду выравнивание по умолчанию (по левому краю)
На счет iPhone написал в самом начале
+1
Staind #
Отличный пост. Спасибо.

Буду ждать продолжения…

Вопрос тут возник про использование параметра target со значением "_blank". Нужно/не нужно? или это прошлый век?
+1
vermilion1 #
Можно использовать, но валидатор будет ругаться. Не каждый браузер работает с несколькими окнами, поэтому, если такой функции нет — страница откроется в том же окне. Но стоит помнить что это ошибка и браузер может отказаться открывать такую страницу (старые версии мобильных браузеров)
+1
fStrange #
«CSS внутри страницы вставляют для того, чтобы как можно меньше было новых соединений. Потому что на создание соединения тратится больше времени, чем на отрисовку страницы.»
эта причина в общем то вялая
при нормальных настройках кеширования, задержка с отрисовкой произойдет только 1 раз, далее css берется из кеша

со старыми Нокиями действительно факт, та же ерунда была с несколькими моделями Сименсов

и есть еще один аспект, который в статье не упомянут
CSS2 может поддерживаться не полностью.
Сталкивался с ситуацией когда не работает наследование .style1 a
для
<div class="style1"><a href="?">ccылка</a>

а вот применение стиля напрямую созданием отдельного класса работает всегда или прописывание через style
<div><a href="?" class="style2">ccылка</a>

поэтому лучше избегать «сложных» правил
0
fStrange #
хм… парсер сожрал закрывающий див
0
vermilion1 #
На счет цитаты: я придерживаюсь своего мнения, но версия, которую мне кинули в аську, тоже имеет право на жизнь
На счет наследования вы правы, бывает такое, что оно не работает (но очень редко)
0
fStrange #
поглядел на ваш сайт и вспомнил про еще одно
.auth input.exit:hover {background: #ffd9d9;
	border: 1px solid #e1abab;
	color: #a76666;
}


инпуты, чекбоксы и прочие элементы форм, на старых телефонах очень плохо поддаются стилизации, поскольку нередко отрисовываются не средствами броузера а, средствами ОС

к такому примеру у меня сразу 3 нотиса
1. наследование
2. бордер у инпута
3. использование псевдокласса
0
vermilion1 #
Даже не знаю что сказать :)
Сайт делался для компьютеров в первую очередь (маленький магазинчик с оплатой через WM Merchant). Т.е. целевая аудитория — вап-мастера, которые обычно пользуются компьютером. Именно по-этому я не особо переживал как будет выглядеть дизайн на телефоне 2000 года покупки.
+1
fStrange #
я понимаю, это было возражение не по существу, просто вспомнилось

после волейбола набросаю чек лист верстальщика для мобильного, если повспоминаю еще по сабжу
0
lorien #
Подскажите, как можно под linux протестировать то, как сайт будет отображаться на мобильных устройствах с разрешением 128x160?
0
fStrange #
есть куча эмуляторов
ищите под конкретный телефон

а вообще не так много телефонов с таким разрешением осталось
0
lorien #
Я поискал, прежде чем спрашивать, описываются какие-то извращения с wine т.к. эмуляторы телефонов рассчитаны на винду, хоть и на Java.
0
fStrange #
хм
тогда я пас

поищите конкретно на сайте Нокии, к сожалению ссылку не нашел но у нее были эмуляторы под разные ОС для разработчиков
0
Disturbed #
именно, что были. Сейчас эти эмуляторы уже очень трудно найти (:
0
Disturbed #
Уменьшить окно браузер до такой ширины :)
А в действительности — только на телефоне. Ибо даже эмуляторы (а их можно далеко не всегда найти) не рендерят страницу так же, как реальный девайс.
0
kmeaw #
Поменять настройки window manager, чтобы он фиксировал геометрию окна браузера.
0
lorien #
Боюсь, это как рассуждать о сексе, смотря порнофильмы. Предположения могут оказаться правильными, а могут и нет :)
0
Disturbed #
логотип должен быть до 120 пикселей шириной

а использовать разные логотипы под разные разрешения не судьба? :)
Когда на мобильную версию зайдет кто-нибудь с Nokia 5800 (например), то этот логотип будет выглядеть убого. Что уж говорить про 480px экраны.
0
Rihtor #
А есть ли смысл делать сайты под такие старые телефоны/браузеры? Их владельцы не заходят часто в интернет. А те кто постоянно в сети выбирают соответствующие телефоны.
0
Disturbed #
6300 — не старый телефон
0
fStrange #
посмотрите на статистику в посте

все зависит от аудитории сайта
сайты на которых допустим рингтоны и темы для мобил вынуждены считать и с такими
0
Rihtor #
Согласен, видимо я несколько поторопился с выводами.
+2
t_rex #
Думаю вы уже поняли, как это будет отображаться.

ИМХО, лучше от подобных фраз избавляться. Далеко не все читатели Хабра профессионалы в телепатии. Если какие-то вещи Вам кажутся очевидными, то для многих это не так. Пишите пояснения plz, это пойдет только на пользу.
+1
vermilion1 #
Спасибо, исправлю когда карма позволит.

Результат будет такой:
0
isafdar #
КО подсказывает, что в таком случае лучше делать либо фон по цвету нижней границы градиента, либо увеличивать в высоту сам градиент.
0
L3n1n #
Старайтесь не трогать свойства input в css, а если надо — делайте с умом (с параметром type=text, например, а то делают красивое поле ввода, а чекбоксы, радиобаттоны смотрятся ужасно)

Почему же? Тестировал со стареньких трубок. И чекбоксы и радиобаттоны и поля ввода смотрятся отлично.
0
L3n1n #
Напишите лучше про мини оперу (
0
b0n3Z #
>Вы заметили в шапке слово XHTML? Это значит что надо строго следовать правилам разметки этого языка, иначе последствия будут печальными.

Невалидные сайты неправильно отображаются? Да это же мечта верстальщика! Если бы только еще не было остальных правил нестандартных а-ля «все должно быть в div».
Будем надеяться, что и в десктопных браузерах до этого когда-нибудь дойдут.
+1
vermilion1 #
Когда был стандарт WML, любая ошибка (даже не закрытый тег
) не позволяла отображать страницу. XHTML все отображает, но ругается валидатор не зря. Есть версии браузеров, которые отреагируют на эту ошибку и страница не откроется.
Я веду к тому, что от этого уже уходят, но еще не ушли и надо это помнить
0
Serator #
xhtml, переданный как «text/html» — не xhtml. Вы передайте его как положено, то бишь как «application/xhtml+xml» и увидите «желтый экран смерти» в Firefox (не знаю, как в других браузерах это обзывается) при незакрытом теге, теге с заглавными буквами и т.п. Большинство нынешних сайтов косят под xhtml, но им не являются, ибо «application/xhtml+xml» ie только с 9-ой версии понимать обучится. Так что выше утверждение скорее ложно, нежели истинно.
0
vermilion1 #
Вы правы. Я почему-то упустил одну строчку. Спасибо, исправил
0
mgyk #
CSS внутри страницы пишут для того, что на части телефонов при указание CSS отдельным фаилом происходит сначала загрузка данных страницы, потом телефон тянет css и еще раз перерисовывает страницу. То есть пользователь в течении пары секунд видит страницу без CSS
+1
homme #
очень сложно в написании статей такого рода избегать слов «дебилизм» или «какашка»?
0
vermilion1 #
Это первая статья, еще не понял как правильно писать надо (что бы никого не обидеть и все были довольны). Но с этой статьи уже извлек урок.
Спасибо за замечание
0
vermilion1 #
Исправил
+2
Enchanter #
О, напишу-ка я несколько веселых моментов с телефонами. Правда они более или менее археологичны, новые телефоны с приличными браузерами уже идут.
  1. Моторолы не дружат с жирным шрифтом. Совсем старые моторолки просто закрывали браузер если встречали болд (как тегами, так и css).
  2. Одна из моделей нокий не понимала если цвет шрифта задавался как белый или как черный. Настройки для цвета брались из самого браузера, поэтому возникала ситуация что не темном фоне был черный шрифт. Лечится это указанием цвета как #FEFEFE, например.
  3. Возникают проблемы если у фоновой картинки задавать положение bottom, некоторые телефоны их радостно игнорируют.
  4. Опять же в нокиях странно работает наследование стилей. Работают более или менее стабильно простые правила, например, .div a {}, a {}, или прописывание у элемента конкретного класса. Либо css правила с указанием полного пути, на какое-то наследование более сложное надеяться не стоит
  5. Обтекание картинок с любой из сторон с помощью float, работает далеко не везде. Гораздо стабильнее работает align, хоть он и не валиден.
  6. Хитрость вроде <br style=«clear:both» /> плохо работает, <div style=«clear:both»> </div> работает гораздо лучше.
  7. Штуки вроде   не воспринимаются многим, испльзовать стоит   т.е. цифровые коды или как там их правильно называть

И да про css отдельным файлом правдивы обе версии, некоторые нокии действительно не умеют грузить css отдельным файлом и при не очень хорошей связи css отдельным файлом будет грузиться 3-5 секунд ибо запросы долго идут.
0
Enchanter #
Парсер все-таки съел символы, в седьмом пункте говорилось о nbsp и #160.
0
Stepanow #
Очевидно, Вы имели в виду html-сущности (html-entities)
0
iSlayter #
Особенно круто смотрится в опере мини сайт «пипец» (люблю читать в дороге).
Я даже не представляю КАК надо верстать, чтобы такая бага появлалась!
Суть баги, кстати, в том, что «пипцы» совершенно случайным образом выравниваются по правому краю колонки и занимают в ширину не больше 50 пикселей, т.е. их не прочтёшь. Вообще впервые такое вижу.
0
akalend #
полезная статья
и главное во время: скоро буду делать мобильный портал
0
TreyLav #
Извините, меня одного раздражает замена слова «процент» на символ "%"? Лично я, наткнувшись на символическое обозначение в тексте, начинаю искать рядом с ним число.
0
deseven #
> телефоны без ОС
oO
0
vermilion1 #
История мобильного телефона не началась с iPhone. Историю надо знать :)
0
deseven #
Хорошо, приведите мне пожалуйста в пример какой-нибудь телефон, у которого есть браузер и нет ОС ;)
0
vermilion1 #

Кликабельно
0
deseven #
Не идите на поводу у маркетологов. У современных телефонов не может не быть ОС. Пусть она закрыта по максимуму и сделать с ней ничего нельзя, но она есть. Иначе как работать с железом, как обеспечивать пусть даже примитивную, но многозадачность, на чем вообще запускать приложения (тот же браузер) и пользовательское окружение?
0
vermilion1 #
Вы правы, я пропустил одну очень важную строчку (исправил)
+1
cbx #
Спасибо! Статья намного более приближена к реальности (чем например вот эта: habrahabr.ru/blogs/mobiledev/107764/) и видно что за ней стоит опыт разработки под реально существующие телефоны и браузеры. Ну и основные грабли хорошо описаны, не только в статье но и в комментариях.

Было бы интересно почитать про специфику Opera Mini.
0
vermilion1 #
Спасибо, Оперу рассмотрю тоже, но с ней сложнее т.к. неясно какой алгоритм на стороне сервера оперы (я о версиях до 4.x)

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.