Вычислить пустое вертикальное пространство в тексте
У меня есть диапазон с CSS:
font-height = 120px;
height = 120px;
line-height = 120px;
Текст внутри него не занимает полную высоту (120 пикселей) пролета.
Есть ли способ вычислить смещение текста внутри диапазона от верхней и нижней границ?
Или это способ сделать текст касанием верхней и нижней границ охватывающего тега span?
jsFiddle Ссылка
для справки.
Ответы
Ответ 1
UPDATE
Я написал немного script для автоматической корректировки размера шрифта, все, что вам нужно сделать, - это вручную отрегулировать соотношение между общей высотой размера шрифта и общим размером верхнего шрифта.
Проверьте script: http://jsfiddle.net/jTpfT/32/
JS:
/**
* Calculate the ratios by hand and store in this variable form:
* myfontlowercase + _upper_case_ratio
*/
var georgia_upper_case_ratio = 1.44
var arial_upper_case_ratio = 1.32
var times_upper_case_ratio = 1.48
/********************************************/
$(document).ready(function() {
$(".fitTextHeight").each(function(){
//Get font family
var ff = $(this).css('font-family').toLowerCase().split('\'').join('').split(' ').join('');
//get ratio
var miRatio = 1;
try {miRatio = eval(ff+ "_upper_case_ratio"); } catch (e) { }
//Get boxSize
var boxSize = Number ($(this).css('height').split('px')[0]);
//Calculate newSize & apply
var newCssFontSize = boxSize * miRatio
$(this).css('font-size', newCssFontSize );
$(this).css('line-height', boxSize + "px" );
})
});
Ответ 2
Это визуально делает это без javascript:
#abc {
margin: none;
border: dotted 1px red;
padding: 0;
height: 120px;
font-size:180px;
line-height:120px;
display:inline-block;
}
Я думаю, вам нужно использовать display:inline-block;
и отрегулировать размер шрифта в соответствии с фактическим шрифтом, который вы используете.
JsFiddle здесь
Ответ 3
Текст уже принимает 100% (120 пикселей) высоты пролета, вы забываете другие символы, такие как "j" или "Á".
![enter image description here]()
Попробуйте этот html:
<span id="abc">jÁ / ABC</span>
и этот css
#abc {
margin: none;
border: dotted 1px red;
padding: 0;
display:inline-block;
/*****120px*****/
height: 120px;
font-size:120px;
line-height:120px;
}
Тест: http://jsfiddle.net/jTpfT/17/
Ответ 4
Что касается браузера, то разрыв, который вы видите в вашей ссылке jsFiddle, отсутствует. Разрыв является частью шрифта. Например, если вы помещаете нижний регистр g
в свой пример, то нижний пробел исчезает, и диапазон идеально подходит для текста.
Это означает, что нет возможности автоматически изменять размер текста, чтобы устранить пробел, поскольку браузер ничего не знает о пороге, поэтому потребуется ручная/визуальная пробная версия и ошибка, и эта техника не будет очень успешной в разных браузерах.
Я вижу только 1 реальное решение этой проблемы, предполагая, что проблема устраняет этот пробел. Решение заключается в использовании изображения.
Если вы не хотите создавать изображение в фотошопе, тогда изображение может быть создано в интерфейсе на холсте или в бэкэнде через библиотеку GD в PHP. Динамически создавая изображение, вы можете затем зацикливать пиксельные данные, чтобы легко удалить любые пробелы вокруг текста.
В качестве побочной точки используется технология замены шрифтов, например cufon или typeface.js может предоставить текст без пробела с тонкой настройкой.
Ответ 5
Способ сделать это - установить line-height
относительно font-size
. После этого вам нужно использовать display:inline-block
. Это не идеально, вам придется учитывать отдельные шрифты, которые вы используете. Один из способов управления вариациями - использовать text-transform:uppercase
.
Здесь код:
#abc {
font-size: 100px;
line-height: 68.5%;
border: dotted 1px red;
text-transform:uppercase;
display:inline-block;
}
Вы можете изменить размер шрифта любого размера, который вам нравится - он все равно будет работать. Если вы используете другой шрифт, просто измените относительные проценты длины строки.