В чем разница между Float: left и Display: inline? Хотя каждый элемент в браузере по умолчанию перемещается влево - PullRequest
29 голосов
/ 09 ноября 2009

В чем разница между Float и Display: inline? по умолчанию все идет влево в каждом браузере. тогда 2 отображаемых встроенных элемента должны работать так же, как float: left.

http://www.w3schools.com/css/tryit.asp?filename=trycss_display_inline

Ответы [ 8 ]

13 голосов
/ 09 ноября 2009

display:inline означает, что элемент будет «складываться» рядом с другими элементами, такими как изображения, интервалы или жирный тег. Этому противостоят элементы уровня блока (display:block), которые занимают горизонтальное пространство, подразумевают разрыв строки и не будут располагаться рядом друг с другом, например, div, абзацы или таблицы.

Думай об этом так ...

<img /><img /><img />

<div />
<div />
<div />

float - это совсем другое понятие, перемещение контента влево или вправо. По умолчанию плавающий элемент имеет встроенное значение , а плавающие элементы располагаются рядом друг с другом.

Все эти типы элементов являются частью обычного документооборота, то есть они занимают «пространство» в дизайне, которое нельзя использовать совместно.

10 голосов
/ 09 ноября 2009

Существует два типа форматирования: уровень блока и встроенный. Форматирование на уровне блоков выполняется с помощью блочной модели, которая использует набор правил для макета.

Встроенное форматирование - это то, что обычно получает текст. Неформально это означает, что все заполняется линиями.

Время от времени вы хотите изменить форматирование по умолчанию, которое получает элемент. Что-то, что обычно может быть отформатировано на уровне блока, вы можете захотеть рассматривать как встроенное. Элемент div, содержащий, например, содержимое ключа, например, может потребоваться отобразить в предложении. Затем можно переопределить его форматирование с помощью display:inline. Изображения уже отображаются "Inline"

Спецификация CSS имеет удивительно простое определение для чисел с плавающей запятой:

Число с плавающей точкой - это смещение влево или вправо на текущей строке. Наиболее интересная характеристика поплавок (или «плавающий» или «плавающий» поле), что контент может течь вдоль его сторона

Так что float - это своего рода третья категория модели форматирования. Это относится к inline как к неформальной модели макета.

5 голосов
/ 06 декабря 2012

Хотя уже слишком поздно, чтобы ответить, но одно из основных отличий, о которых я могу упомянуть, касается: Clear

В float элементах вы должны Clear свои поплавки, но в inline элементах очистка не требуется.

Вы можете увидеть живой пример здесь: http://jsfiddle.net/K9PXF/

И это отличная статья о поплавках и расчистке: http://css -tricks.com / all-about-float /

1 голос
/ 09 ноября 2009

У каждого браузера есть «поток». Этакий поток эмулирует текстовый процессор в этом потоке элементов слева направо, сверху вниз. Элементы, которые не помещаются в конце «строки», переносятся, так сказать, на следующую «строку».

Блочные элементы занимают всю строку. Встроенные элементы занимают столько места, сколько им нужно, поэтому другие элементы могут находиться рядом с ними на одной линии. Если не объявлена ​​ширина, этого не происходит с блочными элементами.

Плавающий элемент выводит элементы из нормального потока и сдвигает его влево / вправо. Пространство, которое занимал объект до его плавания, пусто и разрушается. Если я плаваю в двух элементах, которые занимают больше места, чем может вместить строка, один может упасть до следующей «строки».

@ Jitendra - отображение двух пролётов в строке соединит их в потоке, да. Похоже, что плавающие два элемента, которые не занимают места в полной строке, делают то же самое. У них определенно есть различное использование, все же.

Если бы я хотел, чтобы текст проходил вокруг изображения в абзаце, я бы использовал плавающее изображение, не используя display:inline. Если бы я хотел создать горизонтальное меню из элементов списка, я бы использовал display:inline, а не float.

1 голос
/ 09 ноября 2009

Я всегда помню, что такое плавающее, вспоминая оригинальный <img align="left" />, который действует очень похоже на float:left. В основном плавающий, плавает изображение влево и оборачивает текст или другой контент вокруг него. Без плавающего элемента он будет отображаться как фрагмент текста.

Float работает аналогично другим инструментам документов, где вы можете обернуть текст вокруг изображения (или элемента HTML).

0 голосов
/ 12 февраля 2013

Перейдите в w3schools и попробуйте это в их редакторе (поскольку ссылки на изображения полностью принадлежат им, или вы можете заменить src-изображение из URL-адресов источника изображения) Затем измените размер окна.

Что вы заметите, так это ... Что в случае отображения: inline, текст будет разделен на слова, и некоторые слова текста появятся в следующей строке. Хотя в случае с плавающей точкой: слева весь текст будет отображаться вместе как элемент и не будет разделяться.

Цель inline - просто отобразить все в LINE, хотя функция float - это выравнивание ELEMENTS по некоторому измерению.

<!DOCTYPE html>
<html>
<head>
<style>
.thumb 
{
float:left;
}
.thumbnail 
{
display:inline;
}
</style>
</head>

<body>
<h3>Image Gallery</h3>
<br>Below are the inline elements<br>
<img class="thumbnail" src="klematis_small.jpg" width="107" height="90">
<img class="thumbnail" src="klematis2_small.jpg" width="107" height="80">
<img class="thumbnail" src="klematis3_small.jpg" width="116" height="90">
<img class="thumbnail" src="klematis4_small.jpg" width="120" height="90">
<p class="thumbnail">Try resizing the window to see what happens when the images does not have enough room.</p>
<img class="thumbnail" src="klematis_small.jpg" width="107" height="90">
<img class="thumbnail" src="klematis2_small.jpg" width="107" height="80">
<img class="thumbnail" src="klematis3_small.jpg" width="116" height="90">
<img class="thumbnail" src="klematis4_small.jpg" width="120" height="90">
<br><br>Below is the floating elements<br><br>
<img class="thumb" src="klematis_small.jpg" width="107" height="90">
<img class="thumb" src="klematis2_small.jpg" width="107" height="80">
<img class="thumb" src="klematis3_small.jpg" width="116" height="90">
<img class="thumb" src="klematis4_small.jpg" width="120" height="90">
<p class="thumb">Try resizing the window to see what happens when the images does not have enough room.</p>
<img class="thumb" src="klematis_small.jpg" width="107" height="90">
<img class="thumb" src="klematis2_small.jpg" width="107" height="80">
<img class="thumb" src="klematis3_small.jpg" width="116" height="90">
<img class="thumb" src="klematis4_small.jpg" width="120" height="90">
</body>
</html>
0 голосов
/ 09 ноября 2009

Обычный рабочий процесс браузера - отображать элементы слева направо, каждый рядом с другим (если встроенные элементы) ... когда строка заканчивается из-за размера веб-страницы, браузер запускается снова для отображения элементов слева направо, но на следующей строке.

Директива float для элемента заставляет браузер отображать элемент вне обычного рабочего процесса в левой верхней или верхней правой части веб-страницы.

Директива display inline заставляет элементы блока отображаться встроенными, поэтому браузер управляет этими элементами, как описано выше!

ОТВЕТИТЬ НА ВАШ ВОПРОС: Нет! Как я уже писал: float: left заставляет любой элемент (блок или не блок), помещенный в любую строку веб-страницы, плавать в левой части веб-страницы ... даже если установлено выравнивание текста направо"! Если выравнивание текста установлено по левому краю, применяя float: left, что ничего не происходит ... вместо этого даже в этом случае элемент вынужден выходить из обычного рабочего процесса браузера, фактически, обычно оставшееся поле равно сброшена!

display: inline не влияет на встроенные элементы ... если для выравнивания текста (контейнера элементов) установлено значение "right", display: inline не перемещает его слева (обратите внимание, Я имею в виду встроенные элементы) ... потому что "display: inline" говорит браузеру только об отображении элемента в той же строке обычного рабочего процесса ... так что, если элемент является встроенным (например, ссылка элемент), это свойство не меняет своего поведения!

Итак, display: inline влияет только на элементы block! Но даже в этом случае он не перемещается слева от элемента блока, но заставляет элемент отображаться только в одной строке других встроенных элементов!

О ВАШЕМ ПРИМЕРЕ: Div (s) - это блочные элементы, обычный рабочий процесс не является встроенным ... поэтому браузер, по умолчанию, показывает их один ниже другого , как в этом примере:

<div class="purple" style="float:left">Link one</div> 
<div class="purple">Link two</div> 
<div class="purple">Link three</div> 
<div class="purple">Link four</div>

даже если вы примените float: left к первому div, швы, что ничего не происходит, только почему он уже находится в верхнем левом углу ... куда он должен пойти иначе !!! ???

Второй пример ...

<div class="red" style="float:left">Link one</div> 
<div class="red" style="float:left">Link two</div> 
<div class="red" style="float:left">Link three</div> 
<div class="red" style="float:left">Link four</div> 

Когда вы применяете float: влево к смежным элементам, заставьте браузер отображать их вне обычного рабочего процесса (К сожалению, по умолчанию элементы блока отображаются один под другим !), плавающие div (ы) на левой стороне ... в этом случае один рядом друг с другом. Обратите внимание, что, к сожалению, поля сбрасываются ... потому что div (s) находятся не в обычной строке браузера, а только с плавающей точкой слева ... опять же, вне обычного рабочего процесса!

На самом деле следующий пример подтверждает то, что мне грустно в теории ... display: inline заставляет браузер отображать элементы блока (div) на одной строке с учетом их поля по умолчанию и отступов :

<div class="brown" style="display:inline">Link one</div> 
<div class="brown" style="display:inline">Link two</div> 
<div class="brown" style="display:inline">Link three</div> 

Но дисплей : inline не заставляет элементы плавать слева, а только управляется как встроенные элементы , чтобы прояснить эту концепцию, рассмотрим большую разницу между двумя примерами ниже!

ПЕРВОЕ:

<div style="width:800px; text-align: right;">
    <div class="brown" style="display:inline">Link one</div> 
    <div class="brown" style="display:inline">Link two</div> 
    <div class="brown" style="display:inline">Link three</div> 
    <div class="brown" style="display:inline">Link four</div> 
</div>

ВТОРОЙ:

<div style="width:800px; text-align: right;">
    <div class="brown" style="float:left">Link one</div> 
    <div class="brown" style="float:left">Link two</div> 
    <div class="brown" style="float:left">Link three</div> 
    <div class="brown" style="float:left">Link four</div>  
</div>

О ШИРЕ: отображение: встроенное на элементе блока без фиксированной ширины, оно заставляет ширину свернуться до минимального значения (ширина содержимого + отступ), потому что это нормальное поведение встроенного элемента.

Элемент div по умолчанию имеет ширину 100% ... поэтому, когда вы применяете float: left, ширина по-прежнему установлена ​​на 100%, но плавающий элемент слева заставляет браузер управлять и отображать его ширина необычным способом! В этом случае нет общего правила, каждый элемент имеет свое поведение!

0 голосов
/ 09 ноября 2009

display: inline означает, что элемент действует как <span> вместо <div>: то есть это не блок.

Плавающие элементы не находятся в нормальном потоке документа. Здесь - хорошее описание.

ETA:

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

<html>
<head>
<style type="text/css">
p.inlinel {display:inline; width: 4em;}
p.inliner {display:inline; width: 4em; text-align: right;}

p.floatl {width: 4em; float:left;}
p.floatr {width: 4em; float: right;}
</style>
</head>
<body>

<p class='inlinel'>The is an inline paragraph with lots of words.</p>
<p class='inliner'>The is an inline paragraph with lots of words.</p>

<br/><br/>

<p class='floatl'>The is a left floated paragraph with lots of words.</p>
<p class='floatr'>The is a right floated paragraph with lots of words.</p>


</body>
</html>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...