Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

CSS - How can I make a font readable over any color?

Tags:

html

css

fonts

Assuming I have a set font color that I must maintain, and that it overlays content that can be of any color, how can I make sure the font is readable no matter what it's overlaying?

Here is a jsFiddle to demonstrate the effect I am trying to describe. http://jsfiddle.net/4AUDr/

#overlay  {     position: relative;     top: -150px;     color: #860101; } 

Meme captions utilize white text with a black outline to make it readable over any hypothetical meme image, however I don't think there is a cross-browser compatible CSS only method of achieving that, and it would potentially look quite horrible with smaller fonts.

What solutions are there to this problem?

like image 960
Nikita240 Avatar asked May 31 '14 10:05

Nikita240


People also ask

How do you make text visible over an image in CSS?

CSS position property is used to set the position of text over an image. This can be done by enclosing the image and text in an HTML “div”. Then make the position of div “relative” and that of text “absolute”.

Which CSS property controls the color of a font?

The color property is used to set the color of the text. The color is specified by: a color name - like "red" a HEX value - like "#ff0000"


2 Answers

While text-shadow is nice, it doesn't actually give the result you want. A shadow is a shadow and what you need to have for most readable text is a "text border". Unfortunately. there is no such thing as text-border in css, but we can make one !

I am surprised by how much unpopular multiple shadows are. This is a case where by multiple shadows you can do miracles :

CSS

p {     color: white;     font-size: 20px;     text-shadow:         0.07em 0 black,         0 0.07em black,         -0.07em 0 black,         0 -0.07em black; } 

This style will simply add a thin shadow (as thin as 7% of your actual font-size) around your text (up, down, left, right).

But are four shadows enough ? Maybe you can get a better result with eight ? It looks like the answer is yes, makes sense to me, but it could also be that we are overkilling things here. Note that in this case I also decreased each shadow's size :

CSS

p.with-eight {     text-shadow:         0.05em 0 black,         0 0.05em black,         -0.05em 0 black,         0 -0.05em black,         -0.05em -0.05em black,         -0.05em 0.05em black,         0.05em -0.05em black,         0.05em 0.05em black; } 

Then in this markup in a colourful background you have a nicely readable text:

HTML

<html> <body>     <p>This text is readable on any background.</p>     <p class="with-eight">This text is using eight text-shadows.</p> </body> </html> 

JSFiddle example here

like image 192
George Dimitriadis Avatar answered Sep 28 '22 16:09

George Dimitriadis


You can experiment with text-shadow property (MDN doc), for instance:

text-shadow: white 0px 0px 10px; 

(jsFiddle)

It's supported in IE10. For IE9, you can use proprietary Internet Explorer filters as per this answer.

like image 27
kamituel Avatar answered Sep 28 '22 18:09

kamituel