:first-letter pseudo-element isn't working for div with display: flex property. but it works for block and inline-block elements.
div {
display: flex;
text-transform: lowercase;
}
div:first-letter {
text-transform: uppercase;
}
<div>flex</div>
<div style="display: block">block</div>
<div style="display: inline-block">inline-block</div>