Атрибути HTML: види та застосування. HTML-довідник. Float і clear у CSS — інструменти блокової верстки Проблеми з float

Опис

CSS властивість float дозволяє зробити елемент плаваючим, зміщуючи його до лівого або правого краю батьківського елемента залежно від того, яке значення встановлено. Якщо для плаваючого елемента явно не встановлена ​​ширина (width), він стискається по ширині до розмірів вмісту.

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

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

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

Замість плаваючого блоку з текстовим вмістом можна зробити плаваючу картинку. В цьому випадку буде проводитися обтікання картинки текстом:

Назва документа

За допомогою CSS властивості float картинка була зроблена плаваючою з лівого боку. Текст, розташований у HTML коді нижче за картинку, буде обтікати картинку з правої та нижньої сторони.

Спробувати »

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

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

  1. Задати фіксовану висоту - у випадках, коли відомо яка має бути висота контейнера.
  2. Застосувати властивість overflow з auto або hidden до контейнера, тоді плаваючі елементи будуть враховуватися при обчисленні висоти контейнера. Цей спосіб можна використовувати коли заздалегідь не відомо, яка має бути висота контейнера.

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

Примітка: елементи з абсолютним та фіксованим позиціонуванням ігнорують властивість float. Також властивість float не має жодного ефекту на флексбокси.

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

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

Використання параметра float

Щоб розташувати два шари поряд один з одним по горизонталі, скористаємося стильовим параметром float зі значенням left. Цей елемент говорить, що шар необхідно вирівняти з лівого боку і обтікати його з правого боку. Таким чином, другий шар, що лежить поруч, буде пристикований до першого праворуч.

Теоретично, параметр float достатньо задавати лише одного шару з двох. Однак браузер Internet Експлорер у цьому випадку між шарами додає невеликий проміжок, що не завжди бажано, а Файєр фох накладає шари один на одного. Щоб усе виглядало саме так, як хочеться, float слід вказувати всім шарів (приклад 1).

Приклад 1. Додавання параметра float





Дві колонки


...

...


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

Головною особливістю наведеного підходу є той момент, що при зменшенні вікна браузера до 750 пікселів і менше шари розташовуються по вертикалі один під одним (рис. 1). Іншими словами, макет розсипається на окремі блоки.

Мал. 1. Вигляд макету при зменшенні розміру вікна браузера

Щоб подібна ситуація не відбувалася, слід застосувати margin .

Додавання параметра margin для розробки двоколонного макету

Знову скористаємося параметром float, щоб розташувати колонки поряд, але додамо його тільки для першого шару. При цьому в стилі другого шару слід встановити параметр margin-left, значення якого дорівнює ширині лівої колонки. Але тут є одна хитрість — ширину правої колонки не можна задавати, тому що це призведе до перенесення блоків у браузері Internet Експлорер при зменшенні вікна браузера. А саме цього ми намагаємось уникнути. Тому загальну ширину макета встановимо за допомогою ще одного шару, назвемо його container, а решта шарів розташовуватиметься всередині нього (приклад 2). В цьому випадку ширину правої колонки можна не задавати, оскільки вона займатиме весь доступний простір.

Приклад 2. Двохколонний макет





Дві колонки






При такому способі верстки при зменшенні ширини вікна браузера шари залишаються на своїх вихідних місцях, але з'являється горизонтальна смужка прокручування. Також спостерігаються невеликі відмінності у браузерах, пов'язані з полями та відступами навколо контенту, розташованого всередині колонок. Але ці відмінності не суттєві та легко коригуються за рахунок застосування параметрів padding та margin.

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

Приклад 3. Застосування параметра clear





Дві колонки


...

...

...


Стиль для цього прикладу залишиться незмінним і тільки додається тег

з тегом clear: left . Значення цього параметра зазвичай збігається зі значенням float.

Резюме

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

Такий спосіб розробки багатоколонного макета має і певний недолік, який проявляється в тому, що при зменшенні вікна браузера до певної величини колонки перестрибують одна під іншу. Щоб цього уникнути, додатково використовують стильовий атрибут margin-left , додаючи його до правої колонки. У такому випадку шари залишаються на вихідних місцях, незалежно від розмірів вікна браузера.

Здрастуйте, шановні читачі блогу сайт. Сьогодні ми продовжуємо вивчати класичний CSS та на черзі у нас плаваючі елементи, що створюються за допомогою Float. Також ми торкнемося призначення правила Clear (both, left, right) і подивимося на прикладах горизонтального меню і триколонкового макета, як це можна використовувати практично.

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

Float — створення плаваючих елементів у CSS коді

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

Але в CSS є два правила, які можуть змінити це. Йдеться про float та position. Коли до тегів не застосовуються ці два правила, такий варіант називається кодом у нормальному потоці.

У цього правила є три можливі значення (за специфікацією консорціуму W3C), причому за умовчанням використовується значення None, тобто. спочатку у нас жодних плаваючих елементів немає:

Значення Left та Rightтаки дозволяють створювати плавання. При цьому властивості такого тега зміняться і він інакше взаємодіятиме з іншими. Давайте розглянемо це на прикладі. Візьмемо один рядковий тег Span і два блокові елементи Div.

Пам'ятайте, у статті призначення я говорив, що з малих елементів ці правила працювати не будуть, тобто. для них не можна задати висоту та ширину. Тому для демонстрації зміни властивостей плаваючого елемента я додаю рядковому тегу Span правила height і width, які в звичайній ситуації працювати, звичайно, не будуть.

Рядковий

Блоковий
Блоковий

Тепер давайте пропишемо для Span правило float зі значення Left і подивимося що з цього вийде (для наочності ще поставимо нашому новоспеченому плаваючому блоку ще й відступ margin в 5px з усіх боків (margin:5px), щоб було зрозуміліше його взаємини з сусідніми тегами:

Наш елемент починає плавати вліво (бо ми прописали float: left). При цьому заробили ширина і висота, задані в правилах height і width, хоча Span спочатку був малим тегом. Крім цього запрацював і margin по висоті (відступ до сусідів), який для малих тегів спочатку був марним.

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

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

Найчастіше це буде контейнер Div - ідеальний для побудови блочної схеми, т.к. спочатку має нульові, а height і width у нього мають значення Auto. Т.о. Div є структурним блоком, так само як і Span, у якого теж все нульове.

Але повернімося до наших баранів, а саме опишемо всі ті зміни, які відбуваються з тегом, коли до нього застосовується правило Float зі значенням Left або Right:


Clear (both, left, right) та горизонтальне меню на Float

Виникає питання: а чи можна блоки, що стоять у коді нижче плаваючого елемента (з float:left або right), змусити з ним взаємодіяти (тобто вибудовувати своє становище залежно від розмірів плаваючих блоків)? Виявляється можна, і для цього в CSS передбачено спеціальне правило Clear. Воно має чотири допустимі значення (none використовується за замовчуванням):

Коли ми для будь-якого Html тега прописуємо CSS правило Clear, то це означає, що цей самий елемент повинен буде врахувати всі плаваючі блоки, що стоять перед ним у коді:

  1. Зліва, якщо прописано clear:left
  2. Праворуч у right
  3. Скрізь у clear:both (означає з обох боків)

Спробуймо подивитися на прикладі clear:left для наведеного трохи вище скріншота (його ми пропишемо для зеленого Div контейнера):

Float блок

Блоковий
Блоковий

Т.о. ми змусили контейнер Div побачити та врахувати плаваючий ліворуч від нього елемент. Якщо для цього тега прописати clear:right, то жодних змін не відбудеться, бо плаваючих вправо блоків (з right) у нас в коді перед цим тегом не спостерігається.

Якщо ж використовувати clear:both, то будуть враховані всі плаваючі блоки (і вліво, і вправо - які знайдуться). Both використовують у тих випадках, коли невідомо з якої сторони з'явиться елемент плаваючий і високий. Саме його і можна найчастіше зустріти у коді в наш час.

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