CSS Brain teaser

Réponse au problème posé par @hteumeuleu Inspiré par les différentes propositions des lecteurs

by oilvier

HTML

<!doctype html>
<html>
    <head>
        <title>CSS Brain Teaser</title>
        <!-- 
            Un exercice rigolo proposé par HTeuMeuLeu
            http://www.hteumeuleu.fr        
        -->
    </head>
    <body>
        <h1>
            <span class="wrap">
                <span class="inner">Du texte HTML dynamique sur plusieurs lignes avec un fond qui suit bien et des marges autour.</span>
            </span>
        </h1>
    </body>
</html>

CSS

body { padding:50px; background:#2fa7ca; }
h1 { width:450px; font:bold 36px sans-serif; letter-spacing:-1px; color:#000; position:relative; padding:10px 20px; overflow:hidden;}

.wrap {outline:10px solid white; border:1px solid white; outline-offset:-1px;}
.inner {background:white; position:relative;}

JavaScript

/* En partant des différentes propositions utilisant outline :
On sépare en deux SPAN afin d'éviter que le texte ne soit coupé en haut et en bas de chaque ligne (à cause de outline)
On corrige le bug des espaces (FF, Chrome) avec un outline-offset:-1px; et une bordure */