Странность с явными и неявными абзацами

#html #css

#HTML #css

Вопрос:

Я поиграл с HTML и CSS, чтобы посмотреть, смогу ли я создать логотип LaTeX, который будет масштабироваться и окрашиваться вместе с остальным текстом (а не с изображением). Я могу сделать это с помощью встроенного блока, <div> если он не заключен в абзац. Если я добавляю <p> </p> теги и, он ломается. В чем разница между абзацем с явными тегами абзаца и без? Будет ли это что-то исправлено определенными типами документов HTML?

 <!doctype html>
<html>
<head>
<title>Test logos</title>
</head>
<body style="font: 12px Arial,sans-serif;">
1. div inline-block, works fine<br>
So as a helpful reminder, I thought I would gather some helpful information here to
help both veterans of these forums and new users lean how best to use these forums.
Where are the forum rules?
<div style="display: inline-block; position: relative;
 border: 1px solid blue; /* just for debug */
     font-family: Times-New-Roman,serif; height: 2ex; width: 2.30em;">
  <div style="left: 0em; bottom: -0.6ex; position: absolute;">L</div>
  <div style="left: 0.7em; bottom: 0.3ex; position: absolute; font-size: 50%;     
        font-weight: bold;">A</div>
  <div style="left: 0.6em; bottom: -0.6ex; position: absolute;">amp;Tau;</div>
  <div style="left: 1.35em; bottom: -1.25ex; position: absolute; font-size: 80%; 
        font-weight: 600;">amp;Epsilon;</div>
  <div style="left: 1.63em; bottom: -0.6ex; position: absolute; ">amp;Chi;</div>
</div>
rules!
You can find the forum rules via this thread:
Helping Each Other and Keeping Posts Respectful.
<hr>
<p>
2. p div inline-block, div OK, but /p inserted before it, so line break and gap 
        before div<br>
So as a helpful reminder, ...
<div style="display: inline-block; position: relative;
 border: 1px solid blue; 
font-family: Times-New-Roman,serif; height: 2ex; width: 2.30em;">
    << see nested <div>s above >>
</div>
rules!...
</p>
<hr>
3. span inline-block, works fine<br>
So as a helpful reminder, ...
<span style="display: inline-block; position: relative;
border: 1px solid blue; 
    font-family: Times-New-Roman,serif; height: 2ex; width: 2.30em;">
    << see nested <div>s above >>
</span>
rules! ...
<hr>
<p>
4. p span inline-block, block empty, /span and /p inserted after span<br>
So as a helpful reminder, ...
<span style="display: inline-block; position: relative;
 border: 1px solid blue; 
    font-family: Times-New-Roman,serif; height: 2ex; width: 2.30em;">
    << see nested <div>s above >>
</span>
rules! ...
</p>
<hr>
5. span block, block OK, but has line breaks before and after<br>
So as a helpful reminder, ...
<span style="display: block; position: relative;
 border: 1px solid blue; 
font-family: Times-New-Roman,serif; height: 2ex; width: 2.30em;">
    << see nested <div>s above >>
</span>
rules! ...
<hr>
<p>
    6. p span block, block empty, /span /p inserted, divs elsewhere, break 
    before/after block<br>
So as a helpful reminder, ...
<span style="display: block; position: relative;
 border: 1px solid blue; 
font-family: Times-New-Roman,serif; height: 2ex; width: 2.30em;">
    << see nested <div>s above >>
</span>
rules! ...
</p>
</body>
</html>
 

Первый и третий случаи (без <p> тегов), похоже, работают нормально. Третий имеет divs внутри диапазона, но, похоже, принимает его. Четвертый и шестой случаи ( <span> блочный или встроенный блок, с <p> ) получают </span> и </p> автоматически вставляются, поэтому содержимое span является пустым, а divs перемещаются куда-то еще. Второй случай идентичен первому, за исключением <p> , и a </p> автоматически вставляется (вместе с полем) перед блоком логотипа LaTeX . Пятый случай похож на третий, за исключением того, что это блок, а не встроенный блок (оба диапазона), и разрывы вставляются до и после блока логотипа.

FF30 (моя основная платформа), Chrome и IE11 ведут себя практически одинаково. В двух словах, почему добавление тегов абзаца так сильно меняет поведение? Кажется, это больше, чем простой блочный элемент с верхним и нижним полями!

Ответ №1:

В основном, с чем вы сталкиваетесь, так это с тем фактом, что <div> теги не разрешены внутри <p> тегов. И внутри тегов должны быть только встроенные элементы <span> . Разные браузеры могут интерпретировать это так, как вы хотели поставить </p> и вставить различные теги для вас. Кроме display:block того, в этом случае он будет занимать ширину содержащего элемента <body> , поэтому есть то, что выглядит как разрывы строк.

Взгляните на спецификацию, группирующую элементы, строки и абзацы. (Ниже приведены цитаты из этих разделов.)

Элемент P представляет абзац. Он не может содержать элементы уровня блока (включая сам P).

и

  <!ELEMENT SPAN - - (%inline;)*    
 

Комментарии:

1. Значит, неявные абзацы не рассматриваются как абзацы (ограниченные элементы уровня блока, которые не могут быть родительскими для блоков)? А как насчет divs в пределах диапазона? Похоже, это сработало — или мне просто повезло с этим? Когда [обычно] встроенный элемент, такой как span, объявляется display=block или inline-block , меняет ли это то, что разрешено для дочерних элементов, или по-прежнему применяются правила по умолчанию? Итак, вопрос на 64 доллара заключается в том, возможно ли сделать то, чего я пытаюсь достичь, то есть разместить текст в другом встроенном потоке? Можно ли настроить интервалы для принятия позиционирования?

2. @phil-perry Вы, вероятно, увидите различия в разных браузерах с разделениями в промежутке. Вы можете заставить это работать, но правила по-прежнему применяются, и разные браузеры (например, более старый IE) иногда интерпретируют правила немного по-разному. Итак, суть в том, что да, вы можете. Возможно, потребуется немного повозиться, но это вполне возможно, как вы видели в своих 1-м и 3-м тестовых примерах.

Ответ №2:

типы абзацев:

  1. физическое против концептуального
  2. явный против неявного
  3. дедуктивный, индуктивный гибрид

подведение итогов написания рефератов:

  1. описательная аннотация
  2. информативный реферат
  3. сочетание описательного и информационного

Комментарии:

1. Это должен быть либо комментарий, либо вы должны расширить каждый раздел.