我有一个带有每个图像的文本框的轮播,我的客户(对 HTML 一无所知)使用所见即所得的文本编辑器编辑文本框。由此产生的输出类似于你最糟糕的噩梦;就像是:
<div class="carousel-text-container">
<span style="font-size:18pt;">
<span style="font-weight:bold;">
Lorem
<span style="font-size:15pt;">Dolor</span>
</span>
Ipsum
<span style="font-size:19pt;">
<span> </span>
<span>Sit<span>Amet</span></span>
</span>
</span>
</div>
这个网站必须以 3 种不同的尺寸显示以适应较小的显示器,所以我一直在使用 CSS 媒体查询来调整网站的大小。
现在我无法正确调整文本框中的文本大小。我曾尝试使用jQuery.fn.css
获取 中每个元素的字体大小px
,然后将其转换为em
. 然后,通过在font-size:x%
上设置一种声明.carousel-text-container
,我希望这会正确调整所有内容的大小。
不幸的是,字体大小在 ems 中的应用似乎具有递归性质。也就是说,.example
在下面没有正确调整大小,因为它的父级也在影响它
<span style="font-size:2em;">
Something
<span class="example" style="font-size:1.5em;">Else</span>
</span>
如何可靠且精确地调整所有内容的大小,以便为所有子级实现原始字体大小、边距、填充、行高等的真实百分比.carousel-text-container
?
现在,我正在想象某种递归 JavaScript 函数:
var carouselTextBoxEl;
function resizeCarouselTextBox () {
// some example numbers thrown in
var newWidthRatio = .8,
function resizeCarouselTextBoxEl (el, nestedLevelNum) {
nestedLevelNum = nestedLevelNum || 1;
var childElFontSizePxStr = parseFloat(el.css('font-size')), // 16.2984392, for example
// calculate new font size based on
// width ratio of original size site to new size,
// and do something with nestedLevelNum... what's the math with that?
newChildElFontSizePxStr = childElFontSizePxStr * newWidthRatio,
// get children of el, if any
elChildrenEls = el.children(),
i = elChildrenEls.length;
el.css('font-size', newChildElFontSizePxStr + 'em');
while (--i >= 0) {
resizeCarouselTextBoxEl(elChildrenEls[i], nestedLevelNum + 1);
}
}
carouselTextBoxEl.children().each(function () {
resizeCarouselTextBoxEl($(this)
});
}
onSmallerScreen(resizeCarouselTextBox);
更新:我让客户利用调整某些单词的大小以用作标题等,所以我不能简单地将所有内容设置为单一字体大小。
只是一个想法:是否可以放置在 HTML5 画布中并以这种方式拍摄快照和/或调整大小?