Относительные размеры шрифта сложнее для дочерних элементов? - PullRequest
10 голосов
/ 12 января 2012

Я изучаю CSS и читаю вопросы об Относительных и Абсолютных размерах шрифтов в StackOverflow. Я наткнулся на две темы.


1. В одной теме ( Размер шрифта CSS: относительные и абсолютные значения. Что использовать? ), один из ответов на самом деле является вопросом, на который не был дан ответ: [QUOTE]

Вопрос, многие здесь говорят, что Pt предназначены только для печати. Но разве не приятно иметь простую возможность быстро сделать желаемый размер текста, не помня, какой DIV имеет значение Em или%. Например, когда у вас есть:

<body>
 <div id="box1">
   test text sample1
   <div id="box2">
     test text sample2
     <div id="box3">
       test text sample3
        <div id="box4">
          test text sample4
        </div>
     </div>
   </div>
</div>

Я знаю, что это какая-то странная структура, но, скажем, макету нужна такая структура для графических целей и наслоения изображений CSS. Поэтому я хотел бы сделать box1 font = 100%, box2 = 1.2em. box3 = .8em и box4 = 1.6em

Теперь проблема в том, что Em из коробки 1 также передает всем своим дочерним элементам, поправьте меня, если я ошибаюсь, так что это означает, что box2 не точно 1.2em, и к тому времени, когда мы доберемся до размера шрифта в коробке 4 это действительно трудно сказать, что это такое. Принимая во внимание, что когда мы используем Pt или Px, он остается таким, каким мы хотим, чтобы он оставался.

Однако размеры Px негибкие, и мне нравится увеличивать шрифты в меню моего браузера, когда я сижу далеко от экрана. Посмотрим правде в глаза, это удобно. Так что размер Px отсутствует. Так почему бы не использовать Pt? Насколько велика разница в браузере?


2. Другой поток имеет тот же вопрос ( Сложные относительные размеры шрифта: чистый способ принять размер шрифта дочернего элемента, а не родительского элемента ) с числами, вычисления - - более объяснительно, без правильного ответа :

Например, если у меня есть:

td { font-size: 1.3em }

h2 { font-size: 2em }
h3 { font-size: 1.6em }
p { font-size: 1.2 }

и у меня есть заголовки / абзацы внутри ячеек таблицы, я знаю, что могу избежать компоновки размеров шрифта следующим образом:

td h2, td h3, td p { font-size: 1em }

, что привело бы к тому, что заголовки / абзацы в ячейках моей таблицы имели размер шрифта 1,3em (размер шрифта td).

Но я ищу хороший, чистый способ для каждого дочернего элемента иметь свой оригинальный размер шрифта, а не родительский.

Я бы очень хотел избежать следующих действий (и, конечно, я бы хотел избежать использования px):

td h2 { font-size: 1.54em }  // 1.3 x 1.54 ~ 2
td h3 { font-size: 1.23em }  // 1.3 x 1.23 ~ 1.6
td p { font-size: 0.92em }  // 1.3 x 0.92 ~ 1.2

Для тех, кто знаком с LESS, я использую это и думаю, что я должен быть в состоянии использовать это, чтобы сделать вычисления для меня, например. используя аксессоры:

td h2 { font-size: h2['font-size'] / td['font-size'] }

Это, по крайней мере, будет использовать исходные значения для выполнения расчетов, но выглядит так же неуклюже, как и выше, и, кроме того, кажется, что LESS больше не поддерживает методы доступа.

Это кажется таким простым в концепции, я чувствую, что ответ смотрит мне в лицо, но я некоторое время бился головой об этом и нигде не могу найти ответ.

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


Теперь может быть очевидно, какой у меня вопрос ... Есть ли лучший способ использовать относительные размеры шрифта (или любой относительный размер - например, ширину, высоту и т. Д.) Без дочернего элемента? элементы, на которые воздействует родительский элемент?

Ответы [ 4 ]

2 голосов
/ 12 января 2012

Краткий ответ - нет, это не так, как работает CSS.

Более длинный ответ - CSS, как вы, возможно, знаете, означает Каскадные Таблицы стилей. Частью этого каскада является то, что дочерние элементы наследуют свойства своих родительских элементов.

Техника, которую я видел у многих людей (включая Дана Седерхольма в своей книге Пуленепробиваемый CSS , которую я рекомендую), заключается в создании базового размера шрифта, эквивалентного 10px вместо того, чтобы иметь дело с типичным базовым размером шрифта по умолчанию 16 пикселей. Я не знаю, насколько это могло бы помочь в разработке вашего примера, но, вероятно, в целом это помогло бы работать со шрифтами на основе em.

Я также нашел эту статью о различиях между размером шрифта в процентах и ​​на основе em. Это немного старое, но сравнение между процентами и em все еще в силе.

Тем не менее, современные браузеры масштабируют всю страницу, поэтому, если вам не требуется поддержка IE6, вы можете избежать использования шрифтов в пикселях, особенно если ваши проекты действительно должны быть такими извилистыми (потому что если вы ' повторно вложив столько элементов и имеющих столько разных размеров шрифта, возможно, есть лучший способ создать его).

Кроме того, как сказал @ JukkaK.Korpela, таблицы обычно не содержат тегов заголовков, для этого предназначены элементы

и .
1 голос
/ 09 августа 2013

Поле два равно ровно 1,2em, но это не обязательно 1,2 rem .

rem почти так же, как em, но это часть css3, и это ... (из документации)

равно вычисленному значению 'font-size' для корневого элемента.

Если указано в свойстве «font-size» корневого элемента, Единицы rem относятся к первоначальной стоимости имущества.

1 голос
/ 12 января 2012

Нет, нет лучшего способа использовать адаптивные (относительные) размеры шрифта, чем устанавливать их относительно размера шрифта родительского элемента. Причина в том, что они были разработаны для такой работы. Если это означает слишком много вычислений в авторской разработке, то, возможно, настоящая причина в том, что общий дизайн слишком сложен или вы используете слишком много размеров шрифта.

Обычно таблицы не содержат заголовков, например, если вы не используете таблицы для разметки. Некоторые люди могут сказать, что макет таблицы является их проблемой, но я бы сказал, что проблема заключается в установке размера шрифта для таблицы. Вам не нужно этого делать; Вы можете просто установить размеры шрифта для различных элементов внутри таблицы,

0 голосов
/ 27 июля 2017

Что касается размера шрифта, я могу представить себе один из способов - указать размер шрифта как можно ближе к элементу, для которого вы хотите установить размер шрифта, насколько это возможно, а также вам может потребоваться ввести некоторые другие элементы, чтобы - пройти правило вложенности.

Например, для рассматриваемого кода, для каждого фрагмента текста оберните его диапазоном, а затем установите размер шрифта для интервалов. Так как эти промежутки не являются вложенными, все размеры шрифта относятся к box1, вот результат https://jsfiddle.net/davenkin/pLype465/:

<div id="box1">
<span id="span1">test text sample1</span>
<div id="box2">
    <span id="span2">test text sample2</span>
    <div id="box3">
        <span id="span3">test text sample3</span>
        <div id="box4">
            <span id="span4">test text sample4</span>
        </div>
    </div>
</div>

...