我有一个容器,它的宽度和高度是以百分比为单位的,因此会根据外部因素进行缩放。我希望容器内的字体大小与容器大小成比例地保持不变。是否有一种好的CSS方法可以实现这一点?使用font-size: x%
只会根据原始字体大小(即100%)缩放字体。
我有一个容器,它的宽度和高度是以百分比为单位的,因此会根据外部因素进行缩放。我希望容器内的字体大小与容器大小成比例地保持不变。是否有一种好的CSS方法可以实现这一点?使用font-size: x%
只会根据原始字体大小(即100%)缩放字体。
如果您想将字体大小设置为视口宽度的百分比,请使用vw
单位:
#mydiv { font-size: 5vw; }
vw
与我需要的相反,结果找到了这个答案......并没有回答我的问题。:( - vsyncvw
是相对于视口而不是容器大小的。在许多情况下可能很有用,但对我来说使用SVG效果更佳。 - zelanix另一种js替代方案:
fontsize = function () {
var fontSize = $("#container").width() * 0.10; // 10% of container width
$("#container h1").css('font-size', fontSize);
};
$(window).resize(fontsize);
$(document).ready(fontsize);
或者如torazaburo的回答所述,您可以使用SVG。我编写了一个简单的示例作为概念验证:
<div id="container">
<svg width="100%" height="100%" viewBox="0 0 13 15">
<text x="0" y="13">X</text>
</svg>
</div>
你也许可以使用CSS3的计算方式实现这个功能,不过更安全可靠的方法是使用JavaScript。
以下是一个示例:http://jsfiddle.net/8TrTU/
使用JavaScript可以改变文本的高度,然后将同样的计算绑定到调整大小事件上,在用户调整大小时缩放文本,或在您允许调整元素大小的方式中采取其他方法。
window.onresize = function(event) { yourFunctionHere(); };
这样,如果用户在页面加载后决定调整大小,您的字体将适当地调整大小。 - Henry Howeson我在一些项目中使用了Fittext,它似乎是解决此类问题的好方法。
FitText使字体大小具有灵活性。在您的流动或响应式布局中使用此插件,以实现可缩放的标题,填充父元素的宽度。
document.body.setScaledFont = function(f) {
var s = this.offsetWidth, fs = s * f;
this.style.fontSize = fs + '%';
return this
};
然后将所有文档子元素的字体大小转换为em或%。
接下来,将以下内容添加到您的代码中以设置基础字体大小。
document.body.setScaledFont(0.35);
window.onresize = function() {
document.body.setScaledFont(0.35);
}
var TextFit = function(){
var container = $('.container');
container.each(function(){
var container_width = $(this).width(),
width_offset = parseInt($(this).data('width-offset')),
font_container = $(this).find('.font-container');
if ( width_offset > 0 ) {
container_width -= width_offset;
}
font_container.each(function(){
var font_container_width = $(this).width(),
font_size = parseFloat( $(this).css('font-size') );
var diff = Math.max(container_width, font_container_width) - Math.min(container_width, font_container_width);
var diff_percentage = Math.round( ( diff / Math.max(container_width, font_container_width) ) * 100 );
if (diff_percentage !== 0){
if ( container_width > font_container_width ) {
new_font_size = font_size + Math.round( ( font_size / 100 ) * diff_percentage );
} else if ( container_width < font_container_width ) {
new_font_size = font_size - Math.round( ( font_size / 100 ) * diff_percentage );
}
}
$(this).css('font-size', new_font_size + 'px');
});
});
}
$(function(){
TextFit();
$(window).resize(function(){
TextFit();
});
});
.container {
width:341px;
height:341px;
background-color:#000;
padding:20px;
}
.font-container {
font-size:131px;
text-align:center;
color:#fff;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div class="container" data-width-offset="10">
<span class="font-container">£5000</span>
</div>
<full-width-text>Lorem Ipsum</full-width-text>
我已经在这个答案中详细解释了如何使用vw
来控制特定容器的大小,因此我不会在这里重复我的答案。
总之,这实际上是一个关于如何控制容器相对于视口的大小的问题,然后根据容器的大小计算出正确的vw
大小,考虑到如果某些东西被动态调整大小需要发生什么。
因此,如果您想要在100%视口宽度的容器中使用5vw
大小,那么在视口宽度的75%
处,您可能希望使用(5vw * .75) = 3.75vw
。
您也可以尝试这种纯CSS方法:
font-size: calc(100% - 0.3em);