Первый вопрос:
Внутри блока, такого как <dd>
или <td>
или <li>
, правильно ли я говорю, что одно или оба из следующих были бы нормальными и правильными?
<td>
An introductory sentence as a text node.
<p>A further sentence as a paragraph.</p>
</td>
и/или
<td>
<p>An introductory sentence as a paragraph.</p>
<p>A further sentence as a paragraph.</p>
</td>
Второй вопрос:
Предполагая, что так, какой CSS я могу использовать, чтобы гарантировать, что в обоих случаях есть разница между двумя предложениями, но не до первого предложения?
Моя проблема в том, что если я сделаю что-то вроде...
td > p { margin-top: 1em; }
... это правильно работает, когда первое предложение представляет собой текст node, но он помещает нежелательное поле между первым предложением и содержащим <td>
, когда первое предложение находится внутри абзаца.
Я хотел бы, чтобы решение работало, даже когда первое предложение содержит встроенный элемент, например <strong>
или <a href="...">
.
В итоге CSS должен создать для обоих двух примеров HTML один и тот же макет:
-- top of <td> here
-- no margin here
-- first sentence here (whether it a text node and/or inside a <p>)
-- margin here, between the two sentences
-- second sentence here inside a <p>
Третий вопрос:
Если верно, что невозможно определить правило CSS, которое создает одинаковый формат для обоих видов HTML, то я предполагаю, что авторы веб-сайтов должны быть осторожны, чтобы всегда использовать только одну разметку HTML?
Если это так, что вы считаете нормальным?
-
Никогда не начинайте блок с другого блока, всегда начинайте его с текста node (тогда вы можете использовать правило CSS, в котором говорится, что первый блок должен иметь
margin-top
); например, выполните следующее:<td> An introductory sentence as a text node. <p>A further sentence as a paragraph.</p> </td>
Это не сработает, если, например, первое, что в блоке должно быть списком, - список имел бы нежелательный
margin-top
:<td> <ul> <li>List item</li> <li>List item</li> </ul> </td>
-
Никогда не запускайте блок с текстом node, всегда начинайте его с блока (тогда вы можете использовать правило CSS, в котором говорится, что первый блок не должен иметь
margin-top
); например, выполните следующее:<td> <p>An introductory sentence as a paragraph.</p> <p>A further sentence as a paragraph.</p> </td>
Это больше разметки, чем я ожидал. Я думаю, что я привык видеть разметку типа
<li>List item</li>
, а не<li><p>List item</p></li>
-
Не стандартизируйте, используйте либо, но добавляйте дополнительные атрибуты
class=
илиstyle=
к блокам по мере необходимости, чтобы добавить или удалить верхнее поле на основе case-case.