#css #css-position #vertical-alignment
#css #css-позиция #выравнивание по вертикали
Вопрос:
У меня возникли некоторые проблемы с выравниванием некоторого текста. Мне нужны два столбца, один с цифрами, а другой с текстом, вот так:
1 Запись один
2 Запись два
3 Запись три
4 Запись пять
5 Запись шесть
Левый столбец — Georgia, а правый — Arial (размеры шрифта немного отличаются). Я мог бы создать контейнер div для каждой строки и абсолютно точно расположить количество и текстовые абзацы так, чтобы они были вверху или внизу от них, что отлично работает. Проблема в том, что это означает, что я должен присвоить каждой строке фиксированную высоту, чтобы она отображалась правильно, что вызывает проблему, если текст должен занимать более одной строки (что вполне может произойти, поскольку текстовые записи являются динамическими).
Я хочу сделать это без использования таблицы и без использования абсолютного позиционирования, чтобы отдельные текстовые записи могли занимать более одной строки (и были совместимы с несколькими браузерами).
Комментарии:
1. Почему вы не хотите использовать таблицу для этого?
2. по какой-либо причине вы не используете
<ol>
для этого, нужен ли числам собственный элемент?3. @AllisonC Потому что это упорядоченный список, а не таблица.
Ответ №1:
Согласно моему комментарию, я думаю, что лучшим элементом для этой работы является упорядоченный список.
ol {
font-family: georgia, serif;
font-size: 16px;
font-weight: bold;
}
ol li span {
font-family: arial, sans-serif;
font-weight: normal;
font-size: 12px;
}
<ol>
<li><span>Entry one<br>text on another line</span></li>
<li><span>Entry two</span></li>
<li><span>Entry three</span></li>
<li><span>Entry five</span></li>
<li><span>Entry six</span></li>
</ol>
С промежутком, позволяющим изменять font-family
между «маркерами» списка и содержимым внутри, это могут быть разделы, если у вас есть содержимое блока.
Комментарии:
1. Ого! Я не уверен, как я это пропустил, конечно, это упорядоченный список, который отлично работает 🙂 Из интереса, если я хочу, чтобы маркеры / цифры были встроены, но я не хочу, чтобы текст проходил под ними, правильно ли использовать padding-left: 1.5em; list-style-position: outside; или есть более чистый способ? Кроме того, существует ли какой-либо кроссбраузерный способ удаления полной остановки после каждого числа? Большое спасибо за вашу помощь, мы ее очень ценим 🙂
2. @deshg: Относительно
"is there any cross browser way of removing the fullstop after each number"
— какие браузеры вам нужно поддерживать?3. @thirtydot: Как можно больше браузеров, в идеале все, но я понимаю, что это большая просьба для большинства вещей в наши дни!!
4. @thirtydot и @claresuzy, я только что понял, что при использовании приведенного выше кода межстрочный интервал текста очень большой, если текст для одного маркера занимает 2 или более строк (я полагаю, 17 пикселей, чтобы соответствовать старому?). Есть ли какой-либо способ уменьшить межстрочный интервал только для текста, поскольку это не имеет никакого эффекта, когда я устанавливаю его в span, и если я устанавливаю его в li, то в firefox интервал намного больше, чем в любом другом браузере (что необычно). Я был бы очень признателен, если бы у вас были какие-либо идеи, почему это может быть? Большое спасибо
Ответ №2:
Вы должны просто использовать ol
элемент с соответствующим стилем, что-то вроде этого:
Смотрите: http://jsfiddle.net/tPjQR
Если вы хотите использовать разные стили для числа и содержимого списка, вам нужно обернуть содержимое каждого из них li
во что-то вроде span
. Лучшего способа просто не существует.
ol {
font-family: Georgia, serif;
}
ol span {
font-family: Arial, sans-serif;
font-size: 17px
}
<ol>
<li><span>Entry one</span></li>
<li><span>Entry two</span></li>
<li><span>Entry three</span></li>
<li><span>Entry five</span></li>
<li><span>Entry six</span></li>
<li><span>Entry Long Long Long Long Long Long Long Long Long Long Long Long Long Long Long Long Long</span></li>
</ol>