Теги та атрибути для підвалу у html. Як правильно притиснути футер плаваючий до низу сторінки. Плаваюча корзина – підвищення доступності функціонала, що продає.

💖 Подобається?Поділися з друзями посиланням

Якщо взуття це підсумкова складова будь-якого вбрання, то футер для сайту e-Commerce - завершальний елемент дизайну, що його продає. Зважаючи на найнижчий елемент «підвалу», сучасні веб-сайти готові продемонструвати свою індивідуальність усіма способами. У конкурентному e-commerce середовищі досить оригінальних ідей, креативу та оформлювальних тенденцій. Перед тим як урізноманітнити футер Е-комерційного сайту, варто врахувати важливі моменти. Що розмістити насамперед і як це краще зробити? В огляді футерів, що надихають дизайнів, є цікаві варіанти.

Читайте також: 13 маркетингових трендів в електронній комерції 2019 року

Цікава статистика компанії Chartbeat. Дослідження поведінки 25 млн користувачів показало, наскільки глибоко вони переглядають сторінки. Виявляється, увага користувача звернена на простір нижче лінії згину. Отримуючи більше практично корисної інформації, відвідувачі довше затримуються в області 1200px від верху сторінки (при середніх 700px по вертикалі екрана в браузері), або за другим екраном.

Час перегляду (сек.) / Відстань від верху сторінки (пікселі)

Великий розрив за тривалістю перегляду першого та другого екранів. Найбільший ТОП - 4 сек, тривалість досягає максимуму (16 сек.) на 1200 пікселях від верху і при подальшому прокручуванні, повільно знижується.

Частка відвідувачів (%) / Відстань від верху сторінки (пікселі)

Значна частина відвідувачів (понад 25%) навіть не чекають на завантаження контенту і починають скролити сторінку. Значить, лише 75% спершу побачать найвищий верх. Найбільш популярна область сторінки, це 550px (відразу над лінією згину).

Дослідження розвіює міф про те, що користувачі не прокручують сторінку до низу і не дивляться весь контент. Футер також є важливим для сучасного eCommerce сайту, навіть має свої переваги.

Ідеї ​​як оформити «підвал» (футер), приклади дизайнів, що продають

Ці 10 порад підкажуть, як красиво оформити футер для сайту – за правилами композиції у веб-дизайні та з вирішенням пріоритетних завдань. Застосуйте найбільш підходящі тактики для покращення юзабіліті, UX (користувацького досвіду) і навіть підвищення продажів.

1. Необхідна інформація

Традиційно, у футері сайту висвітлюються необхідні організаційно-правові питання. Повідомлення оформляються менш помітним текстом, що звільняє інші області сторінок більш значимих елементів. Ось зразковий список для розгляду:

  • Відмітки про копірайт
  • Правові застереження
  • Білінгова інформація
  • Повідомлення про використання файлів cookie

Веб-сайту, що реалізує товар, потрібно задовольняти правові вимоги та надавати інформацію про порядок, строки повернення. Розташування її у футері, зручне як ресурсу, що продає, так і відвідувачам.

Приклад footer'a: Ів Роше

Інтернет магазин торгової маркиІв Роше: футер на весь екран з приємним дизайном із шарів, що чергуються. Інформує про компанію, інфраструктуру сайту, що продає – від відстеження замовлення, до політики персональних даних. Тут же поради щодо використання продукту, бонуси, акції

Приклад footer'a: Lumity

На торговців харчовими добавками покладається підвищена юр. відповідальність. Є чимало речей про які вони повинні/не повинні сказати на своєму сайті, що продає. Посилання на правову інформацію виділено жирним для кращої помітності.

Футер з красивим зображенням бекграунд дуже органічно вписується в загальний дизайн сайту. Немає чіткого кордону, скоріше роздільником служить сам контент

Приклад footer'a: Saddleback Leather Co

Продає сайт з красивим ретро дизайн шапки і футери. 100-річна гарантія на відсутність дефектів матеріалу та оздоблення. Умови повернення супроводжуються цікавими історіями… не все так сумно із необхідною e-Commerce-інформацією буває, виявляється

2. Негативний простір – достатність візуальної дистанції

Обмежуючи кількість футерних лінків не поскупитеся на негативний простір – це вплине на візуальне сприйняття і покращить читаність. Загальне правило: при дотриманні візуальної ієрархії центральні елементи помічаються швидше (можна використовувати з вигодою!).

Приклад footer'a: QUAY AUSTRALIA

З мінімалістичним стилем і фіксованим меню, що випадає, інтернет-магазин може собі дозволити просторий футер

Приклад footer'a: Incase

Про велику кількість мікро-негативного простору (між дрібними елементами) можна сказати так: поки вся необхідна інформація присутня, вона перебірлива і швидко сприймається – все нормально

Приклад footer'a: Stumptown Coffee Roasters

Просторий футер кавового сайту – чудове завершення композиції чистого дизайну, в якому багато макро-негативного простору («повітря» між розділами/секціями)

3. Завершальний заклик до дії

Читайте також: 30+ прикладів та ідей оформлення кнопок цільової дії

Стильне оформлення футера красномовно говорить про ресурс. Важливо зауважити: покупець затримується тут трохи довше, ніж у решті сторінок. Зручний випадок для ще одного, що завершує заклик до дії. Часто це передплата/розсилка, але можна зв'язати СТА-заклик і з реєстрацією облікового запису.

Приклад footer'a: Greetabl

Greetabl скромно оформлена нижня частина сторінок, включає заклик до передплати. При мінімумі елементів заклик стає помітним, а гармонуючи з бірюзовим тлом перетворюється на прикрасу сайту

Приклад footer'a: Ecwid

Приємне оформлення із закликами до дії у нижній частині сторінок. Структура конструктора сайтів, що продають, універсальна. Для мільйона своїх клієнтів він перекладений 35 мовами

4. Плаваюча корзина – підвищення доступності функціонала, що продає.

Доступ до кошика з нижньої частини сайту – відмінний спосіб покращити юзабіліті та продають якості сайту.

Приклад footer'a: Lemonadela

Сайт кейтерингової компанії, що продає, приємний на вигляд і зручний для покупця

5. Навігація у футері

Нижня частина сайту ідеально підходить для інформації, що не часто проглядається: про компанію, умови надання послуг та політику конфіденційності. І тут функція футера – всіх врятувати. Почуваючись втраченим в eCommerce середовищі, хтось починає цікавитися інфраструктурою електронного магазину, інстинктивно прокручуючи далі.

Негативний простір необхідний читабельності контенту. Взагалі, підвал не для навігаційних цілей, на відміну від меню або карти сайту. Лише в окремих випадках, сайти електронної комерції розміщують у футері окремі категорії товарів (

Здрастуйте, шановні читачі блогу сайт. Продовжуємо тему блокової верстки, яка була розпочата та продовжена у трьох попередніх статтях. В принципі, нам уже вдалося створити як дво-, так і триколонок макет сайту, і ми навіть встигли розглянути нюанси створення гумового макета.

Крім цього в перших статтях, присвячених верстці сайту (), були розглянуті деякі базові поняття веб-мастерингу, без розуміння яких було б досить важко розібратися в нюансах.

Які проблеми виникли з нашим макетом сайту

Сьогодні ми спробуємо вирішити одну невелику проблему, яка може виникнути із створеним нами раніше макетом. Найчастіше така ситуація виникає при перегляді його на великих моніторах (з високою роздільною здатністю) і відображенні сторінки з малою кількістю інформації.

У цьому випадку може вийти так, що футер не буде притиснутий до низу екрана, а буде мало не на його середині по висоті, що в більшості випадків виглядатиме некрасиво і не естетично.

Все ж таки, на мою думку, притиснути footer до самого низу макета сайту потрібно, і особливо це буде актуально у випадку, коли висота сторінки вийде менше, ніж висота екрана користувача. Схематично це можна так:

Тобто. правильна поведінка футера для випадку малої кількості інформації на сторінці та великого екрана користувача буде такою:

Щоб це реалізувати, потрібно здійснити ряд маніпуляцій з кодом нашого макета. Причому зміни ми будемо вносити не тільки до файлу стильового. CSS оформлення Style.css, але й у Index.html, що містить Html кодта формує Div блоки. Але про все по порядку.

Для прикладу ми будемо використовувати створений нами раніше триколонковий макет сайту. При цьому Index.html виглядатиме так:

Заголовок

Вміст сторінки Вміст сторінки Вміст сторінки Вміст сторінки


А у файлі Style.css були прописані такі CSS властивості:

Body, html ( margin:0px; padding:0px; ) #maket ( width:800px; margin:0 auto; ) #header( background-color:#C0C000; ) #left( background-color:#00C0C0; width:200px ; float:left; ) #right( width:200px; background-color:#FFFF00; float:right; ) #content( background-color:#8080FF; ( background-color:#FFC0FF; clear:both; )

Ну, а сам макет виглядав приблизно так:

Як бачите, футер не притиснутий до низу і, отже, не задовольняє нашим вимогам (він завжди знаходиться під нижньою колонкою), тому доведеться внести корективи в код. Все те саме можна буде зробити і для двоколонного, і для гумового макета теж. Метод універсальний.

Як притиснути футер до низу макету сайту

Отже, нам потрібно змістити Div контейнер із футером до низу екрану. Для цього спочатку потрібно задати висоту всієї сторінки, що дорівнює ста відсоткам (вона займатиме весь екран). Це потрібно буде для того, щоб змінити розмір основного блоку з макетом теж до 100%.

Весь вміст сторінки сайту поміщається в теги Body, що відкриває і закриває, і тому нам потрібно в Style.css дописати для тега Body ще одну CSS властивість, що задає висоту рівною 100%:

Body, html ( margin:0px; padding:0px; height: 100%; )

на зовнішньому виглядіце ніяк поки не відобразиться, але тепер основний блог можна буде розтягнутися на всю висоту екрану. Тобто. це був своєрідний підготовчий етап.

Основні властивості CSS, за бажання, ви можете переглянути . Тепер задамо для Div контейнера, в якому укладено весь наш макет, мінімальну висоту рівну 100%:

Ще хочу його підсвітити (div з id="maket"). Для цього задам йому рамку за допомогою відповідної якості Border ():

Властивість border: solid 3px black дозволяє задати для даного контейнера суцільну рамку (solid) завтовшки 3 пікселі чорного кольору. Це дозволить побачити, що контейнер з макетом розтягнувся на всю висоту екрана навіть при малій кількості інформації на сторінці:

Тепер нам потрібно буде винести блок футера із загального контейнера та розмістити його нижче, одразу ж після загального. Що це дасть? А те, що дозволить опуститися вниз футер в макеті, а не буде як раніше притискатися до більш довгої його колонці. У цьому випадку Index.html набуде наступного вигляду:

Заголовок

Ліва колонка Меню Меню Меню Меню
Вміст сторінки Вміст сторінки Вміст


Зверніть увагу, що блок з футером тепер не знаходиться всередині загального контейнера (maket), а отже його ширина тепер уже не регулюється CSS властивостями, заданими для maket у файлі зі стильовим оформленням Style.css. Футер буде по ширині розтягуватися на весь екран, але все-таки він вже буде розташований внизу екрана, відразу під основним блоком:

Але знову постає проблема, бо для того, щоб побачити підвал, тепер доводиться прокручувати екран у браузері (бачите на наведеному малюнку смугу прокручування).

Виходить це тому, що основний контейнер (maket) займає по висоті весь розмір екрану (це визначається властивістю min-height: 100%), а футер розташовується відразу за ним і для його перегляду вже доведеться використовувати прокручування, що не дуже зручно і функціонально .

Вирішити цю проблему можна, задаючи негативний відступ для Div контейнера з футером для того, щоб він змістився вгору, на відстань рівну його висоті. При цьому контейнер footer наїде на основний і впишеться у висоту екрана браузера (тобто не потрібно використовувати прокручування для його перегляду).

Але для того, щоб задати негативний відступ від верху, потрібно знати цю висоту footer, а ми її поки що не знаємо.

Тому спочатку задамо контейнеру, що містить підвал висоту, прописавши відповідну властивість у Style.css:

#footer( background-color:#FFC0FF; clear:both; height: 50px; )

А потім задаємо для нього негативний відступ зверху на висоту, що дорівнює його висоті:

Це дозволить підвалу піднятися вгору рівно на власну висоту і тим самим вписатися в екран браузера (тепер можна прибрати CSS властивість border: solid 3px black з правила для maket, щоб товщина рамки не заважала всьому нашому макету разом з футером поміститися в екрані по висоті):

Як бачите, тепер смуга прокручування в браузері не з'являється і весь наш триколонковий макет сайту на основі блокової верстки розміщується в одному екрані (у разі малої кількості інформації на сторінці) і має футер, розташований у самому низу. Що нам, власне, і потрібно зробити.

Вставляємо розпірку та боремося з Internet Explorer

Але виникає проблема, яка проявиться лише тоді, коли інформації на сторінці макета побільшає і може вийти така ситуація:

Виходить, що може виникнути ситуація, коли інформація в одній із колонок макета наїде на футер, що виглядатиме не гарно. Відбувається це через горезвісний негативний відступ, який ми задали для нього і який допоміг підняти наш підвал із наїздом на основний контейнер макета.

Тобто. виходить, що внизу екрану розташовані два блоки, що перекривають один одного в області підвалу.

Вирішення цієї проблеми полягає в додаванні нового порожнього Div контейнера (так званої розпірки) в основний контейнер нашого макета (maket), у те місце, де раніше розташовувався блок з футером.

Задавши для цього нового контейнера висоту, що дорівнює висоті підвалу, ми зможемо уникнути наїзду інформації з основного контейнера на блок з футером. Надамо цьому контейнеру ID () з назвою Rasporka і в результаті Index.html нашого триколонкового макета набуде вигляду:

Заголовок

Ліва колонка Меню Меню Меню Меню
Вміст сторінки Вміст сторінки Вміст сторінки сторінки сторінки сторінки сторінки сторінки


А в Style.css пропишемо для цього ( , що задає висоту цього контейнера-розпірки рівну висоті підвалу:

#rasporka ( height: 50px; )

В результаті футер притискатиметься знизу не до інформації, що міститься в основному контейнері (наприклад, текст у найвищій колонці), а на рівну підвалу по висоті область з контейнером-розпіркою, що не містить жодної інформації.

Таким чином ми уникаємо наїздів та перекосів у нашому триколоночному макеті. Все буде чітко і красиво (поважно і благородно):

Як я вже згадував вище, ширина футера тепер має задаватися окремо, т.к. цей контейнер тепер не входить до складу основного. Для цього потрібно додати до CSS файлу додаткові властивості для Footer, що дозволяють задати його ширину і вирівняти його посередині екрана по горизонталі.

Ширину має сенс встановити рівної ширині всього макета за допомогою властивості Width, а вирівнювання по горизонталі можна здійснити таким же способом, як ми це зробили для всього макета на блоковій верстці.

Таким чином, нам потрібно буде додати для ID Footer додаткові властивості:

#footer( background-color:#FFC0FF; clear:both; height: 20px; margin-top:-20px; width:800px; margin-left: auto; margin-right: auto; )

За допомогою властивості width:800px задається ширина рівна 800 пікселів, а за допомогою двох властивостей margin-left: auto і margin-right: auto задається налаштування відступу ліворуч і праворуч від підвалу автоматично, в результаті чого ці відступи будуть рівними і наш герой вирівняється по середині:

Ну от, начебто більше нічого поліпшувати, але не тут-то було. Як завжди, наш улюблений браузер Internet Explorer 6 чогось так не розуміє з використовуваних нами властивостей CSS. У цьому браузері (і, можливо, в якихось інших старих теж) не дивлячись на всі наші старання підвал не буде притиснутий до низу, а як і раніше, прилипатиме до найвищої колонки макета сайту.

Все це відбувається через те, що (не розуміє властивість min-height: 100%, яке ми використовували для завдання мінімальної висоти основного блоку, рівною висотіекран.

Тому для вирішення цієї проблеми нам доведеться застосувати так званий хак, що дозволяє пояснити (на пальцях) старим браузерам, що потрібно робити. Перед списком CSSвластивостей для maket потрібно буде вставити наступну комбінацію:

* html #maket ( height: 100%; )

Це правило буде застосовано тільки для браузера Internet Explorer 6, інші не будуть його враховувати та виконувати.

Отже, остаточний вигляд Style.css із притиснутим до низу екрану футером буде наступним:

Body, html ( margin:0px; padding:0px; height: 100%; ) * html #maket ( height: 100%; ) #maket ( width:800px; margin:0 auto; min-height: 100%; ) # header( background-color:#C0C000; ) #left( background-color:#00C0C0; width:200px; float:left; ) #right( width:200px; background-color:#FFFF00; float:right; ) #content ( background-color:#8080FF; margin-left:202px; margin-right:202px; ) #footer( background-color:#FFC0FF; clear:both; height: 50px; margin-top:-50px; width:800px; margin-left: auto; margin-right: auto; ) #rasporka ( height: 50px; )

Ну а остаточний вигляд Index.html був наведений трохи вище. Все, на цьому серію статей, присвячену блоковій верстці 2 і 3 фіксованих колонкових і гумових макетів сайту, можна вважати завершеною.

Можете також подивитись відео «Робота з Html тегом div»:

Удачі вам! До швидких зустрічей на сторінках блогу сайт

Вам може бути цікаво

Блокова верстка - Створюємо двоколонковий, триколонковий та гумовий макети для сайту
DiV верстка - Створюємо блоки для двоколонкового макета в HTML, визначаємо їх розміри та задаємо позиціонування у CSS

Це жах якийсь! Чому підвал вашого сайту знову «спливає» та зрушує дизайн? Невже не можна нормально притиснути футер до низу сторінки? Контентом чи цеглою хоча б! Цегла в монітор не пролазить?

Зрозуміло, тоді сидіть і нічого не робіть, доки не прочитаєте нашу статтю до кінця.

Робимо правильний футер для свого сайту

Багато власників сайтів зустрічаються з цією проблемою, коли footer сторінки просто спливає догори. І тоді незрозуміло, що робити. Найчастіше таким недоліком грішать дизайни сайтів, зверстані нашвидкуруч, самостійно. гурток «очумілі ручки») або початківцями веб-майстрами.

При цьому спочатку життя сайту нічого жахливого не відбувається. І така ідилія триває доти, доки контент тисне «своєю вагою» на підвал, не даючи йому піднятися нагору. Але варто розмістити на сторінці матеріал меншого об'єму, і нещодавно «спокійний» футер моментально піднімається нагору, наводячи весь дизайн сайту в неналежний вигляд.

Для усунення цього дефекту зверстаного шаблону не обов'язково витрачатися на послуги веб-майстра. Найчастіше футер сайту можна поставити на місце самостійно. Розглянемо все можливі варіантиусунення подібної проблеми:

Перший спосіб

Перший спосіб "прив'язати" підвал "до дна" сторінки побудований на основі CSS. Для початку наведемо код прикладу, а потім детальніше розглянемо його реалізацію:



html ( height: 100%; ) header, nav, section, article, aside, footer ( display: block; ) body ( height: 100%; ) #wrapper ( width: 1000px; margin: 0 auto; min-height: 100 %; height: auto ;important; height: 100%; ) #header ( height: 150px; ; ) #footer ( width: 1000px; margin: -100px auto 0; height: 100px; position: relative; background-color: rgb(51,51,204); )

Для того, щоб приклеїти підвал до низу сторінки тег

ми винесли за межі контейнера (шару wrapper ). Розтягуємо всю сторінку та вміст «тіла» до меж екрану. Для цього у коді CSS ми задали висоту тегів і у 100%:

html ( height: 100%; ) body ( height: 100%; )

Мінімальну висоту шару-контейнера встановлюємо також у 100%. Якщо ширина контенту буде більшою, ніж висота контейнера, задаємо властивості значення auto . Завдяки цьому wrapper автоматично підлаштовуватиметься під ширину розміщеного на сторінці контенту:

#wrapper (min-height: 100%; height: auto !important; height: 100%; )

Рядок коду "height: 100%" призначена для старих версій IE, які не сприймають властивість min-height.

Щоб у дизайні сторінки відокремити місце під підвал, ми встановлюємо відступ для тега у 100 пікселів:

#content ( padding: 100px; )

На даному етапі ми отримали веб-сторінку шириною на весь екран і додатково 100 пікселів, які "нейтралізуються" негативним значенням відступу для футера (margin: -100px) при встановленому для нього відносному позиціонуванні (position: relative). Таким чином, за допомогою негативного значення відступу ми зрушуємо підвал в область контейнера, для якого встановлена ​​висота в 100%.

У цьому прикладі розмітка веб-документа задана за допомогою порівняно нових тегів HTML 5 , які можуть бути неправильно інтерпретовані застарілими версіямибраузерів. Через це весь дизайн сторінки може бути відображено некоректно. Щоб уникнути цього, потрібно нові теги з арсеналу 5 версії мови гіпертексту замінити на звичайні

:

content


Удосконалений варіант

Розглянутий вище спосіб того, як зробити футер внизу сторінки непорушним не всім підходить. Якщо в майбутньому ви збираєтеся модифікувати та вдосконалювати дизайн свого сайту за допомогою спливаючих вікон, тоді краще відмовитись від використання попередньої реалізації.

Найчастіше у реалізації pop-up вікон використовується властивість CSS z-index. За допомогою його значень визначається порядок накладання шарів один на одного.

Чим більше значення z-index елемента, тим вище він перебуватиме у загальному стеку «нашарування».

Але через те, що у попередньому прикладі ми використали від'ємне значеннявідступу для футера, нижня частина спливаючого вікна перекриватиметься верхньою областю підвалу. Навіть незважаючи на те, що воно матиме більше значення z-index. Тому що у батька спливаючого вікна (wrapper) значення цієї властивості все одно менше.

Ось більш досконалий варіант:



CSS - код прикладу:

html, body ( height: 100%; ) .header ( height:120px; background-color: rgb(0,255,102); ) .main ( min-height:100%; position: relative; background-color: rgb(100,255,255); ) .footer ( height:150px; position: absolute; left: 0; bottom: 0; width: 100%; background-color: rgb(0,0,153); )

Як бачимо з коду, підвал ми помістили до складу основного елемента. Контейнер ми задали відносне позиціонування, а для футера - абсолютне. Підвал ми закріпили в самому низу контейнера, встановивши його положення зліва та зверху в 0.

Варіант для підвалу із нефіксованою висотою

Попередні способи реалізації можуть гарантувати, що футер завжди буде внизу сторінки. Але лише якщо підвал фіксованої ширини. А що робити, якщо кількість контенту, що розміщується в ньому, не можна спрогнозувати?

Для цього буде потрібний більш досконалий варіант для нефіксованого підвалу. У ньому футеру визначається значення table-row для якості display . Завдяки цьому він буде відображатися як рядок таблиці.

Всі, хто звик до повноцінно оформлених сторінок сайтів, віддає перевагу вигляду «прибитого» (прилипає, sticky) до низу футера сторінки. Але є в інтернеті дві біди: поля введення, що не ростуть вниз, і неприбиті (до низу вікна) футери. Наприклад, коли відкриваємо короткі за висотою сторінки типу habrahabr.ru/settings/social - відразу впадає в око, що інформація, покликана бути в нижній частині вікна перегляду, прилипає до змісту і знаходиться десь посередині, а то й у верхній частині вікна коли внизу - порожньо.

Так, замість того, щоб .
Даний посібник для верстальників-початківців покаже, як за 45 хвилин зробити «прибитий» футер, виправивши недоробки навіть такого шанованого видання, як Хабр, потягатися з ним як виконання свого перспективного проекту.

Подивимося на реалізацію одного виду прибитого футера, взятого з мережі, і спробуємо розібратися в тому, що відбувається. css-tricks.com/snippets/css/sticky-footer
CSS:
* ( margin:0; padding:0; ) html, body, #wrap ( height: 100%; ) body > #wrap (height: auto; min-height: 100%;) #main ( padding-bottom: 150px; ) /* мусить бути сильним як footer */ #footer ( position: relative; margin-top: -150px; /* negative value of footer height */ height: 150px; clear:both;) /* CLEAR FIX*/ .clearfix:after (content: "."; display: block; height: 0; clear: both; visibility: hidden;) .clearfix (display: inline-block;) /* Hides from IE-mac \*/ * html .clearfix ( height: 1%;) .clearfix (display: block;) /* End hide from IE-mac */
HTML:

Навряд чи кожен, навіть знає CSS, дивлячись на цей код, розбереться в принципах і буде впевнено правити складний проект. Будь-який крок убік призведе до побічних ефектів. Міркування та виготовлення футера нижче покликані дати більше розуміння правилам CSS.

Почнемо з теорії

Звичайна реалізація прибитого футера ґрунтується на тій унікальній для CSS2 властивості, що елементи - безпосередні нащадки BODY- Підтримують процентну висоту ( height:100%або іншу) щодо вікна, якщо всі їхні батьки мають також відсоткову висоту, починаючи з тега HTML. Раніше, без доктайпів, а зараз у Quirks Mode відсоткові висоти елементів підтримуються на будь-якому рівні, а в сучасних доктайпах – лише усередині відсотково заданих елементів. Тому якщо ми зробимо блок контенту (назвемо його #layout), що має 100% висоти, він матиме скролл, начебто це - вікно. У нього поміщають все (потокове) зміст, крім футера і, можливо, хедера.

Футер поміщають за цим блоком і роблять йому 0 пікселів висоти. Взагалі, можна слідом за #layoutпоставити скільки завгодно блоків, але всі вони повинні бути або з 0 пікселів висоти, або поза потоком документа (не position: static). І є ще один важливий фокус, яким зазвичай користуються. Не обов'язково робити висоту, рівну 0. Можна зробити висоту фіксованою, але з основного блоку відняти її рахунок якості margin-bottom: -(висота);.

Говорячи людською мовою, стилями робиться порожня «кишеня» знизу, в яку вкладається футер, і вона завжди виявляється або приклеєною до нижньої межі вікна, або до нижньої межі документа, якщо документ за висотою більший за висоту вікна. По інтернету та на Хабрі існує безліч реалізацій футера, з різною успішністю роботи у всіх браузерах. Продовжимо будувати його самостійно, використовуючи верстку Хабра як «робочого конячка».

Оскільки низ блоку #layout- це кишеня, вона для футера має бути порожньою, що не відображає об'єкти сторінки. І тут зустрічаємося з ще одним обмеженням - ми не можемо робити порожню кишеню за рахунок paddingв #layoutтому що тоді він стане більше 100%. Не врятує і margin- Порожнечу потрібно робити рахунок властивостей вкладених елементів. Плюс до всього, треба забезпечити невилазку під кордон блоку плаваючих елементів, що робиться, наприклад, блоком

, де .clear(clear:both). Важливо, щоб або ця " висотабула фіксованою, або в тих же відносних одиницях, або ми її обчислювали б у процесі змін сторінки. Зазвичай зручно поєднати цей вирівнюючий блок з установкою для нього необхідної висоти.

Подивимося на будову сторінок нашого піддослідного. Для цього найпростіше розкрити вікно Firebug або подібне вікно («Інструменти розробника» (Ctrl-F12)) у Chrome.

...Верхній блок реклами...


Перейдемо до робочого прикладу

Які бачимо недоліки версткиу плані реалізації ефекту прибитого футера? Бачимо, що
1) футер на сайті знаходиться всередині блоку з id=layout, який не має відсоткової висоти. За теорією, йому, батькам та блоку змісту. content-left потрібно поставити висоту 100%. З останнім виникають проблеми – він для такого не пристосований. Отже, не вистачає одного блоку прошарку або футер знаходиться не на тому рівні. Крім того,
2) висота футера змінна (залежить від числа елементів у списку та від розміру шрифту, це видно не з HTML, а CSS). І
3) над #layoutє рекламний блок фіксованої висоти 90px;
4) вирівнюючих блоків немає ні у футері, ні (взагалі кажучи) у блоці #layout(є, але над блоком .rotated_posts; втім, можливо, його треба віднести до футера).

Пункт 4 - доведеться промальовувати скриптом.
З третім пунктом розібратися, здавалося б, просто, додавши #layout(margin-top:-90px;) Але згадаємо, що цього блоку може не бути - він пригнічується банерорізкою, або рекламщики його раптом вирішать не показувати. Є низка сторінок сайту, де його немає. Тому залежність margin-topвід рекламного блоку – погана ідея. Набагато краще – розмістити його всередині #layout- Тоді він нічим не заважатиме.

Перший пункт – щоб прибитий футер взагалі запрацював, треба блок футера помістити під #layout. Втім, з допомогою javascriptможна реалізувати й інші схеми прибитого футера, але в будь-якому випадку потрібен JS або правильна верстка, щоб обійтися без нього.

Оскільки ми не можемо бути сильнішими за найостаннішого верстальника сайту, який «вліпив» футер всередину змісту, відкладемо ідею правильного розміщення футера на свій майбутній сайт (який буде «крутіший» за Хабра!), а Хабр препаруємо джаваскриптом (юзерскриптом) до правильного стану. (Відразу скажемо, винен не верстальник, не стрілочник, а вид сайту, звичайно, визначає стратегічне рішення керівництва проекту.) Так ми не досягнемо ідеалу, тому що в першу секунду-дві у процесі завантаження сторінка буде з неправильною версткою. Але для нас важливий концепт і можливість перевершити за якістю найпопулярніший сайт світу айтішників.

Тому в потрібному місці скрипта (раніше наприкінці завантаження сторінки) напишемо переноси DOM-блоків реклами та футера на потрібні місця. (Приготуємося до того що, що рахунок юзерскриптів рішення буде складніше чистого.)
var dQ = function(q)(return document.querySelector(q);) //для скорочення var topL = dQ("#topline"), lay = dQ("#layout"), foot = dQ("#footer" ); if(topL && lay) //банер - всередину блоку контенту lay.insertBefore(topL, lay.firstChild); if(lay && foot && lay.nextSibling) //перенесення футера lay.parentNode.insertBefore(footer, lay.nextSibling);
Розставили блоки на місця - тепер залишилося приписати елементам потрібні властивості. Висоту футера доведеться задавати точно, просто тому що ми її вже знаємо на момент дії користувача (кінець завантаження сторінки). Через точку спрацьовування користувача, як говорилося вище, стрибок відображення футера на сторінці неминучий. Чи можна намагатися робити «хороше обличчя», але при «поганій грі»? Навіщо? "Погана гра" сайту дозволяє зробити без надусилля концепт, якого буде достатньо для оцінки якості і не знадобиться при "правильній грі" на своєму проекті.
if(foot)( //блок-вирівнювач

у футері h.apnd_el((clss:"clear", appendTo: footer)); var footH = foot.offsetHeight; //...і вимірюємо висоту футера ) if(topL && lay && footer && lay.nextSibling)( //вирівнюючий блок потрібної висоти в контенті ("лейауті") h.apnd_el((clss:"clear", css:( height: (footH ||0) + "px"), appendTo: lay)); lay.style.minHeight = "100%"; !important)html, body (height:100%)"); )
Тут дозволили собі застосувати самописну функцію h.apnd_elщо робить приблизно те ж, що і в jQuery -
$("
").css((height: footH ||0)).appendTo($(footer))
І далі - ще одна типова функція застосування правил CSS - h.addRules. Тут без неї не обійтися, тому що потрібно оголосити правило з !important- саме через особливості пріоритетів стилів з користувача.

З цими шматочками коду ми зможемо побачити в юзерскрипті прибитий футер (після стрибка його вниз) і повністю усвідомити, як треба будувати верстку сторінок. Використовувати стрибаючий дизайн повсякденно – неприємно, тому рекомендується його зробити виключно для демонстрації та тестування. У юзерскрипті HabrAjax я встановив аналогічний скрипт, закривши його налаштуванням "underFooter" (встановити "галочку" у списку налаштувань перед "прибитий до низу футер"), починаючи з версії 0.883_2012-09-12.

Чи торкається прибитий футер необхідність оновлення стилів ZenComment, якщо вони встановлені? Так, торкається.Через складний ланцюжок пріоритетів стилів, у яких стилі, вставлені юзерскриптом, мають нижчий пріоритет, довелося трохи підкоригувати юзерстилі для можливостіроботи з прибитим футером Якщо ви не оновите юзерстилі (до 2.66_2012-09-12+) - футер працюватиме неточно.

Блок rotated_post (три популярні поста з минулого) логічніше виглядає при футері, тому в реальному скрипті він теж перенесений у футер.

Другий пункт (зі списку недоліків верстки) - міркування суто для Хабра (до юзерскрипту не належать і частково повторюють колишні).

Сторінки мають проблему, яка заважає зробити прибитий футер на чистому CSS- невизначена висота футера, що залежить від розмірів шрифту за замовчуванням у браузері. Для реалізації футера на CSS потрібно підібрати відносні висоти шрифтів, але вони можуть не спрацювати, якщо на комп'ютері користувача не буде передбачених шрифтів. Тому рішення має включати джаваскрипт, який може підганяти переходами приблизне положення футера до точного. Або, подивившись на прийнятність зробленого рішення на юзерскрипті на різних платформах, зробити обчислювану установку прибитого футера - перші спостереження показують, що рішення практично.

Висновок: повноцінно оформити розкладку на Хабре можна, але для цього потрібен верстальник, що чітко розуміє поведінку розкладки, що має в своєму розпорядженні блоки в правильному порядку. (Зараз футер і верхній банер стоять "не там" і не так, щоб просто стилями отримати прибитий футер.) Можна обійтися без JS, якщо задати висоту футера у відносних одиницях, взявши деякий запас місця на невизначеність шрифту.

Реалізація

Якщо увімкнути HabrAjax 0.883+, то побачимо роботу «прибитого футера». Він адаптується за висотою за допомогою скриптів. Він дозволяє оцінити, наскільки краще виглядають сторінки із прибитим футером у порівнянні із звичайними. Користувачі ZenComment сумісні зі скриптами, але для правильної роботи прибитого футера з ними необхідно встановити версію ZenComment 2.66_2012-09-12+.

Факти про поведінку реалізації

Шаманство з футером, стилями і скриптами - це шаманство (лише підкріплене теорією). У різних браузерахтрохи різна поведінка, але подекуди – несподівана. Без користувачів скриптів і переставлення блоків результати будуть інші. Ось що дали експерименти з реалізацією на юзерскрипті.

1) Firefox – несподівана відсутність стрибків футера. Дивно, що їх немає – малювання відбувається після розміщення футера внизу.

2) Chrome – він здивував «блукаючим скроллом» – до сторінки з періодом раз на секунду додаються порожні простори внизу – щось неправильне відбувається з розрахунком висот. Лікується прописуванням html,body(height:100%) в юзерстилі, але без гарантій, що завжди працюватиме. Надійніше - перевіряти, чи не перевищує документ вікно по висоті, і якщо не перевищує, то рухатиме футер, інакше - нічого. Зі стрибанням - все гаразд, воно є.

3) Опера – без стрибків (v. 12.02) при першому завантаженні сторінки, але поспішне перезавантаження може показати стрибок футера. У іншому веде щонайменше коректно, ніж Fx.

Що ж, доведеться спеціально привчити Хром поводитися правильно (скриптом) і в такому вигляді викотити версію на огляд. Тому ділянка в юзерскрипті трохи складніше, ніж наведена у статті.

Це не повноцінна реалізація - не враховує, наприклад, випадки ресайзу вікна користувачем. Можна знайти і рідкісні (на практиці) поєднання висот футера, що змінюються, до переміщення і після нього, де логіка почне давати збої, що не призводять до незручностей. Недоліки залишені свідомо, тому що дотримується балансу складності доопрацювання і тимчасовості рішення.

У результаті вийшла цілком працездатна схема роботи принаймні для швидких стаціонарних комп'ютерів. Якщо виявиться неправильна поведінка футера, налаштування underFooter потрібно вимкнути.

Для яких сторінок це корисно?

На стандартному сайті, без юзерстилів навіть короткі сторінки запитань-відповідей виявляються довшими за 1500px, що в більшості випадків непомітно при горизонтально розташованих моніторах. Але навіть за звичайних моніторів часто трапляються персональні сторінки користувачів висотою близько 1300 пікселів, де неприбитий футер постає у всій красі. Не дуже довгий ряд сторінок в налаштуваннях користувача.

Якщо використовувати юзерстилі ZenComment, вони сильно скорочують необхідну висоту сторінки, а користувач HabrAjax може не показувати деякі або всі бічні блоки в сайдбарі. Тому зі скриптами та стилями помітно частіше спостерігається ефект неприбитого футера. Тому логічно, що у HabrAjax виправлення футера з'явилося вперше. Але й звичайний сайт має низку сторінок, де прибитий футер був би корисним.

Чи буде підтримка?

Поведінка сайту за останній рік показує, що розробники (а значить керівництво) почали впроваджувати можливості, що раніше існували тільки в юзерскриптах і юзерстилях. Наприклад, на початку року я написав, де зібрав безліч невеликих побажань. Через півроку я повернувся до неї і із задоволенням помітив (прямо в тексті; можна ознайомитися з «UPD» та датами), що ціла низка можливостей, описаних як побажання, вже була впроваджена в сайт.

Далі подивимося на «стрілочки» замість квадратиків для оцінювання коментарів. Вони з'явилися в користувачах almalexa («Prettifier») року 3 тому і перейняті в ZenComment року 2 тому. Місяця 2-3 тому вони з'явилися на сайті. Починає віритися в те, що через деякий час стрілки рознесуть на деяку відстань, як це зроблено в ZenComment (одна стрілка зліва від числа, друга справа), щоб менше промахуватись.

Тому, можливо, і «прибитий футер» на Хабрі - це не така фантастика, якою могла здатися 3 роки тому.

Інші можливості у скрипті HabrAjax, що з'явилисяза останні 3 місяці (вимикаються в налаштуваннях):
* автозростання полів введення (в Опері може гальмувати великих текстах);
* дні тижня при датах, крім «сьогодні» та «вчора»;
* події в Стрічці, що згортаються до 1 рядка та 2 символів;
* скорочення слів «хабр» до «χ·» і «χα»;
* підказки дат за номерами статей - повідомляється, якого місяця та року стаття до її завантаження, за номером в URL;
* Згорнуті «Схожі пости» до 2 слів. Скріншот «схожих постів» (показує 12 посилань, а не 4).

Ми починаємо п'ятий урок присвячений редагуванню шаблонів у CMS Joomla 3, на цей раз ми поговоримо про футер для сайту. Розберемо можливі варіанти оформлення футера та деякі підходи до його створення.

Що таке футер

Футером або підвалом сайту називають найнижчу його частину, в якій зазвичай міститься інформація про сайт, про авторські права і т.д. У стандартному виконанні у шаблоні Protostar, футер не містить будь-якої значущої інформації:

Стандартний зміст футера такий - поточний рік, ім'я сайту та посилання «Наверх», що веде на початок сторінки. Якщо чесно такий варіант футера абсолютно непотрібний відвідувачам нашого сайту, крім того посилання «Вгору» в нашому випадку абсолютно не потрібне, ми для цих цілей вже зробили красиву кнопку.

Тому для початку пропоную позбутися стандартного вмісту футера. Відкриваємо файл index.phpстандартного шаблону Protostar та шукаємо код, який відповідає за виведення футера. За виведення футера відповідає код між рядками 205 та 219, який виглядає наступним чином (залежно від версії Joomla та внесених змін до індексного файлу рядка коду можуть відрізнятися):

">

А тепер видалимо зайвий код з 210 по 217 рядок, в результаті код для футера буде таким:

">

По суті, ми видалили все, що можна, залишивши лише можливість виведення модулів у футері, за це відповідає рядок:

Зберігаємо індексний файл, переходимо на сайт та оновлюємо сторінку. Вміст футера зник, цього ми й домагалися. Тепер можна додавати у футер нову інформацію на свій розсуд, але перш ніж її додати варто відповісти на запитання - а що може перебувати у футері сайту?

Яку інформацію відображати у футері сайту

Для того щоб зробити футер ефективним у ньому має бути інформація, яка може зацікавити відвідувачів сайту. Залежно від спрямованості сайту, ця інформація може відрізнятися. Ось невеликий приклад тієї самої інформації, яка може бути у футері:

  • Додаткове меню- це меню може дублювати вже існуюче або бути унікальним. Дублювати меню в футер корисно, коли на Ваш сайт часто заходять з мобільних пристроїв, відвідувач, прогорнувши сторінку в низ, може скористатися додатковою навігацією по сайту.
  • Контактна інформація- для сайтів, що продають, або для сайтів які надають різні послуги наявність контактної інформації просто необхідна, а у футері їй саме місце.
  • Кнопки соціальних мереж- у сучасному світі соціальні мережі для багатьох людей це все, тому подібна інформація зайвої ніколи не буде.
  • Різні посилання- наприклад, посилання на карту сайту, стрічки новин та ін.
  • Віджети- можна вивести у футер інформацію, що відображає активність на сайті, лічильники відвідуваності, останні коментарі і т.п.
  • Реклама- Настає момент, коли хочеться отримати від сайту не тільки його наявність, але і прибуток, в цьому випадку футер може бути хорошим контейнером для реклами.

Не намагайтеся впхнути у футер свого сайту все перераховане вище, надлишок інформації, як і його відсутність, так само ні до чого хорошого не приведе.

З іншого боку не важливо, яка інформація буде у футері вашого сайту, головне щоб вона вписувалася в загальний дизайн і була красиво оформлена.

Створення футера для сайту

Тепер давайте відкинемо теорію і приступимо безпосередньо до створення футера. Способів формування футера може бути кілька:

  • Автоматичний- передбачає використання різних модулів для виведення певної інформації
  • Ручний- модулі не використовуються, всі зміни вносяться вручну за допомогою редагування файлів шаблону
  • Змішаний- в даному випадку використовуються обидва перелічені варіанти спільно

Кожен із способів по-своєму хороший, наприклад, на початковому етапі використання модулів значно спростить завдання, а метод, коли модулі не використовується, прискорить завантаження сторінки. У будь-якому випадку вибір залишається за Вами.

Для того, щоб розглянути всі можливі варіанти, я зупиню свій вибір на третьому варіанті. Таким чином, Ви матимете загальне уявлення, що і як редагується.

Як приклад я вирішив розбити футер на три вертикальні частини, зліва будуть виведені посилання на певні сторінки сайту, в центрі буде подібність логотипу, праворуч виведемо невеликий текст. За відображення лівої та правої частини футера відповідатимуть модулі, а логотип пропишемо руками в індексному файлі.

Для початку створимо нові позиції для модулів у футері (як це зробити ми говорили на уроці з налаштування та редагування шаблонів) у кількості двох штук. Так як вони будуть розташовуватися в лівій та правій частині футера, то й ім'я у них вийшло відповідне. footer-leftі footer-right. Оголошуємо їх у файлі templateDetails.xml.

Тепер вносимо зміни до індексного файлу шаблону, мій код вийшов таким:

baseurl. "templates/". $this->template . "/images/joom4all.png"?>" />

І для наочності скріншот:

Як виводяться модулі зрозуміло, а на логотипі хочу зупинитися докладніше. За виведення логотипу відповідає код:

baseurl. "templates/". $this->template . "/images/joom4all.png"?>" />

На перший погляд, звичайний HTML тег для зображення, але замість звичного шляху розташування файлу написаний php код. Цей код на перший погляд може здатися складним і незрозумілим, але насправді якщо його розібрати, стає зрозуміло, що нічого складного в ньому немає:

  • - Початок php коду
  • echo- відповідає за виведення рядка
  • $this->baseurl- цей рядок повертає ім'я сайту
  • templates/- тут ми вказуємо, що зображення зберігається у папці templates
  • $this->template- повертає ім'я поточного шаблону
  • /images/joom4all.png- шлях до зображення всередині кореневої папки шаблону та ім'я файлу із зображенням
  • ?> - кінець php коду

В результаті використання цього php коду ми отримуємо відносний шлях до файлу із зображенням. Тобто незалежно від того, яке ім'я буде у сайту і який використовується шаблон зображення буде взято з папки images обраного шаблону.

Зберігаємо файл index.php, тепер його можна закрити, він нам більше не стане в нагоді.

Тепер створимо кілька модулів, які виведемо у щойно створених нових позиціях. Перший модуль виводитиме меню у футері, а другий невеликий текст.

На наступному етапі створюємо модулі – для меню з типом «Меню» та для тексту з типом «HTML-код» (як створити модуль). Як позиції для них вибираємо щойно створені позиції модулів:

Щоб відрізняти наше меню для футера серед іншого меню на сайті, в налаштуваннях модуля меню додаємо до нього суфікс класу «_footer»:

Для того щоб не пояснювати, що за модуль з типом «HTML-код» я покажу принцип його дії на скріншоті:

Я заповнив цей модуль певним текстом, який буде виведений у футер, окрім звичайного тексту я написав невеликий php код, який відображає поточний рік:

Зберігаємо модулі та йдемо на сайт для перевірки результату і ось що у мене вийшло:

Результат хоч і є, але не дуже вражає. Тепер нам необхідно адекватніше оформити елементи футера за допомогою CSS.

Для початку оформимо нові блоки футера:

Foot-left, .foot-center(float: left;) /*вирівнювання блоків футера*/ .foot-left (width: 20%;) /*ширина лівого блоку*/ .foot-center (margin-left: -6px ;) /*відступ центрального блоку*/ .foot-right ( /*правий блок*/ float: none; height: 60px; )

Наступний кандидат на оформлення – це меню, до якого я застосував такі стилі:

Ul.nav.menu_footer (margin: 0;) /*нульові відступи у меню*/ ul.nav.menu_footer li ( /*оформлення тексту меню*/ font-family: "Lobster", cursive; font-size: 16px; line -height: 18px; ) ul.nav.menu_footer li.item-179 a ( /*пункт меню Карта сайту*/ margin-left: 15px; /*Пункт меню Про сайт*/ color: #5aa426; border-top: 3px solid #5aa426; bottom: 3px solid #0f70ad; color: #0f70ad;

І на завершення відокремлюємо футер від основної частини контенту:

Footer.footer hr (border-top: 3px solid #fc8f30;) /*відокремлюємо футер від основного контенту*/

Зберігаємо файл стилів, переходимо на сайт і дивимося на результат:

Ось ми і створили футер для нашого сайту, який виглядає набагато веселіше, ніж стандартний. На цьому цей урок вважаю завершеним, а наступного уроці ми перевіримо можливі помилки адаптивного дизайну та виправимо деякі недоліки. Крім того раджу почитати статтю про те, як створити шаблон Joomla 3 і зокрема футер з нуля швидко за допомогою Bootstrap.



Розповісти друзям