





<div> - это элемент блочного уровня, а <span> - встроенный элемент.
Если вы хотите что-то сделать со встроенным текстом, <span> - это то, что вам нужно, поскольку он не будет вводить разрывы строк, как это сделал бы <div>.
Как отмечали другие, существует некоторая семантика, подразумеваемая каждым из них, наиболее важным является тот факт, что <div> подразумевает логическое разделение в документе, подобное, может быть, разделу документа или чему-то еще, а-ля:
<div id = "Chapter1">
<p>Lorem ipsum dolor sit amet, <span id = "SomeSpecialText1">consectetuer adipiscing</span> elit. Duis congue vehicula purus.</p>
<p>Nam <span id = "SomeSpecialText2">eget magna nec</span> sapien fringilla euismod. Donec hendrerit.</p>
</div>
Я знаю, что вы можете изменить это с помощью CSS, но это вводит другую технологию. HTML может существовать сам по себе, и когда это происходит, div не является встроенным и не предназначен для этого в чистом виде.
Есть ли хорошая книга, объясняющая, как правильно использовать элементы html в разных ситуациях.
@mko - не знаю, если честно. Опыт лучший учитель. В конечном счете, нет «правильного» ответа, есть просто то, что работает для вашей ситуации и ваших целей. ;)
div - это блочный элементspan - это встроенный элемент.Это означает, что для их семантического использования следует использовать блоки div для переноса разделов документа, а интервалы - для переноса небольших частей текста, изображений и т. д.
<div>This a large main division, with <span>a small bit</span> of spanned text!</div>
<div>Some <span>text that <div>I want</div> to mark</span> up</div>
... незаконно.
Обновлено: Начиная с HTML5, некоторые элементы блока могут быть размещены внутри некоторых встроенных элементов. См. Ссылку MDN здесь для довольно четкого списка. Вышеупомянутое по-прежнему является незаконным, поскольку <span> принимает только фразированное содержимое, а <div> - потоковое содержимое.
Вы просили привести несколько конкретных примеров, например, один взят с моего сайта по боулингу, ЧашаSK:
<div id = "header">
<div id = "userbar">
Hi there, <span class = "username">Chris Marasti-Georg</span> |
<a href = "/edit-profile.html">Profile</a> |
<a href = "https://www.bowlsk.com/_ah/logout?...">Sign out</a>
</div>
<h1><a href = "/">Bowl<span class = "sk">SK</span></a></h1>
</div>h1. The userbar, being a section, is wrapped in a div. Within that, the username is wrapped in a span, so that I can change the style. As you can see, I have also wrapped a span around 2 letters in the title - this allows me to change their color in my stylesheet.
Также обратите внимание, что HTML5 включает в себя широкий новый набор элементов, которые определяют общие структуры страниц, такие как статья, раздел, навигация и т. д.
Раздел 4.4 HTML 5 рабочий проект перечисляет их и дает советы по их использованию. HTML5 все еще является рабочей спецификацией, так что еще нет ничего «окончательного», но очень сомнительно, что какой-либо из этих элементов куда-то изменится. Если вы хотите стилизовать эти элементы в какой-либо более старой версии IE, вам понадобится взлом javascript - вам нужно создать один из каждого элемента с помощью document.createElement, прежде чем любой из этих элементов будет указан в вашем источнике. Есть несколько библиотек, которые позаботятся об этом за вас - быстрый поиск в Google показал html5shiv.
Крис, в вашем тексте ошибка: даже если вы установите стиль диапазона на «блок», по-прежнему незаконно оборачивать его вокруг элемента уровня блока!
Вы не можете использовать div и span семантически, поскольку они не имеют никакого значения. div - это бессмысленный общий элемент уровня блока, а span - бессмысленный универсальный встроенный элемент.
@apnerve У них все еще есть семантика в этом блоке по сравнению со встроенными элементами, которые означают разные вещи для потока документов, как с точки зрения синтаксического анализа, так и с точки зрения «чтения этого источника, чтобы выяснить, что происходит».
@ ChrisMarasti-Georg: Нет. Это не семантика. Разметка что-то значит, когда мы можем ее идентифицировать и делать с ней полезные вещи. Какую разницу вы видите, когда сталкиваетесь с <div>hello</div> и <span>hello</span>. Он одинаково хорош как для людей, так и для компьютеров.
«Семантика (от греческого sēmantiká, средний род множественного числа от sēmantikós) [1] [2] - это изучение значения. Она фокусируется на отношениях между означающими, такими как слова, фразы, знаки и символы, и тем, что они обозначают, их денотатами. . " Знаки "div" и "span" наверняка что-то означают. Спецификация HTML дает хорошее представление о том, что означают блочные и встроенные элементы. w3.org/TR/html401/struct/global.html#h-7.5.3. Черновик HTML5 даже помещает их в отдельные группы - «Группировка содержимого» и «Семантика на уровне текста». dev.w3.org/html5/spec/Overview.html
У вас был я в «div - это блочный элемент, span - inline.» :)
Есть ли хорошая книга, объясняющая, как правильно использовать элементы html в разных ситуациях.
остается ли этот ответ действительным даже после HTML5, поскольку он позволяет записывать некоторые элементы block внутри элементов inline. как <h1> допускается внутри тега <a>
Ваше изменение, что «div внутри диапазона теперь допустимо», кажется неправильным. Это конкретное вложение все еще недопустимо в HTML5. Я бы сказал, что HTML5 больше не использует термины «блочные и встроенные элементы». Теперь они классифицируются по их логической роли, а не по внешнему виду.
что в данном контексте означает незаконное? @KonradRudolph
@Honey В нарушение правил, изложенных в спецификации, недействителен. Это означает, что нет никакой гарантии, что клиенты обработают его правильно.
Вы абсолютно можете использовать div и span семантически, если вы предоставите атрибут role с одной из стандартных неабстрактных ролей aria в качестве значения. Обычно предпочтительно использовать правильный семантический элемент HTML, но есть некоторые роли, которые (пока) не имеют соответствующего элемента HTML, например toolbar. Есть также некоторая семантика HTML, не имеющая соответствующих ролей (например, <dl>). Многие семантические элементы, появившиеся в HTML5, начали свою жизнь как атрибуты ролей, так что вы можете утверждать, что использование чего-то вроде <div role = "toolbar"> семантически опережает игру.
Для тех, кому интересно узнать о ролях ARIA, обсуждаемых в Комментарий от brennayoung, см. Спецификацию W3C: Доступные полнофункциональные интернет-приложения (WAI-ARIA) 1.0, раздел 5. Модель для подражания.
Могу ли я быть арестован за использование <span><div></div></span>?
@PhaniRithvij Большинство браузеров выдают предупреждение.
@ ChrisMarasti-Georg Браузеры просто не будут отображать его так, как вы хотите, и он не сможет выполнить проверка w3c.
@ ChrisMarasti-Georg Вот пример.
Как упоминалось в других ответах, по умолчанию div будет отображаться как блочный элемент, а span будет отображаться встроенным в его контексте. Но ни то, ни другое не имеет смысловой ценности; они существуют, чтобы позволить вам применить стиль и идентичность к любому заданному фрагменту контента. Используя стили, вы можете заставить div действовать как span и наоборот.
Один из полезных стилей для div - inline-block.
Примеры:
Я успешно использовал inline-block в игровых веб-проектах.
Если бы они не имели смысловой ценности, был бы только один из них. Один предназначен для разделения уровня блока, другой - встроенного диапазона.
Настоящая важная разница уже упоминается в ответе Криса. Однако последствия будут очевидны не для всех.
В качестве встроенного элемента <span> может содержать только другие встроенные элементы. Следовательно, следующий код неверен:
<span><p>This is a paragraph</p></span>
Приведенный выше код недействителен. Чтобы обернуть элементы уровня блока, необходимо использовать другой элемент уровня блока (например, <div>). С другой стороны, <div> можно использовать только в тех местах, где разрешены элементы блочного уровня.
Более того, эти правила зафиксированы в (X) HTML, и они нет изменяются присутствием правил CSS! Значит, следующие коды также неверны!
<span style = "display: block"><p>Still wrong</p></span>
<span><p style = "display: inline">Just as wrong</p></span>
@Faizan Как это к вам относится? Это также неправильно: не каждый браузер дает одинаковые результаты для этой разметки. В зависимости от используемого типа документа (и, опять же, браузера) это может даже не работать, а скорее приведет к ошибке проверки.
Я вижу, что некоторые браузеры достаточно эффективны, чтобы запускать недействительный код. вот почему он побежал. Можете ли вы порекомендовать мне хороший валидатор для HTML?
«Будьте консервативными в том, что вы делаете, и либеральными в том, что вы принимаете» en.wikipedia.org/wiki/Robustness_principle
Добро пожаловать в столовую. Браузеры, использующие недействительный HTML, являются причиной того, что сильно оптимизированные, но придирчивые парсеры HTML не являются нормой. Каждый заслуживающий внимания браузер (то есть совместимый с «HTML») использует некоторую внутреннюю библиотеку типа «суп», чтобы сделать его приемлемым.
Я бы сказал, что если вы немного знаете испанский, посмотрите эта страница, где это правильно объяснено.
Однако быстрое определение будет заключаться в том, что div предназначен для разделения секций, а span - для применения какого-либо стиля к элементу в другом блочном элементе, таком как div.
Не нужно знать испанский, английская версия - <span> - HTML | MDN.
Для полноты картины предлагаю вам подумать об этом так:
<p> - это абзац, <li> - это элемент списка и т. д., И мы должны использовать правильный тег для правильной цели - не как в старые времена. когда мы использовали отступ с помощью <blockquote>, независимо от того, было ли содержимое цитатой или нет.<div> и <span>, потому что в противном случае люди вернулись бы к злоупотреблению элементами, которые действительно имеют значение.Это правильное объяснение. Интересно, почему это не было принято в качестве ответа.
потому что это слишком далеко на странице
То, что хороший ответ не был принят, не означает, что вы не можете проголосовать за него. +1 за полезное разъяснение.
Приятно знать, но он не отвечает на исходный вопрос, поскольку не объясняет различия между элементами div и span.
Div - это блочный элемент, а span - это встроенный элемент, и его ширина зависит от его содержимого, где div не
Здесь уже есть хорошие подробные ответы, но нет наглядных примеров, поэтому вот небольшая иллюстрация:

<div>This is a div.</div>
<div>This is a div.</div>
<div>This is a div.</div>
<span>This is a span.</span>
<span>This is a span.</span>
<span>This is a span.</span><div> - это блочный тег, а <span> - встроенный тег.
Они по-разному влияют на макет, даже без CSS! Я впервые это вижу!
Спасибо, я поддерживаю этот ответ, потому что он очень быстро отвечает, что у div есть следующая строка
спасибо, что объяснили новичкам вроде меня наглядно :-)
В HTML есть теги, которые добавляют к содержимому структуру или семантику. Например, тег <p> используется для идентификации абзаца. Другой пример - тег <ol> для упорядоченного списка.
Когда в HTML нет подходящего тега, как показано выше, обычно прибегают к тегам <div> и <span>.
Тег <div> используется для идентификации раздела / раздела на уровне блока документа, у которого есть разрыв строки как до, так и после него.
Примерами использования тегов div являются заголовки, нижние колонтитулы, элементы навигации и т. д. Однако в HTML 5 эти теги уже предусмотрены.
Тег <span> используется для обозначения встроенного раздела / раздела документа.
Например, тег span можно использовать для добавления встроенных пиктограмм к элементу.
Значение «блочного элемента» подразумевается, но никогда не указывается явно. Если игнорировать всю теорию (теория - это хорошо), то следующее сравнение будет прагматичным. Последующий:
<p>This paragraph <span>has</span> a span.</p>
<p>This paragraph <div>has</div> a div.</p>
производит:
This paragraph has a span.
This paragraph
has
a div.
Это показывает, что не только должен и div нет могут использоваться встроенными, это просто не даст желаемого эффекта.
Просто хотел добавить исторический контекст к тому, как возникли span против div.
История span:
On July 3, 1995, Benjamin C. W. Sittler proposes a generic text container tag for applying styles to certain blocks of text. The rendering is neutral except if used in conjunction of a stylesheet. There is a debate around versus about readability, meaning. Bert Bos is mentioning the extensibility nature of the element through the class attribute (with values such as city, person, date, etc.). Paul Prescod is worried that both elements will be abused. He is opposed to text mentionning that "any new element should be on an old one" and adding "If we create a tag with no semantics it can be used anywehere without ever being wrong. We must force authors to properly tag the semantics of their document. We must force editor vendors to make that choice explicit in their interfaces."
Из проекта RFC, который вводит span:
First, a generic con- tainer is needed to carry the LANG and BIDI attributes in cases where no other element is appropriate; the SPAN ele- ment is introduced for that purpose.
История div:
DIV elements can be used to structure HTML documents as a hierarchy of divisions.
...
CENTER was introduced by Netscape before they added support for the HTML 3.0 DIV element. It is retained in HTML 3.2 on account of its widespread deployment.
Короче говоря, оба элемента возникли из-за потребности в более семантически универсальном контейнере. Span был предложен как более общая замена элемента <text> для стилизации текста. Div был предложен как общий способ разделения страниц и имел дополнительное преимущество в виде замены тега <center> для выравнивания содержимого по центру. Div всегда был блочным элементом из-за его истории как разделителя страниц. Span всегда был встроенным элементом, потому что его первоначальная цель заключалась в стилизации текста, а сегодня div и span стали универсальными элементами со свойствами блока по умолчанию и встроенного отображения соответственно.
Помните, что в основном и они сами тоже не выполняют никаких функций. Они специфичны для нет в отношении функциональности просто по их тегам.
Их можно настроить только с помощью CSS.
Теперь, что касается вашего вопроса:
Тег SPAN вместе с некоторыми стилями будет полезен при удерживании внутри строки, например, в абзаце в html. Это своего рода уровень строки или уровень оператора в HTML.
Пример:
<p>Am writing<span class = "time">this answer</span> in my free time of my day.</p>
Функциональность тега DIV, как уже говорилось, может быть видна только при наличии стиля, может содержать большие фрагменты HTML-кода.
DIV - уровень блока
Пример:
<div class = "large-time">
<p>Am writing <span class = "time"> this answer</span> in my free time of my day.
</p>
</div>
У обоих есть свое время и случай, когда их следует использовать, в зависимости от ваших требований.
Надеюсь, ответ ясен. Спасибо.
Все просто и понятно.
span не влияет на макет, потому что он встроенный (in line (не следует путать, потому что вещи могут быть обернуты))div влияет на макет, содержимое внутри отображается в новой строке (block element), когда элемент, который вы хотите добавить, не имеет особого семантического значения, и вы хотите, чтобы он отображался в новой строке, используйте <div>.
div можно сделать встроенными (display: inline;) и наоборот для диапазона, но это лучшее объяснение. Это теги-оболочки, span обычно используется для предложений или выделения текста, div для разделов.