HTML lettrine (first letter) are not easy to implement, we play with the font-size and line height. It’s easier to have a tag around the first letter but a bit of a pain to add, especially if the copy come from a CMS. Here how I handle that.
After struggling with the CSS property and the different browser rendering, here is the way I did it at the end
p::first-letter can be a pain (More info at developer.mozilla.org), usually we want it to wrap nicely, not only have a big letter.
So my way consist of a bit of JavaScript (can be a function if you wish) and some CSS to style the letter.
JavaScript:
$('.lettrine').each(function(){ $(this).find('p').first().html(function (i, html) { if (html[1] == " ") { // add extra class if the sentence start by a character followed by a space ie: "A long day at..." return html.replace(/^[^a-zA-Z]*([a-zA-Z])/g, "< span class="ltrn added-space">$1< /span>"); } else { return html.replace(/^[^a-zA-Z]*([a-zA-Z])/g, "< span class="ltrn">$1< /span>"); } }); });
CSS (SASS):
.lettrine { .ltrn { font-size: 3em; float: left; position: relative; margin-top: 0.1em; line-height: 100%; display: block; &.added-space { padding-right: 0.05em; } } }