Що таке float value у CS:GO? Види позиціонування HTML елементів

07.09.2020 Огляди

Опис

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

Синтаксис

float: left | right | none | inherit

Значення

left Вирівнює елемент по лівому краю, а решта елементів, на кшталт тексту, обтікають його праворуч. right Вирівнює елемент праворуч, а всі інші елементи обтікають його по лівій стороні. none Обтікання елемента не задається. inherit Наслідує значення батька.

HTML5 CSS 2.1 IE 9 Cr 15 Op 11 Sa 5 Fx 8

float

Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diem nonummy nibh euismod tincidunt ut lacreet dolore magna aliguam erat volutpat.
Duis autem dolor in hendrerit в vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit a gue duis dolore te feu.

Результат даного прикладупоказано на рис. 1.

Мал. 1. Застосування якості float

Об'єктна модель

document.getElementById("elementID ").style.styleFloat

document.getElementById("elementID ").style.cssFloat

Браузери

У браузері Internet Explorer 6 спостерігається помилка з подвоєнням значення лівого чи правого відступу для плаваючих елементів, вкладених у батьківські елементи. Подвоюється той відступ, який прилягає до сторони батька. Проблема зазвичай вирішується додаванням display: inline для плаваючого елемента. Також у цьому браузері додається відступ 3px (так званий "трехпіксельний баг") у напрямку, заданому значенням float .

Internet Explorer до версії 7.0 включно не підтримує значення inherit.

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

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

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

Визначення та синтаксис CSS-властивості Float

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

На зображенні вище розділ “Читачі сайту ”.net magazine з трьома фотографіями читачів, які вирівняні ліворуч у своїх стовпцях з обгортанням тексту навколо зображень. Такою є основна ідея, що лежить в основі властивості float у схемах розміщення CSS, і вона демонструє один із способів, який використаний у табличному дизайні.

Ефективність використання float у багатоколонній верстці була пояснена Douglas Bowman у 2004 у його класичній презентації No More Tables :

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

Синтаксис

Властивість Float може приймати одне з 4 значень: ліворуч (left), праворуч (right), без вирівнювання (none) і успадковане (inherit). Це оголошується, як показано нижче.

#sidebar (float: left;)

#sidebar (

float: left;

Найчастіше використовувані значення це ліворуч і праворуч. Значення none або початкове значення float для будь-якого елементу HTML-сторінки є значенням за промовчанням. Значення inherit (успадковувати), до якого можна застосувати майже до кожної властивості CSS, не працює у версіях Internet Explorer, включаючи 7.

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

Як правило, плаваючий елемент повинен мати явно встановлену ширину(якщо це не replaced element, наприклад зображення). Це гарантує, що float веде себе як очікувалося та допомагає уникнути проблем у деяких браузерах.

#sidebar (float: left; width: 350px; )

#sidebar (

float: left;

width: 350px;

Особливості плаваючих елементів

Нижче наведено список поведінки плаваючих елементів, згідно специфікації CSS2:

left-floated блок буде зміщений вліво до його лівого краю (або межі краю, якщо край відсутня) стосується або краю змісту блоку, або краю іншого floated блоку

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

Non-positioned, non-floated блокові елементи діють, як плаваючі елементи, тобто. знаходиться поза потоком документа

Краї floated блоки не збігаються з краями суміжних блоків

Кореневий елемент( ) не може бути floated

Вбудований елемент, який floated, перетворюється на елемент блочного типу

Float на практиці

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

Aenean ultricies mi vitae est. Mauris placerat eleifend leo. Quisque sit amet est et sapien ullamcorper pharetra. Vestibulum erat wisi, condimentum sed, commodo vitae, ornare sit amet, wisi. Aenean fermentum, elit eget tincidunt condimentum, eros ipsum rutrum orci, sagittis tempus lacus enim ac dui.

Donec non enim в turpis pulvinar facilisis. Ut felis. Praesent dapibus, небагато іде cursus faucibus, tortor декілька egestas augue, eu vulputate magna eros eu erat. Aliquam erat volutpat. Nam dui mi, tincidunt quis, accumsan porttitor, facilisis luctus, metus.

CSS, що застосовується до зображення в полі вище виглядає так:

img ( float: left; margin: 0 15px 5px 0; border: solid 1px #bbb; )

img (

float: left;

margin : 0 15px 5px 0;

border: solid 1px #bbb;

Єдина властивість, яка може досягти такого ефекту роботи, це властивість float. Інші властивості (margin та border) є там з естетичних причин. Інші елементи в блоці (теги

З текстом в них) не потребують жодних стилів.

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

Цей box is floated left

This

Element has different background color to show that it spans the width of its parent, ignoring the floated element. Це inline text, however, wraps around the floated box.

У наведеному вище прикладі

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

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

Очищення floats

Проблеми розташування з floats зазвичай вирішуються використанням CSS властивості clear, яке дозволяє вам “прибрати” floated елементи з лівої чи правої або з обох боків.

Давайте розглянемо приклад, який нерідко зустрічається - нижній колонтитул (footer) обтікає праву сторону двох клонової розмітки:

Left column floated left

Якщо ви подивіться на сторінку IE6 та IE7, ви не побачите жодних проблем. Ліві та праві стовпці на місці, та нижній колонтитул внизу. Але в Firefox, Опері, Safari і Chrome ви побачите, що нижній колонтитул (footer) з'їжджає зі свого місця. Це викликане застосуванням float до стовпців. Це правильна поведінка, хоча вона є більш проблемною. Щоб вирішити цю проблему, ми використовуємо вищезазначену clear властивість щодо нижнього колонтитулу:

#footer (clear: both;)

#footer (

clear:both;

Результат показаний нижче:

Left column floated left

Right column also floated left

clear property will clear only floated elements, so applying clear: both to both columns не може призвести footer to drop down, тому що footer is not floated element.

Властивість clear очистить тільки floated елементи. Застосування clear таке: обидва стовпці не опускатимуть нижній колонтитул, тому що він не floated елемент.

Тому використовуйте clear на не- floated елементах, і навіть іноді на floated елементах, щоб змусити елементи сторінки зайняти свої відведені місця.

Фіксація Випадання батька

Однією з найзагальніших ознак розмітки з float є “випадання — батька”. Це показано на прикладі нижче:

Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper.

Зверніть увагу, що основа floated зображення з'являється поза своїм батьком. Батько повністю не розширюється, для змісту floated зображення. Це викликано тим, що ми обговорювали раніше: floated елемент поза природним потоком документа, хоча всі елементи блоку відображаються, але floated елемент там немає. Це не помилка CSS, все відповідно до специфікаціями CSS. Всі браузери роблять те саме в цьому прикладі. Потрібно сказати, що, в цьому прикладі, додаючи ширину контейнера можна запобігти проблемі в IE, але потрібно залишити проблему і для Firefox, Opera, Safari або Chrome.

Рішення 1:Float для контейнера

Найпростіший спосіб вирішення цієї проблеми є float для батьківського елемента:

Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper.

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

Рішення 2: Додавання Додаткової Розмітки

Це застарілий метод, але це простий варіант. Просто додайте додатковий елементу нижню частину контейнера та «очистіть» його. Ось як HTML-код виглядатиме після реалізації цього методу:

XHTML

Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper.

"//media.smashingmagazine.com/cdn_smash/wp-content/uploads/2009/10/lifesaver.jpg" width = "200" height = "222" alt = "" />

Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper.

І в результаті CSS застосовується до нових елементів:

Clearfix (clear: both;)

Clearfix (

clear:both;

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

Рішення 3: Псевдо-елемент after

:after псевдо-елемент додає певний елемент до виконаної сторінці HTML. Цей метод використовувався дуже широко, щоб вирішити проблеми float-clearing. Ось як виглядає CSS:

Clearfix:after ( content: "."; display: block; height: 0; clear: both; visibility: hidden; )

Clearfix:after (

content : "." ;

display: block;

height: 0;

clear:both;

visibility: hidden;

Клас CSS “clearfix” застосовується до будь-якого контейнера, який має дочірні елементи з float і не розширюється, щоб включити їх.

Але цей метод не працює для Internet Explorer до 7 версії, тому для IE потрібно застосувати один з наступних варіантів:

Clearfix ( display: inline-block; ) .clearfix ( zoom: 1; )

Clearfix (

display: inline-block;

Clearfix (

zoom: 1;

Залежно від типу проблеми, ви маєте справу з одним із двох рішень, які вирішать цю проблему в Internet Explorer. Слід зазначити, що властивість zoom не є стандартом властивостей Microsoft і тому ваше CSS стане не валідним.

Так, як псевдо - елемент: after не працює в IE6/7, отримуємо трохи роздутий і мудрий код, і потрібен додатковий неприпустимий тільки для IE стиль, тому це рішення не є найкращим способомале, ймовірно, найкраще, з тих, що ми розглядали досі.

Рішення 4: Властивість Overflow

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

Зверніть увагу, що я сказав «майже» у всіх браузерах. Це пояснюється тим, що він не працює у IE6. Але, у багатьох випадках, у батьківського контейнера буде встановлена ​​ширина, яка усуває проблему в IE6. Якщо у батьківського контейнера немає ширини, Ви можете додати IE6-єдиний стиль з наступним кодом:

// Цей fix is ​​for IE6 тільки .clearfix ( height: 1%; overflow: visible; )

// Цей fix is ​​for IE6 only

Clearfix (

height: 1%;

overflow: visible;

У IE6, властивість height неправильно розглядати як min-height, таким чином, це змушує контейнер увімкнути свої дочірні елементи. Властивість Overflow потім встановлюється назад у “visible”, щоб гарантувати, що вміст не прихований або перегорнутий.

Єдиний недолік у використанні overflow методу (у будь-якому браузері) є можливість того, що зміст елемента матиме смуги прокручування або приховає інформаційне наповнення. Якщо є якісь елементи з негативними margin або з абсолютним позиціонуванням у батьків, то вони будуть приховані, якщо вони виходять за межі батька, тому цей метод слід використовувати обережно. Потрібно також відзначити що, якби у елемента, що міститься, була б зазначена height або min-height, то Ви безумовно не змогли б використовувати метод overflow.

Таким чином, насправді не просто кросбраузерно вирішити цю проблему. Але практично будь-яка проблема очищення float може бути вирішена одним із вищезазначених методів.

Пов'язані float помилки в Internet Explorer

За ці роки були численні статті, опубліковані в мережі, що обговорюють загальні помилки, пов'язані з float в CSS розмітці. Всі вони, що не дивно, мають справу з проблемами, характерними для Internet Explorer. Нижче Ви знайдете список посилань на ряд статей, які обговорюють пов'язані з float проблеми:

Зміна якості float за допомогою JavaScript

Щоб змінити значення CSS в JavaScript, ви повинні отримати доступ до стилю об'єкта, перетворюючи намічену властивість CSS в "Camel case" Наприклад, властивість CSS "margin-left" стає marginLeft, властивість background-color стає BackgroundColor, і так далі. Але з властивістю float, все інакше, тому що слово float вже зарезервоване JavaScript. Тому таке буде неправильним:

Style. styleFloat = "left";

// For all other browsers

myDiv. style. cssFloat = "left";

Практичне використання Float

Floats можуть бути використані для вирішення цілого ряду завдань у CSS розмітці. Деякі приклади наведено тут.

2-колонки, фіксованої ширини

3 стовпці, Схема розміщення Рівної висоти

Floated зображення із заголовком.

Подібно до того, що ми обговорювали раніше в рамках «Float на практиці», Max Design описує, як float зображення із заголовком, дозволяє тексту обернутися навколо нього природно.

Горизонтальна навігація з невпорядкованими списками

Властивість float - ключовий компонент у кодуванні заснованих на спрайті горизонтальних навігаційних панелей. Chris Spooner з Line25 описується створення Menu of Awesomeness, в якому теги

  • , що утримують кнопки навігації, використовують float: left:

    Щоб продемонструвати важливість властивості float у цьому прикладі, ось, скріншот того ж самого зображення після використання firebug для видалення the float: left:

    Grid-Based фото галереї

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

    Сторінка продуктів Foremost Canada's (див. зображення вище) відображає свої продукти у форматі сітки, поряд із боковою колонкою. Фотографії відображаються у вигляді невпорядкованого списку з властивістю float, для всіх

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

    На Paragon Furniture's futons page (див. зображення вище) інший приклад сторінки продуктів, де використовується невпорядкований список з floated тегами

  • .

    На iStockphoto's search results page (див. зображення вище) та сітка, структурованих фотографій, тут фотографії містять float:left

    теги, а не
  • теги.

    Вирівнювання поля з кнопкою

    Моделювання за замовчуванням елементів форми для різних браузерівможе бути проблематичним. Часто в одному полі форми, такому як форма пошуку, потрібно поставити елемент поруч із кнопкою “відправлення”.

    Сьогодні я розповім вам про такий параметр предметів у CS:GO як float valueабо значення float. Це десяткове число до 1. Чим більше це число, тим більше подряпанимвиглядатиме предмет. Чому важливо дізнатися, який float value у предмета перед покупкою?

    Ось дивіться, в Маркеті Cтим сьогодні у продажу висіли дві за приблизною однаковою ціною. Але в однієї був float 0,54 , а в іншої 0,81 .

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

    Усього існує п'ять станів предметів:

    • Загартоване в боях (Battle-Scarred) 1.00 – 0.44
    • Поношене (Well-Worn) 0.44 – 0.37
    • Польові випробування (Field-Tested) 0.37 – 0.15
    • Трохи поношене (Minimal Wear) 0.15 – 0.07
    • Прямо із заводу (Factory new) 0.07 – 0.00

    Відповідно, наш AWP | Азімов (Загартоване у боях)з float value 0,57 виглядає схоже на Зношений.
    За хорошим значенням float так само ганяються перекупники, оскільки хороший показник цього параметра може підвищити ціну деякі предмети майже вдвічі.

    То як дізнатися float value в CS:GO?

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

    Як подивитися float value на Маркеті?

    Нещодавно я писав огляд плагіна. Так ось, ще одна чудова функція цього плагіна – визначення float у предмета на Маркеті. Після встановлення плагіна поряд з кожним предметом з'являється посилання "View on glws", після натискання на яку ви потрапите на сторінку, де, серед іншого, вказано параметр "WEAR_FLOAT".

    Також флоат за замовчуванням включений на сайтах для продажу скінів. Таких як Opskins.com.

    Крім перегляду Float все ж таки раджу вам переглядати кожен предмет окремо в грі або на сайті metjm.net

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

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

    коротка інформація

    Синтаксис

    float: left | right | none

    Позначення

    Описприклад
    <тип> Вказує тип значення.<размер>
    A && BЗначення мають виводитися у вказаному порядку.<размер> && <цвет>
    A | BВказує, що треба вибрати лише одне значення із запропонованих (A або B).normal | small-caps
    A || BКожне значення може використовуватись самостійно або спільно з іншими у довільному порядку.width || count
    Групує значення.[crop || cross]
    * Повторювати нуль або більше разів.[,<время>]*
    + Повторювати один чи більше разів.<число>+
    ? Зазначений тип, слово чи група не є обов'язковим.inset?
    (A, B)Повторювати щонайменше A, але з більше разів.<радиус>{1,4}
    # Повторювати один або більше разів через кому.<время>#

    Значення

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

    Пісочниця

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

    img ( float: (( playgroundValue )) ; )

    приклад

    float

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

    Результат цього прикладу показано на рис. 1.

    Мал. 1. Застосування якості float

    Об'єктна модель

    Об'єкт.style.cssFloat

    Примітка

    У браузері Internet Explorer 6 спостерігається помилка з подвоєнням значення лівого або правого відступу для плаваючих елементів, вкладених у батьківські елементи. Подвоюється той відступ, який прилягає до сторони батька. Проблема зазвичай вирішується додаванням display: inline для плаваючого елемента. Також у цьому браузері додається відступ 3px (так званий «трьохпіксельний баг») у напрямку, заданому значенням float .

    Специфікація

    Кожна специфікація проходить кілька стадій схвалення.

    • Recommendation (Рекомендація) - специфікація схвалена W3C та рекомендована як стандарт.
    • Candidate Recommendation ( Можлива рекомендація) - група, відповідальна за стандарт, задоволена, як він відповідає своїм цілям, але потрібна допомога спільноти розробників з реалізації стандарту.
    • Proposed Recommendation ( Пропонована рекомендація) - на цьому етапі документ подано на розгляд Консультативної ради W3C для остаточного затвердження.
    • Working Draft (Робочий проект) - більш зріла версія чернетки після обговорення та внесення поправок для розгляду спільнотою.
    • Editor"s draft ( Редакторська чернетка) - Чорнова версія стандарту після внесення правок редакторами проекту.
    • Draft ( Чернетка специфікації) – перша чорнова версія стандарту.

    Браузери

    Браузери

    У таблиці браузерів застосовуються такі позначення.

    Детально описується CSS властивість float, особливості застосування та тонкощі використання, наведені види позиціонування HTML елементів

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

    Термінологія

    Щоб не було двозначностей, домовимося про терміни.
    Float(плаваючий елемент) - під floatабо плаваючим елементом у статті мається на увазі блоковий елемент із встановленою CSS властивістю floatrightабо left.
    Бокс- під терміном бокс мається на увазі уявний прямокутник, який містить кожен елемент HTML розмітки. Відповідно до англомовної термінології цей уявний прямокутник називатимемо боксом.
    Якщо про бокс не дуже зрозуміло, то наполегливо рекомендую докладніше познайомитися з боксами та їх властивостями у , т.к. цей термін досить часто використовується у статті, а головне - це основа всієї HTML верстки.
    Примітка.Далі у тексті зустрічатимуться підкреслені слова. Таким чином, я хочу звернути особливу увагу на певну властивість або якість елемента.

    Види позиціонування HTML елементів

    Для ясного уявлення викладеного треба знати основні принципи відображення елементів у HTML документах.
    Відповідно до w3.org у WEB розмітці використовується три схеми розміщення елементів у Web документах.
    Нормальний потік– у CSS 2.1 нормальний потік Web документа включає елементи, представлені, як блокові бокси, елементи, форматовані, як малі, і відносне позиціонування блокових і малих боксів.
    Іншими словами, нормальний потік включає звичайні елементи верстки, у яких не встановлено float, рівний left/right, або position, рівний absolute/fixed .
    Float- плаваючий елемент спочатку розміщується відповідно до правил розміщення в нормальному потоці, потім виводиться з цього потоку і зміщується у своєму рядку вліво або вправо, наскільки це можливо.
    Чітко засвоїть наступне важливе правило. Так як плаваючі елементи виводяться з нормального потоку документа, то блокові бокси нормального потоку їх не бачать, але малі бокси нормального потоку їх бачать і обтікають по одній зі сторін, до малих боксів, зокрема, відноситься звичайний текст блокових боксів. А це означає, що якщо при своєму розміщенні блокові бокси нормального потоку не звертають уваги на присутність плаваючих боксів, то вміст цих боксів (малі елементи) обтікають такі елементи.
    Абсолютне позиціонування– при абсолютному позиціонуванні бокс повністю видаляється з нормального потоку (не впливає на наступні) та розміщується щодо позиції свого контейнера, тобто елемента, в якому він розміщений.
    Трохи докладніше про потоки HTML документівви можете прочитати у статті

    Відмінності між плаваючими (float) та позиціонованими (position) елементами

    На початку, про всяк випадок нагадаю, у чому різниця між плаваючим. float) та позиціонованим ( position) елементами. Відносно позиціонований елемент із значенням position:relativeзалишається в нормальному потоці документа, але зрушується щодо свого становища, інші елементи при цьому не торкаються і залишаються там, де вони були. Це дає можливість елементам з відносним позиціонуванням перекривати навколишні елементи на сторінці. Якщо елемент встановлено position:absolute;або position:fixed;, він видаляється з нормального потоку і розміщується відповідно до правил абсолютного позиціонування.
    Плаваючі елементи завжди видаляються з нормального потоку документа і впливають на розміщення навколишніх елементів.

    Ось тепер приступимо.

    Що таке float?

    "Float" - одна з CSS властивостей блокового елемента розмітки, завдяки якому HTML елемент зміщується в крайнє, доступне для розміщення, ліве або праве положення всередині контейнера, що містить цей елемент. Якщо в поточному рядкуконтейнера по ширині не вистачає місця для його розміщення, він зміщується на наступний рядок, доки не зможе розміститися. Зауважу, що ширина floatелемента визначається його вмістом. Залежно від встановленого значення float, малі елементи можуть обтікати такий блоковий елемент по одній з його горизонтальних сторін.
    Властивість floatможе приймати наступні значення: none(за замовчуванням), left, right та inherit.

    Правила малювання float елементів

    Що відбувається, коли браузер зустрічає елемент, у якого властивість floatвідмінно від none?
    Спочатку такий бокс розміщується, як звичайний елемент, потім витягується з нормального потоку і зрушується в ліву або праву сторону доти, доки не зустріне такий самий floatелемент чи межу свого батьківського контейнера. У випадку, якщо місця, що залишилося, по горизонталі для елемента не вистачає, браузер зміщує його на наступний рядок свого контейнера.
    Оскільки floatелемент витягнутий із нормального потоку, звичайні блокові елементи без встановленої властивості floatне знають про його існування та розміщуються звичайним способом, кожен на новому рядку. Рядкові елементи розмітки «бачать» floatбокс і обтікають його по одній із сторін залежно від значення leftабо right.
    Для наочної демонстрації сказаного наведу такий приклад.

    Нормальний бокс1.

    float div1.

    float div2.

    Нормальний бокс2.

    Ось що при цьому відобразиться браузером.

    Демонстрація малювання float елементів

    А тепер розберемося, що вийшло. У прикладі наведено 4 блоки, бокс1 і бокс2 малюються браузером за умовчанням, тобто у нормальному потоці, а у внутрішніх елементів стоїть float = left. Щоб приклад вийшов наочнішим, я додав блокам фоновий колір і відступи. Отже, в результаті блоки за умовчанням (1-й і 4-й) відобразилися, як завжди, кожен на новому рядку і займають всю ширину ( оскільки наведено screenshot розмітки, ширина боксів обмежена шириною картинки). Плаваючі ж (2-й та 3-й) були витягнуті з нормального потоку (тобто, 1-й та 4-й бокси їх не бачать, тому «нормальний бокс2» починається під 1-м з початку рядка) і зміщені до лівий кордону контейнера. І хоча нормальні блокові бокси не бачать плаваючих, але малий бокс останнього боксу (а це його текст) бачить плаваючі бокси і обтікає їх з правого боку.
    Як бачите, все відповідно до вищенаведеного алгоритму малювання floatелементів.

    Як використовують float

    Існує два основні способи використання властивості float.
    Розглянемо їх.

    Обтікання зображення тексту.

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

    Текст обтікає зображення з float:left

    Приклад верстки сторінки з текстом, що обтікає зображення.

    CSS
    img.alignleft (float: left; margin: 0 10px 10px 0)

    У коді зверху та плаваючий елемент imgі обтічний текст знаходяться всередині одного і того ж контейнера p.
    Зверніть увагу, що в CSS стиляхліворуч і праворуч плаваючому елементу додано відступи. Це звичайна практика, коли зображення додається простір між ним і навколишнім текстом.

    Макети з колонками

    Властивість Floatдозволяє два блокових елементи розташовувати поруч один з одним, а не починати з нового рядка. Цю властивість плаваючих елементів дуже зручно використовуватиме створення колонок у документі. Щоб отримати макет з 2 колонками, достатньо задати обтікання (тобто задати своє float) двом DIVам.
    Приклад створення 2-х колонкового макету за допомогою float.

    HTML
    ‹div id="wrapper"›
    ‹div id="left-column"›‹div›
    ‹div id="right-column"›‹/div›
    ‹/div›

    CSS
    #left-column (float: left)
    #right-column (float: left)

    У прикладі обидва внутрішні DIVа отримали обтікання зліва, в результаті маємо 2 колонки. Ви також повинні переконатися, що загальна ширина двох внутрішніх стовпців (div) не перевищує ширину батьківського боксу, інакше друга колонка перескочить на нову позиціюнижче першої колонки.
    Додавши div заголовка над двома колонками і div підвалу з використанням якості clear,ви отримаєте простий та красивий 2-х колонковий макет.

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

    Скасування якості float

    Нерідко при роботі з floatбуває необхідно, щоб наступні елементи розмітки розташовувалися не поруч із плаваючим поточним, а як завжди, на наступному рядку, тобто потрібно повернутися до розміщення елементів відповідно до нормального потоку.
    Часто цього домагаються використанням властивості clear. Властивість clearприймає значення left, right, both, none(за замовчуванням), та inherit. На практиці використовується перші 3 значення, причому в переважній більшості випадків ви будете використовувати clear: both.
    Найчастіше, мабуть, clearвикористовується для того, щоб div підвалу сторінки встановити нижче ваших 2-х або 3-х плаваючих колонок.


    Будьте уважні. При використанні після плаваючого елемента в новому боксі правила з clear, ви повертаєте цей бокс у нормальний потік, але при цьому його властивість margin-topперестає працювати. Найчастіше цю ситуацію виправляють поміщаючи перед необхідним нормальному потоці боксом порожній div з властивістю clear

    . Задля справедливості слід зазначити, що такий прийом вважається технічно правильним, але семантичеки не коректним, т.к. у документі з'являється порожній divконтейнер.

    Контейнер з float елементів

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

    Раніше згадувалося, що плаваючі елементи забираються з нормального потоку документа. Це призводить до цікавої та заплутаної проблеми, коли всі елементи всередині контейнера плавають. Зазвичай таке спостерігається, наприклад, коли в контейнері div заголовка Web сторінкизнаходиться зображення логотипу з властивістю float:left. У заголовку також, як правило, за допомогою властивості background-imageнаводиться якесь фонове зображення. У сумі маємо контейнер у нормальному потоці, який містить плаваючий елемент та порожній елемент у нормальному потоці, оскільки зображення виведено тлом. Проблема в тому, що div заголовка містить єдиний не порожній елемент - зображення логотипу, що плаває, яке випало з нормального потоку. Тому браузер вважає div заголовка порожнім і встановлює його нульову висоту. Часто при цьому кажуть, що контейнер зник. Існує кілька шляхів вирішення цієї проблеми. Ви можете явно встановити висоту div контейнера не менше висоти зображення. Це добре працюватиме у випадку із заголовком, як у наведеному прикладі, але таке з ряду причин не завжди можливе. Іноді додають порожній div із встановленою властивістю clearщоб наступні елементи не були плаваючими.

    HTML
    ‹div class="clear"›‹/div›

    CSS
    .clear ( clear:both; )

    Це зручно, якщо допускається мати деяке порожнє місце після плаваючих елементів, т.к. деякі браузери для порожніх div можуть мати за промовчанням кінцеві величини для height, margin, paddingі т.д.
    Існує також метод використання властивості overflowу батьківському елементі. Зазвичай використовують overflow: hidden, але залежно від ситуації, ви можете використовувати overflow: autoабо overflow-yзамість використання цієї властивості в обох напрямках. Використання властивості overflowзахищає батьківський контейнер від плескання.

    Проблеми з float

    Крім проблеми контейнера, що схлопується, властивість float має ще ряд проблем.
    Старі версії Internet Explorer мають баг подвійного відступу( margin). Якщо елементи обтікаються в однаковому напрямку та елементам також додані marginу тому ж напрямку (left/left або right/right), IE подвоює величину margin. Простим рішеннямє встановлення властивості display: inlineдля плаваючого елемента, до речі ця властивість допомагає позбутися і інших багів шкідливого ішака. Крім того, ви можете використовувати умовні коментарі для встановлення специфічних marginдля IE або окремих версій IE.
    Іншою проблемою є додавання елементів всередину плаваючого елемента, причому ширина елементів, що додаються, більше ширини контейнера. Ви можете, наприклад, додати зображення всередину плаваючого елемента, при цьому ширина зображення більша за ширину контейнера. Залежно від браузера це може призвести до того, що ваш плаваючий елемент буде ширшим, ніж передбачалося, або вміст перекриває зображення. Переконайтеся, що елементи всередині плаваючого елемента не перевищують ширини плаваючого елемента.
    Існує також проблема зникнення нижнього відступу ( margin-bottom). Нижній відступ плаваючого елемента всередині інших плаваючих елементів може бути проігнорований. Рішення полягає у використанні paddingзамість marginякщо таке трапляється.

    Підсумки з float

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

    • Плаваючі елементи викладаються в нормальний потік документа, потім зсуваються ліворуч або праворуч всередині батьківського елемента відповідно до значення float і видаляються з нормального потоку документа.
    • Теги із встановленими значеннями floatавтоматично стають блоковими елементами.
    • Блокові бокси із встановленим floatрозташовуються поруч один з одним, поки їм достатньо місця. Якщо місця в контейнері не вистачає, вони будуть відображатися нижче за плаваючі елементи.
    • Ширина боксу із встановленою властивістю floatвизначається шириною його вмісту. Рекомендується при розмітці встановлювати ширину float елементам, інакше результат може бути непередбачуваним, рекомендація не стосується зображень, оскільки для них ширина передбачається.
    • Плаваючі та позиціоновані елементи різні і поводяться по-різному. Ви не можете використовувати властивості floatі positionв одному елементі.
    • Для скидання властивості обтікання для наступних елементів використовуйте CSS властивість clear.
    • Floatбокс виводиться з основного потоку, тому блокові елементи в нормальному потоці розміщуються так, ніби його немає, але малі бокси цих елементів звільняють місце для плаваючого блоку.
    • Контейнер з плаваючими елементами, має нульову висоту, т.к. float елементи виведені з нормального потоку, тому батько вважає, що він порожній. Існують засоби боротьби з цим ефектом без додаткової розмітки, ознайомитися з ними можна, наприклад, .
    • На відміну від елементів основного потоку, вертикальні межі floatбоксів не поєднуються з межами сусідніх блоків.
    • Знайдіть найбільш підходящі для себе рішення для вирішення проблем коректного відображення float елементів в Internet Explorer.

    Сподіваюся, викладене допоможе вам прояснити певну плутанину при використання CSSвластивості float.