根据div大小调整字体大小

Nic*_*nto 20 css responsive-design

我做了这个jsfiddle

html:

<div id="launchmain" >
<div id="box1"></div>
<div id="box2"></div>
<div id="box3"></div>
<div id="box4"></div>
    <div id ="maininvite">
        <h2> header</h2>
        <p>not a lot of text here but still overflowing</p>
    </div>
<div id="box6"></div>
<div id="box7"></div>
<div id="box8"></div>
<div id="box9"></div>
</div>
Run Code Online (Sandbox Code Playgroud)

用css:

html, body {
 height: 100%;
 width: 100%;    
}
#launchmain {
 width: 55%;
 display: inline-block;
 position: relative;
    top:10%;
    left:25%;
}
#launchmain:after {
    padding-top: 79.26%; 
    display: block;
    content: '';
    margin-top: 10px;
}
#box1
{
    border: 1px solid #000000;

    position: absolute;
    width:25.37%; 
    height:21.88%            
}
#box2
{
    border: 1px solid #000000;
    width: 48.48%;
    height:21.88%;
    position: absolute;
    left:25.64%
}
#box3
{
    border: 1px solid #000000;
    width:25.37%; 
    height:21.88%;
    position: absolute;
    left:74.39%;
}
#box4
{
    border: 1px solid #000000;
    width:33.235%; 
    height:53.84%;
    position: absolute;
    top:22.07%;
}
#maininvite
{
    border: 1px solid #000000;
    width:33.53%; 
    height:53.84%;
    position: absolute;
    top:22.07%;
    left: 33.235%;
}
#box6
{
    border: 1px solid #000000;
    width:33.235%; 
    height:53.84%;
    position: absolute;
    top:22.07%;
    left: 66.765%;
}
#box7
{
    border: 1px solid #000000;
   width:25.37%; 
    height:21.88% ;
    position: absolute;
    top:76.2%;

}
#box8
{
    border: 1px solid #000000;
  width: 48.48%;
    height:21.88%;
    position: absolute;
   left:25.64%;
    top:76.2%;
}
#box9
{
    border: 1px solid #000000;
    width:25.37%; 
    height:21.88% ;
    position: absolute;
    top:76.2%;
    left:74.39%;
}
#maininvite h2{

    font-size: 180%;
}

p{
    position: relative;
    font-size: 80%;
}
?
Run Code Online (Sandbox Code Playgroud)

它由9个盒子组成,中间有文本.我已经把它做成了盒子,所以它们会调整大小,屏幕调整大小,所以它会一直保持在同一个地方.

但是,即使我使用百分比,文本也不会调整大小.

  1. 如何调整文本大小以使其始终与整个页面的比例相同?
  2. 这是处理多种分辨率的合适解决方案吗?或者我应该在css中进行多次@media检查并为每种媒体类型设置多种布局?

hum*_*ace 65

我的答案不需要Javascript,只依赖于CSS3(在大多数现代浏览器中都可用).如果设计不依赖于Javascript,我个人非常喜欢它.

我的回答是"纯CSS3,不需要Javascript" -solution:

可以在这里看到的解决方案(http://jsfiddle.net/uNF3Z/16/)使用CSS样式的以下添加(使用@mediaCSS3 的查询)

@media all and (min-width: 50px)   {  body  { font-size:0.1em;  } }
@media all and (min-width: 100px)  {  body  { font-size:0.2em;  } }
@media all and (min-width: 200px)  {  body  { font-size:0.4em;  } }
@media all and (min-width: 300px)  {  body  { font-size:0.6em;  } }
@media all and (min-width: 400px)  {  body  { font-size:0.8em;  } }
@media all and (min-width: 500px)  {  body  { font-size:1.0em;  } }
@media all and (min-width: 600px)  {  body  { font-size:1.2em;  } }
@media all and (min-width: 700px)  {  body  { font-size:1.4em;  } }
@media all and (min-width: 800px)  {  body  { font-size:1.6em;  } }
@media all and (min-width: 900px)  {  body  { font-size:1.8em;  } }
@media all and (min-width: 1000px) {  body  { font-size:2.0em;  } }
@media all and (min-width: 1100px) {  body  { font-size:2.2em;  } }
@media all and (min-width: 1200px) {  body  { font-size:2.4em;  } }
@media all and (min-width: 1300px) {  body  { font-size:2.6em;  } }
@media all and (min-width: 1400px) {  body  { font-size:2.8em;  } }
@media all and (min-width: 1500px) {  body  { font-size:3.0em;  } }
@media all and (min-width: 1500px) {  body  { font-size:3.2em;  } }
@media all and (min-width: 1600px) {  body  { font-size:3.4em;  } }
@media all and (min-width: 1700px) {  body  { font-size:3.6em;  } }
Run Code Online (Sandbox Code Playgroud)

这实际上导致的是将字体大小调整为可用的屏幕宽度.这个调整是以100px(对于大多数目的来说已经足够精细)的步长完成的,并且覆盖了最大屏幕宽度1700px,我认为这是充分的(2013)并且可以通过添加更多的线进一步改进.

另一个好处是每次调整大小时都会调整字体大小.基于Javascript的解决方案可能尚未涵盖此动态调整(因为例如浏览器窗口已调整大小).

  • 丑陋地狱,但有效!谢谢!:) (8认同)
  • 如果你是根据窗口宽度而不是容器div大小调整大小,因为这种情况使用'vw'单位会更容易. (5认同)
  • 破坏缩放行为,因此如果您关心可访问性,则无法使用。 (3认同)

Pat*_*ick 25

关于你的代码,请参阅@Coulton.你需要使用JavaScript.

结帐FitText(它在IE中工作,他们只是以某种方式鼓动他们的网站)或BigText.

FitText将允许您缩放与其所在容器相关的一些文本,而BigText则更多地是将文本的不同部分的大小调整为容器内的相同宽度.

BigText将您的字符串设置为容器的宽度,而FitText的像素完美度较低.首先将font-size设置为容器元素宽度的1/10.默认情况下,它对所有字体都不能很好地工作,但它有一个设置,允许您减少或增加重新调整大小的"功率".它还允许您设置最小和最大字体大小.第一次开始工作需要花一点时间,但确实很有效.

http://marabeas.io < - 目前在这里玩它.据我所知,BigText在我的上下文中根本不起作用.

对于那些使用Angularjs的人来说,这是我制作的FitText 的Angular版本.


这里有一个LESS mixin,你可以使用@ humanityANDpeace的解决方案更漂亮:

@mqIterations: 19;
.fontResize(@i) when (@i > 0) {
    @media all and (min-width: 100px * @i) { body { font-size:0.2em * @i; } }
    .fontResize((@i - 1));
}
.fontResize(@mqIterations);
Run Code Online (Sandbox Code Playgroud)

感谢@NIXin的SCSS版本!

$mqIterations: 19;
@mixin fontResize($iterations) { 
    $i: 1; 
    @while $i <= $iterations { 
        @media all and (min-width: 100px * $i) { body { font-size:0.2em * $i; } } 
        $i: $i + 1; 
    }
} 
@include fontResize($mqIterations);
Run Code Online (Sandbox Code Playgroud)

  • 我认为"你需要使用JavaScript",加上最后的代码段,暗示如果你想提供一个只有CSS的解决方案,它应该是一个单独的答案. (4认同)

ame*_*iel 20

我正在寻找相同的功能,并找到了答案.但是,我想给你们一个快速更新.这是CSS3的vmin单元.

p, li
{
  font-size: 1.2vmin;
}
Run Code Online (Sandbox Code Playgroud)

vmin表示"ViewPort高度的1%与ViewPort宽度的1%之间的较小者".

有关SitePoint的更多信息

  • 虽然这是最好的答案,但绝对值得注意的是[缺乏浏览器支持](http://caniuse.com/viewport-units) (3认同)

Abh*_*Sen 8

我提出的答案非常简单,而不是使用"px","em"或"%",我将使用"vw".简而言之,它可能如下所示: - h1 {font-size:5.9vw;}用于标题目的.

见:演示

有关更多详细信息:主要教程

  • vw 的 1 个单位是视口轴的 1%。“视口”==浏览器窗口大小==窗口对象。如果视口宽度为 40 厘米,则 1vw == 0.4 厘米。 (2认同)
  • 例如刚刚将“font-size: 80%”更改为“font-size: 2.5vw”,[jsfiddle](http://jsfiddle.net/abhisheksen/ojx19s9r/) (2认同)

nii*_*ani 5

这是@ Patrick的mixin的SCSS版本.

$mqIterations: 19;
@mixin fontResize($iterations)
{
  $i: 1;
  @while $i <= $iterations
  {
    @media all and (min-width: 100px * $i) {
      body { font-size:0.2em * $i; }
    }
    $i: $i + 1;
  }
}
@include fontResize($mqIterations);
Run Code Online (Sandbox Code Playgroud)