Javascript-форум (https://javascript.ru/forum/)
-   (X)HTML/CSS (https://javascript.ru/forum/xhtml-html-css/)
-   -   Размеры шрифта и масштабирование (https://javascript.ru/forum/xhtml-html-css/30110-razmery-shrifta-i-masshtabirovanie.html)

bes 24.07.2012 17:30

Размеры шрифта и масштабирование
 
Как при масштабировании сохранять постоянным размер шрифта внутри блока с height, заданной в %?

Так как, на мой взгляд, средствами CSS данную задачу не решить, использую js.
Но есть два узких места:
1) старые IE масштабируют по-другому, поэтому в них не работает (в IE вообще не работает)
2) управлять размером шрифта приходится через доли высоты (см. закомментированную строчку)

Может кто знает лучше решение?

<body style="margin: 0px; padding: 0px;">
<div id="div" style="position: absolute; top: 0px; left: 0px; width: 100%; height: 10%; background: gray">text</div>
<div style="position: absolute; top: 10%; left: 0px; width: 100%; height: 90%; background: lightgrey">text</div>

<script>
window.onload = function () {
  var div = document.getElementById('div');
  
  function setFontSize() {
    var coords = div.getBoundingClientRect();
    var h = coords.bottom - coords.top; 
    div.style.fontSize = h - parseInt(h/8)+ 'px'; //изменяем размер
  }

  setFontSize();

  window.onresize = function () {
    setFontSize();
  }
  
}
</script>


Через scrollHeight наверное проще (в хроме не работает)
<body style="margin: 0px; padding: 0px;">
<div id="div" style="position: absolute; top: 0px; left: 0px; width: 100%; height: 10%; background: gray">text</div>
<div style="position: absolute; top: 10%; left: 0px; width: 100%; height: 90%; background: lightgrey">text</div>

<script>
window.onload = function () {
  var div = document.getElementById('div');
  
  function setFontSize() {
    var h = div.scrollHeight; 
    div.style.fontSize = h - parseInt(h/8)+ 'px'; //изменяем размер
  }

  setFontSize();

  window.onresize = function () {
    setFontSize();
  }
  
}
</script>

Deff 24.07.2012 18:05

bes,
Мож тупо менять проценты в <style id=Font> #ThisDiv{font-size:98%;}</style> ?
*Щас набросяцо c рекомендацией делать через computedStyle

bes 24.07.2012 19:30

Цитата:

Сообщение от Deff
bes,
Мож тупо менять проценты в <style id=Font> #ThisDiv{font-size:98%;}</style> ?
*Щас набросяцо c рекомендацией делать через computedStyle

Deff, по какому алгоритму их менять?

font-size в % - это % от font-size родителя, а при масштабировании шрифт родителя также масштабируется.
Сам пиксель масштабируется и та полоска в 10%, которая всегда одного размера на экране, при увеличении масштаба занимает всё меньше пикселей.

Deff 24.07.2012 20:00

Цитата:

Сообщение от bes
font-size в % - это % от font-size родителя, а при масштабировании шрифт родителя также масштабируется.
Сам пиксель масштабируется и та полоска в 10%, которая всегда одного размера на экране, при увеличении масштаба занимает всё меньше пикселей.

Ну обернуть все масштабируемые дивы общим чем-то и выставить там конкретную пиксельную цифру - а для конктретного див - менять в своём теге style

bes 24.07.2012 20:29

Цитата:

Сообщение от Deff
Ну обернуть все масштабируемые дивы общим чем-то и выставить там конкретную пиксельную цифру - а для конктретного див - менять в своём теге style

Я и такой вариант пробовал, но пиксель-то масштабируется, поэтому при масштабировании, например, 10px всегда разного размера на экране, а вот полоска в 10% всегда одного.

Deff, и не понятно, что имелось в виду под "менять проценты", надо же как-то рассчитать на сколько менять.

Deff 24.07.2012 20:34

Цитата:

Сообщение от bes
Я и такой вариант пробовал, но пиксель-то масштабируется, поэтому при масштабировании, например, 10px всегда разного размера на экране, а вот полоска в 10% всегда всегда одного.

Ну ти жа в процентах ставить будешь на div ?
а начальный размер вродь как абсолютный на родителе ? (Или ?

bes 24.07.2012 20:51

Цитата:

Сообщение от Deff
Ну ти жа в процентах ставить будешь на div ?
а начальный размер вродь как абсолютный на родителе ? (Или ?

font-size в % не работает, если на родителе font-size в %, а если в px, то мешает масштабирование самих пикселей.

Чёт я уже запутался, можно пример на основе моего примера.

Deff 24.07.2012 21:09

Цитата:

Сообщение от bes
font-size в % не работает, если на родителе font-size в %,

Странно - Вот у мну 7лет как в % шрифт на body и на последующем дочернем блоке (проценты в итоге перемножаются

bes 24.07.2012 21:36

Цитата:

Сообщение от Deff
Странно - Вот у мну 7лет как в % шрифт на body и на последующем дочернем блоке (проценты в итоге перемножаются

здесь пардон :)
Тем не менее вся %-ая цепочка, завязана на текущий размер шрифта документа, то есть на СSS-пиксели (которые масштабируются), а вот высота в процентах по ходу завязана на пиксели устройств, поэтому при масштабировании не изменяется.
Не картинки же со словами вместо самих слов ставить :)

Deff 24.07.2012 22:24

bes,
Ну достаточно просто эти проценты в стиле div - делить на проценты уменьшения масштаба - тады(ксать проценты могут быть дробные - видал и сам ставил до трех знаков после точки)

Тогда вродь размер должен сохраняцо несмотря на первое пиксельное задание

bes 24.07.2012 23:24

Цитата:

Сообщение от Deff
делить на проценты уменьшения масштаба

да, надо покопать в эту сторону (вопрос насколько это кроссбраузерно)


Часовой пояс GMT +3, время: 15:02.