Css розташування блоків. Позиціонування елементів з різних боків блоку
Влад Мержевич
Позиціонуванням називається положення елемента системі координат. Розрізняють чотири типи позиціонування: нормальне, абсолютне, фіксоване та відносне. Залежно від типу, який встановлюється через властивість position, змінюється система координат.
Завдяки комбінації властивостей position, left, top, right і bottom елемент можна накладати один на інший, виводити в точці з певними координатами, фіксувати у зазначеному місці, визначити положення одного елемента щодо іншого та ін. Подібно до інших властивостей CSS управління позиціонуванням доступне через скрипти. Таким чином, можна динамічно змінювати положення елементів без перезавантаження сторінки, створюючи анімацію та різні ефекти.
Нормальне позиціонування
Якщо для елемента властивість position не задано або значення static , елемент виводиться в потоці документа як зазвичай. Іншими словами, елементи відображаються на сторінці, як вони йдуть у вихідному коді HTML.
Властивості left, top, right, bottom якщо визначені, ігноруються.
Абсолютне позиціонування
При абсолютному позиціонуванні елемент не існує у потоці документа і його положення задається щодо країв браузера. Задати цей тип можна через значення absolute властивості position. Координати вказуються щодо країв вікна браузера, що називається «видимою областю» (рис. 3.42).
Рис. 3.42. Значення властивостей left, right, top та bottom при абсолютному позиціонуванні
Для режиму характерні такі особливості.
- Ширина шару, якщо вона не задана явно, дорівнює ширині контенту плюс значення полів, меж та відступів.
- Шар не змінює своє вихідне положення, якщо у нього немає властивостей right, left, top та bottom.
- Властивості left і top мають більш високий пріоритет порівняно з right та bottom. Якщо left і right суперечать одне одному, то значення right ігнорується. Те саме стосується і bottom.
- Якщо left задати негативне значення, шар піде за лівий край браузера, смуги прокручування при цьому не виникне. Це один із способів сховати елемент від перегляду. Те саме стосується і властивості top , тільки шар піде за верхній край.
- Якщо left задати значення більше ширини видимої області або вказати right з негативним значенням, з'явиться горизонтальна смуга прокручування. Подібне правило працює і з top, тільки мова піде про вертикальну смугу прокручування.
- Одночасно зазначені властивості left і right формують ширину шару, але якщо width не вказано. Варто додати властивість width і значення right буде проігноровано. Аналогічно відбудеться і з висотою шару, тільки беруть участь властивості top , bottom і height .
- Елемент з абсолютним позиціонуванням переміщається разом із документом під час його прокручування.
Властивість position зі значенням absolute можна використовуватиме створення ефекту кадрів. Крім абсолютного позиціонування для елементів необхідно призначити властивість overflow зі значенням auto. Тоді при перевищенні контентом висоти видимої області з'явиться смуга прокручування. Висота та ширина «фреймів» формується автоматично шляхом одночасного використання властивостей left, right для ширини та top, bottom для висоти (приклад 3.31).
Приклад 3.31. Створення аналога кадрів
Плов народів світу
Плов по-ферганськи
Покласти в казан нарізане шматочками м'ясо і підсмажити до утворення скоринки. Нашаткований кільцями цибулю смажити разом з м'ясом до червоного кольору, потім додати моркву, нарізану соломкою. Покласти половину солі, все перемішати і смажити, поки морква не набуде золотисто-коричневого кольору. Після цього налити половину необхідної кількості води та дати закипіти.
Засипати рівним шаром рис, посилити вогонь і налити воду, щоб вона накрила рис на 1-1,5 см. Як тільки вода випарується, плов за допомогою шумівки зібрати до середини гіркою, проколоти паличкою в декількох місцях так, щоб вода, що знаходиться на поверхні, що пройшла на дно. Потім накрити плов і дати йому вперти 20-25 хв.
Ретельно перемішайте готовий плов, перекладіть у велику страву, зверху розкладіть м'ясо.
Результат цього прикладу показано на рис. 3.43. Шар header виводиться в потоці як завжди, а для шарів sidebar і content встановлено абсолютне позиціонування.
Рис. 3.43. Застосування абсолютного позиціонування
У браузері IE6 для абсолютно позиціонованих елементів не можна одночасно задати властивості left, right та top, bottom.
Абсолютне позиціонування також застосовується для створення різних ефектів, наприклад, підказки до фотографій. На відміну від атрибуту title тега який також виводить текст підказки, через стилі можна керувати виглядом тексту, що виводиться за допомогою скрипта.
Для початку створимо порожній шар з ідентифікатором floatTip та визначимо його стиль. Обов'язковими повинні бути три стильові властивості - position зі значенням absolute, display зі значенням none приховує шар і width задає ширину шару з підказкою. Інші властивості використовуються за бажанням розробника та призначені для зміни оформлення шару (приклад 3.32).
Приклад 3.32. Стиль для спливаючої підказки
#floatTip ( position: absolute; /* Абсолютне позиціонування */ width: 250px; /* Ширина блоку */ display: none; /* Ховаємо від показу */ border: 1px solid #000; /* Параметри рамки */ padding: 5px /* Поля навколо тексту */ font-family: sans-serif;/* Рублений шрифт */ font-size: 9pt;/* Розмір шрифту */ color: #333; /* Колір фону */ )
Сам скрипт складається з двох функцій - moveTip() відстежує рух миші і відповідно до координат курсору змінює положення шару, і toolTip() управляє видимістю шару і виводить у ньому бажаний текст (приклад 3.33).
Приклад 3.33. Скрипт для виведення шару
Document.onmousemove = moveTip; function moveTip(e) ( floatTipStyle = document.getElementById("floatTip").style; w = 250; // Ширина шару // Для браузера IE if (document.all) ( x = event.x + document.body.scrollLeft y = event.y + document.body.scrollTop; // Для інших браузерів ) else ( x = e.pageX; // Координата X курсору y = e.pageY; // Координата Y курсору ) // Показувати шар праворуч від курсора if ((x + w + 10)< document.body.clientWidth) { floatTipStyle.left = x + "px"; // Показывать слой слева от курсора } else { floatTipStyle.left = x - w + "px"; } // Положение от верхнего края окна браузера floatTipStyle.top = y + 20 + "px"; } function toolTip(msg) { floatTipStyle = document.getElementById("floatTip").style; if (msg) { // Выводим текст подсказки document.getElementById("floatTip").innerHTML = msg; floatTipStyle.display = "block"; // Показываем слой } else { floatTipStyle.display = "none"; // Прячем слой } }
Для зручності та універсальності скрипт слід винести в окремий файл та підключати його через атрибут src тега
" + "Об'єктив: Canon EF 24-105 f/4L IS USM
" + "Спалах: Canon Speedlite 580 EX
" + "Витримка: 1/125
Діафрагма: 5.6")" onmouseout="toolTip()" />