Font scaling based on width of container
If the container is not the body, CSS Tricks covers all of your options in Fitting Text to a Container.
If the container is the body, what you are looking for is Viewport-percentage lengths:
The viewport-percentage lengths are relative to the size of the initial containing block. When the height or width of the initial containing block is changed, they are scaled accordingly. However, when the value of overflow on the root element is auto, any scroll bars are assumed not to exist.
The values are:
vw
(% of the viewport width)vh
(% of the viewport height)vi
(1% of the viewport size in the direction of the root element's inline axis)vb
(1% of the viewport size in the direction of the root element's block axis)vmin
(the smaller ofvw
orvh
)vmax
(the larger orvw
orvh
)
1 v* is equal to 1% of the initial containing block.
Using it looks like this:
p {
font-size: 4vw;
}
As you can see, when the viewport width increases, so do the font-size
, without needing to use media queries.
These values are a sizing unit, just like px
or em
, so they can be used to size other elements as well, such as width, margin, or padding.
Browser support is pretty good, but you'll likely need a fallback, such as:
p {
font-size: 16px;
font-size: 4vw;
}
Check out the support statistics: http://caniuse.com/#feat=viewport-units.
Also, check out CSS-Tricks for a broader look: Viewport Sized Typography
Here's a nice article about setting minimum/maximum sizes and exercising a bit more control over the sizes: Precise control over responsive typography
And here's an article about setting your size using calc() so that the text fills the viewport: http://codepen.io/CrocoDillon/pen/fBJxu
Also, please view this article, which uses a technique dubbed 'molten leading' to adjust the line-height as well. Molten Leading in CSS
how to set font size based on container size?
You may be able to do this with CSS3 using calculations, however it would most likely be safer to use JavaScript.
Here is an example: http://jsfiddle.net/8TrTU/
Using JS you can change the height of the text, then simply bind this same calculation to a resize event, during resize so it scales while the user is making adjustments, or however you are allowing resizing of your elements.
Change font size based on container
There's a great npm package called fitty that will fit the text to the size of the container automatically:
<div id="my-element">Hello World</div>
<script src="fitty.min.js"></script>
<script>
fitty('#my-element');
</script>
CSS - calc() on font-size - changing font size based on container size
Calc is still in it's infancy in terms of support & usefulness. By design it's really just there for doing simple math, like (100% - 20px). It really won't do the math complex enough to make the calculations possible. You are looking for a solution that will size the text based on the amount of space the letters physically take up horizontally (which depends on the letter's individual sizing) and the amount of space available for the containing div.
CSS is abstracted away from the actual element's contents, and it has no way to really discern if something currently "fits" or not. It can layout guidelines for how to handle things when they do or don't fit, but it can't adjust itself according to the content like you want it to. (It's not just you, we've all faced this problem or a similar version of it at some point.)
Check out Chris Coyer's post on what Calc might be handy for: http://css-tricks.com/a-couple-of-use-cases-for-calc/
Creating dynamic font-size based on container height: What am I doing wrong?
$('#front-page-blue-strip').attr('font-size', ($(this).height() / 20).toString() + 'px');
By doing this you are simply adding attribute to element which is not predefined
property, rather its a property of one of predefined property style
.
Instead try this
$('#front-page-blue-strip').css('font-size', ($(this).height() / 20).toString() + 'px');
or
$('#front-page-blue-strip')
.attr('style','font-size:'+ ($(this).height() / 20).toString() + 'px');
Related Topics
Compare Two Dates With JavaScript
For-Each Over an Array in JavaScript
How to Use a Variable For a Key in a JavaScript Object Literal
How to Deal With Floating Point Number Precision in JavaScript
How to Compare Arrays in JavaScript
How to Check If an Array Includes a Value in JavaScript
Sorting an Array of Objects by Property Values
Why Is Using the JavaScript Eval Function a Bad Idea
How to Detect a Click Outside an Element
Find Object by Id in an Array of JavaScript Objects
What Does This Symbol Mean in JavaScript
Get Selected Value in Dropdown List Using JavaScript
How to Access Previous Promise Results in a .Then() Chain
How to Print a Number With Commas as Thousands Separators in JavaScript