Имитация предостережения Сфинкса в необработанном HTML

#html #css #python-sphinx

Вопрос:

Я пытаюсь создать стиль HTML, который форматирует абзац аналогично директиве Sphinx:

введите описание изображения здесь

Я получил довольно хорошее приближение, определив ::before псевдоэлемент, содержащий имя директивы:

 p.todo {
    border-width: 1pt;
    border-color: chocolate;
    padding: 4px 4px 4px 4px !important;
    background-color: bisque;
}

p.todo::before {
    display: block;
    height: 1.6em;
    margin: 8px 2px 8px 2px;
    background-color:firebrick;
    color: white;
    font-weight: bolder;
    content: "  To Do: ";    /* Leading spaces are no-break spaces, 0xA0. */
 

Это содержание…

 <p class="todo">Read the directive, dummy!</p>
 

…производит этот вывод:

введите описание изображения здесь

Есть две вещи, которые я хочу изменить, но не могу понять.

Во-первых, я хочу центрировать текст заголовка по вертикали. Если я использую vertical-align: middle , мой браузер сообщает мне, что я не могу этого сделать, если я не использую display: inline или display: table-cell . Если я использую display: inline , текст располагается после заголовка, а не под ним:

введите описание изображения здесь

Если я использую display: table-ячейка, элемент заголовка сжимается, чтобы соответствовать содержимому:

введите описание изображения здесь

Я искал решения последней проблемы, но все они, похоже, связаны с изменением свойств предыдущей и следующей ячеек таблицы. Поскольку этот элемент на самом деле не является ячейкой таблицы, в нем нет предшествующих и следующих ячеек!

Вторая проблема касается левого и правого полей элемента заголовка. В примерах, которые я показал, с каждой стороны есть 4 пикселя пространства, где виден цвет фона элемента директивы. Я хочу, чтобы заголовок был таким же широким, как и элемент директивы, как в выводе Sphinx. Я могу сделать это, изменив p.todo стиль padding-left и padding-right атрибуты на ноль, но это также уменьшает отступы вокруг текста директивы. Я не могу найти способ расширить элемент заголовка до полей элемента директивы, не позволяя тексту директивы делать то же самое.

A final note: You may be tempted to say, “Figure out how Sphinx does it, and do it the same way.” But Sphinx doesn’t compose a directive with a styled paragraph; it does this:

 <div class="admonition-todo admonition">
    <p class="admonition-title>
        ::before
        Todo
    </p>
    <p> text of admonition </p>
</div>
 

The whole point of this exercise is to get a similar result with HTML that is easy to remember and convenient to type. Doing it the way Sphinx does it isn’t the solution; it is the problem!