CSS Font Border?


Answer :

There's an experimental CSS property called text-stroke, supported on some browsers behind a -webkit prefix.





h1 {
-webkit-text-stroke: 2px black; /* width and color */

font-family: sans; color: yellow;
}

<h1>Hello World</h1>





Another possible trick would be to use four shadows, one pixel each on all directions, using property text-shadow:





h1 {
/* 1 pixel black shadow to left, top, right and bottom */
text-shadow: -1px 0 black, 0 1px black, 1px 0 black, 0 -1px black;

font-family: sans; color: yellow;
}

<h1>Hello World</h1>





But it would get blurred for more than 1 pixel thickness.



UPDATE



Here's a SCSS mixin to generate the stroke: http://codepen.io/pixelass/pen/gbGZYL



/// Stroke font-character
/// @param {Integer} $stroke - Stroke width
/// @param {Color} $color - Stroke color
/// @return {List} - text-shadow list
@function stroke($stroke, $color) {
$shadow: ();
$from: $stroke*-1;
@for $i from $from through $stroke {
@for $j from $from through $stroke {
$shadow: append($shadow, $i*1px $j*1px 0 $color, comma);
}
}
@return $shadow;
}
/// Stroke font-character
/// @param {Integer} $stroke - Stroke width
/// @param {Color} $color - Stroke color
/// @return {Style} - text-shadow
@mixin stroke($stroke, $color) {
text-shadow: stroke($stroke, $color);
}


enter image description here



YES old question.. with accepted (and good) answers..



BUT...In case anybody ever needs this and hates typing code...



THIS is a 2px black border with CrossBrowser support (not IE)
I needed this for @fontface fonts so it needed to be cleaner than previous seen answers...
I takes every side pixelwise to make sure there are (almost) no gaps for "fuzzy" (handrawn or similar) fonts.
Subpixels (0.5px) could be added but I don't need it.



Long code for just the border??? ...YES!!!



text-shadow: 1px 1px 0 #000,
-1px 1px 0 #000,
1px -1px 0 #000,
-1px -1px 0 #000,
0px 1px 0 #000,
0px -1px 0 #000,
-1px 0px 0 #000,
1px 0px 0 #000,
2px 2px 0 #000,
-2px 2px 0 #000,
2px -2px 0 #000,
-2px -2px 0 #000,
0px 2px 0 #000,
0px -2px 0 #000,
-2px 0px 0 #000,
2px 0px 0 #000,
1px 2px 0 #000,
-1px 2px 0 #000,
1px -2px 0 #000,
-1px -2px 0 #000,
2px 1px 0 #000,
-2px 1px 0 #000,
2px -1px 0 #000,
-2px -1px 0 #000;


You could perhaps emulate a text-stroke, using the css text-shadow (or -webkit-text-shadow/-moz-text-shadow) and a very low blur:



#element
{
text-shadow: 0 0 2px #000; /* horizontal-offset vertical-offset 'blur' colour */
-moz-text-shadow: 0 0 2px #000;
-webkit-text-shadow: 0 0 2px #000;
}


But while this is more widely available than the -webkit-text-stroke property, I doubt that it's available to the majority of your users, but that might not be a problem (graceful degradation, and all that).



Comments

Popular posts from this blog

Converting A String To Int In Groovy

"Cannot Create Cache Directory /home//.composer/cache/repo/https---packagist.org/, Or Directory Is Not Writable. Proceeding Without Cache"

Android How Can I Convert A String To A Editable