Изменения в зависимости от разрешения экрана

Похоже, эта тема становится любимой. :)) Хотя тема действительно актуальная, очень часто web дизайнеру приходиться придумывать "универсальные" странички под все возможные разрешения экранов. Как решать эту проблему- личное дело каждого. Можно использовать таблицы, можно все просто сделать одного фиксированного размера, можно использовать скрипты. У использования JavaScript есть только два серьезных минуса, на мой взгляд, первый- отключенная поддержка в броузере посетителя, второй- недостаток знаний и опыта у web дизайнера. Очень часто встречается и то, и это. :))) Гениев нет, так сказать...

Изменение фонового рисунка в зависимости от разрешения экрана.
Тема, конечно, интересная. Но фоновый рисунок под максимальное разрешение может оказаться уж очень огромного размера, стоит поискать другой выход, если возможно. Но в некоторых случаях у web дизайнера просто не остается другого выхода. Привожу два варианта скрипта, сам не пробовал, но, на первый взгляд, должно все работать.

Вариант второй

Изменение параметров фреймовой структуры в зависимости от разрешения экрана.
Фреймовые структуры не всегда "выживают" при изменении размеров экрана, данный скрипт изменяет размеры фреймов и вполне может пригодиться... По идее, ничего особо и не изменилось по сравнению с предыдущими JavaScript-ами.

Всем этим можно воспользоваться, но лучше попробовать обойтись простыми таблицами и компоновкой графики. Не всегда имеет смысл "наворачивать" все возможные эффекты и удобства... Самая универсальная страничка- просто таблицы, графические файлы в GIF или JPG, без скриптов, эффектов и прочего. Возможно, возникнет некоторое неудобство при просмотре на совсем маленьком или, наоборот, большом экране, но все броузеры поддерживающие графику отобразят все в приемлемом виде и без потери информации. А web дизайнеру и тут работы много будет, одна графика чего стоит...

Некоторое время думал, к чему это все отнести... По идее, CSS чистой воды, я думаю. :)) Веб-дизайн штука такая, все перемешанно.

Про такой способ изменения стилей я упоминал уже много раз, пора и "выложить" описание в сеть, может, кому и сгодится. :)) Перспективы, сами по себе, радужные, только почему никто из веб-дизайнеров подобное не применяет? Всем таблицам, почти всем тэгам можно задать описание стилей во внешнем файле CSS, при разном разрешении экрана картина будет разная — экран меняет размер, таблицы остаются те-же. Классика веб-дизайна — "резиновые таблицы". Тоже выход, ну а если задумка не позволяет? Заменяя таблицы стилей целиком мы можем полностью менять внешний вид страницы — при большом разрешении экрана "раздвигать" таблицы, увеличивать размер шрифтов, изменять даже цвета — все, что с точки зрения веб-дизайнера имеет смысл изменить. Конечно, менять размеры картинок таким способом не обязательно, но можно попробовать пропорционально уменьшать их размер при меньших разрешениях экрана. Сам не пробовал применять такой финт на практике, но попробовать стоит. Сам код привожу ниже.



var height=0;var width=0;
if (self.screen) {
// for NN4 and IE4
width = screen.width
height = screen.height
}

if (width1023 && height>767)
{
document.writeln("")
}

else
{
document.writeln("")
}
}

Вот и все что нужно. Почти. :))) В зависимости от разрешения экрана выводится одна из трех строк с вызовом описания стилей. Стили, понятное дело, личное дело каждого.

Надо сразу предупредить вас, я не специалист по JavaScript, так что, если есть возможность как-то улучшить эту конструкцию — пишите. Кроме того, возник один вопрос, который я пока не смог решить — все прекрасно работает в Эксплорерах и Нетскейпах выше 4.05 серии. Нетскейп серии 4.05 просто не реагирует на скрипт. У меня стоит NN4.05проф, обычно при ошибках он выводит предупреждение, в данном случае он просто не читает стили. С чем это связанно, не знаю. Если на это описание "напорется" программист, большая просьба — посмотреть и посоветовать(если не лень будет письмо писать:), что можно сделать. В идеале, подобный скрипт должен предусматривать нечто для броузеров с отключенной поддержкой JavaScript, может и еще что потребуется подключить. Пока есть только это.

В веб-дизайне сам пока ничего подобного не использовал, хоть и есть задумки. Надо поискать статистику использования разных типов броузеров в сети — стоит-ли овчинка выделки. Понятно, что броузер веб-дизайнера или просто "постоянного жителя" сети настроен по максимуму — и поддержки все включенны, и плагинов куча. А вот какова общая картина — сколько с отключенными JavaScript, сколько Нетскейпов разных серий...

Практически применить можно эту схему так: веб-дизайнер делает простую страничку с одной таблицей в 600пикс и текстом в ней, задает все параметры таблицы и шрифта для популярного разрешения 800х600 во внешнем файле. После чего, тот-же веб-дизайнер:)) (надеюсь, что тот-же) описывает стили для других разрешений: для меньшего — уменьшает ширину таблицы и размер шрифта, для большего — увеличивает ширину таблицы и увеличивает размер шрифта. Про динамический веб-дизайн с применением подобного устройства я уже упоминал, если точнее, веб-дизайн не динамический, а основанный на слоях — вся страница собирается из блоков-слоев. Вот тут-то и может возникнуть необходимость применения подобного метода — можно и размеры блоков менять, и расположение их.

Дополнение — как установленно опытным путем, Нетскейпы4.05 очень странно понимают стили, вынесенные во внешний файл. Именно по этому мы и имели подобный глюк. Как догадываетесь, подобными "машинками" и так мало кто пользовался... Надо их просто игнорировать...

Наверянка многие сталкивались с ситуацией, когда при разных разрешениях экрана хочется показывать разные блоки и/или в разных местах.

Например, при разрешении 1024*768 справа от контента места нет, нужен горизонтальный блок под контентом. Если экран шире, справа появляется место для вертикального блока.

Как правильно выйти из ситуациии?

Попробовал решить эту проблему в javascript, путем скрывания/показывания div-вов с рекламными блоками в зависимости от разрешения. Но результат самому не очень нравится, возможно сделал не совсем правильно - скприпт на onload-е и все эти телодвижения заметны юзеру.

","contentType":"text/html"},"proposedBody":{"source":"

Наверянка многие сталкивались с ситуацией, когда при разных разрешениях экрана хочется показывать разные блоки и/или в разных местах.

Например, при разрешении 1024*768 справа от контента места нет, нужен горизонтальный блок под контентом. Если экран шире, справа появляется место для вертикального блока.

Как правильно выйти из ситуациии?

Попробовал решить эту проблему в javascript, путем скрывания/показывания div-вов с рекламными блоками в зависимости от разрешения. Но результат самому не очень нравится, возможно сделал не совсем правильно - скприпт на onload-е и все эти телодвижения заметны юзеру.

Наверянка многие сталкивались с ситуацией, когда при разных разрешениях экрана хочется показывать разные блоки и/или в разных местах.

Например, при разрешении 1024*768 справа от контента места нет, нужен горизонтальный блок под контентом. Если экран шире, справа появляется место для вертикального блока.

Как правильно выйти из ситуациии?

Попробовал решить эту проблему в javascript, путем скрывания/показывания div-вов с рекламными блоками в зависимости от разрешения. Но результат самому не очень нравится, возможно сделал не совсем правильно - скприпт на onload-е и все эти телодвижения заметны юзеру.

","contentType":"text/html"},"authorId":"199128352","slug":"14869","canEdit":false,"canComment":false,"isBanned":false,"canPublish":false,"viewType":"old","isDraft":false,"isOnModeration":false,"isSubscriber":false,"commentsCount":11,"modificationDate":"Thu Jan 01 1970 03:00:00 GMT+0000 (UTC)","showPreview":true,"approvedPreview":{"source":"

Наверянка многие сталкивались с ситуацией, когда при разных разрешениях экрана хочется показывать разные блоки и/или в разных местах.

Например, при разрешении 1024*768 справа от контента места нет, нужен горизонтальный блок под контентом. Если экран шире, справа появляется место для вертикального блока.

Как правильно выйти из ситуациии?

Попробовал решить эту проблему в javascript, путем скрывания/показывания div-вов с рекламными блоками в зависимости от разрешения. Но результат самому не очень нравится, возможно сделал не совсем правильно - скприпт на onload-е и все эти телодвижения заметны юзеру.

","html":"Наверянка многие сталкивались с ситуацией, когда при разных разрешениях экрана хочется показывать разные блоки и/или в разных местах.","contentType":"text/html"},"proposedPreview":{"source":"

Наверянка многие сталкивались с ситуацией, когда при разных разрешениях экрана хочется показывать разные блоки и/или в разных местах.

Например, при разрешении 1024*768 справа от контента места нет, нужен горизонтальный блок под контентом. Если экран шире, справа появляется место для вертикального блока.

Как правильно выйти из ситуациии?

Попробовал решить эту проблему в javascript, путем скрывания/показывания div-вов с рекламными блоками в зависимости от разрешения. Но результат самому не очень нравится, возможно сделал не совсем правильно - скприпт на onload-е и все эти телодвижения заметны юзеру.

","html":"Наверянка многие сталкивались с ситуацией, когда при разных разрешениях экрана хочется показывать разные блоки и/или в разных местах.","contentType":"text/html"},"titleImage":null,"tags":,"isModerator":false,"commentsEnabled":true,"url":"/blog/partner/14869","urlTemplate":"/blog/partner/%slug%","fullBlogUrl":"https://yandex.ru/blog/partner","addCommentUrl":"/blog/createComment/partner/14869","updateCommentUrl":"/blog/updateComment/partner/14869","addCommentWithCaptcha":"/blog/createWithCaptcha/partner/14869","changeCaptchaUrl":"/blog/api/captcha/new","putImageUrl":"/blog/image/put","urlBlog":"/blog/partner","urlEditPost":"/blog/56a92d54d97351872e7312fc/edit","urlSlug":"/blog/post/generateSlug","urlPublishPost":"/blog/56a92d54d97351872e7312fc/publish","urlUnpublishPost":"/blog/56a92d54d97351872e7312fc/unpublish","urlRemovePost":"/blog/56a92d54d97351872e7312fc/removePost","urlDraft":"/blog/partner/14869/draft","urlDraftTemplate":"/blog/partner/%slug%/draft","urlRemoveDraft":"/blog/56a92d54d97351872e7312fc/removeDraft","urlTagSuggest":"/blog/api/suggest/partner","urlAfterDelete":"/blog/partner","isAuthor":false,"subscribeUrl":"/blog/api/subscribe/56a92d54d97351872e7312fc","unsubscribeUrl":"/blog/api/unsubscribe/56a92d54d97351872e7312fc","urlEditPostPage":"/blog/partner/56a92d54d97351872e7312fc/edit","urlForTranslate":"/blog/post/translate","urlRelateIssue":"/blog/post/updateIssue","urlUpdateTranslate":"/blog/post/updateTranslate","urlLoadTranslate":"/blog/post/loadTranslate","urlTranslationStatus":"/blog/partner/14869/translationInfo","urlRelatedArticles":"/blog/api/relatedArticles/partner/14869","author":{"id":"199128352","uid":{"value":"199128352","lite":false,"hosted":false},"aliases":{},"login":"etonetot","display_name":{"name":"etonetot","avatar":{"default":"0/0-0","empty":true}},"address":"[email protected]","defaultAvatar":"0/0-0","imageSrc":"https://avatars.mds.yandex.net/get-yapic/0/0-0/islands-middle","isYandexStaff":false},"originalModificationDate":"1970-01-01T00:00:00.000Z","socialImage":{"orig":{"fullPath":"http://avatars.yandex.net/get-yablog/4611686018427441880/normal"}}}}}">

  • Перевод

Разрешение экрана в наши дни колеблется от 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».



Demo
Site Description



Home








blog post



class = "widget" >
widget



footer

HTML5.js Обратите внимание, что в демо используется HTML5. Internet Explorer ниже 9-й версии не поддерживает новые элементы содержащиеся в HTML5, такие как , , , и прочие. Поэтому подключаем Javascript файл html5.js в
HTML документ, который позволит IE понимать новые элементы.


CSSСбрасываем HTML5 элементы в block Следующий CSS сделает HTML5 элементы (article, aside, figure, header, footer, etc.) блочными.
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 (резиновый макет) Для размера экрана меньше 980px применим следующие правила:
  • pagewrap = ширина 95%;
  • content = ширина 60%;
  • sidebar = ширина 30%.
Совет: используйте проценты (%), чтобы сделать блоки резиновыми.
@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 (одноколоночный макет) Затем, задаем CSS правила для размера экрана меньше 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 Этот CSS будет применяться для размеря экрана меньше 480px, которая соответствует ширине iPhone в альбомной ориентации.
  • 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.
img {
max-width : 100 % ;
height : auto ;
width : auto \9 ; /* ie8 */
} Эластичные встраиваемые видео Для видео применяем те же правила, как для изображений. По непонятным причинам max-width:100% (для видео) не работает в Safari. Нужно использовать width: 100% .
.video embed ,
.video object,
.video iframe {
width : 100 % ;
height : auto ;
} Initial Scale Meta Tag (iPhone) По умолчанию iPhone Safari сжимает станицы, что бы вместить в экран. Следующий мета-тег говорит iPhone Safari использовать ширину устройства как ширину окна и отключить.
Финальное Демо Откроем финальное демо и поизменяем размер экрана, что бы увидеть media queries в действии. Не забудьте проверить в iPhone, iPad, Blackberry (последние версии) и Android телефонах, что бы увидеть мобильную версию.