Chrome : Text blurry when skew back : skew(-10deg) -> skew(10deg)
The "blurry text" after 2d or 3d transforms with webkit browsers has been discused many times. But in your case, you can apply the transform only on a pseudo element so that your text isn't affected by the skew property.
It will also alow you to use only one tag in your markup :
@import url(https://fonts.googleapis.com/css?family=Oswald);body{color:#fff;font-weight: bold;font-size:50px;font-family:'Oswald',sans-serif;}.parent { width: 300px; overflow: hidden; padding-left: 5%; position:relative;}.parent::before { content :''; position:absolute; top:0;left:0; width:100%; height:100%; background: rgba(90,190,230,0.9); transform-origin:0 0; transform:skew(-10deg); z-index:-1;}
<div class="parent"> Hello</div>
Adding the 'translateZ(0)' before transformations like below forces the gpu to re-render the text and removes blurry-ness on Chrome.
This:
transform: translateZ(0) skew(-10deg);
Not This:
transform: skew(-10deg);
You can try the text-rendering: geometricPrecision
CSS property. This will force your text to not be anti-aliased, thus making the blurriness less important.
inp.onchange = function(){ document.querySelector('.child').classList.toggle('geo'); }
@import url(https://fonts.googleapis.com/css?family=Oswald);body{color:#fff;font-weight:bold;font-size:50px;font-family:'Oswald',sans-serif;}.geo{ text-rendering: geometricPrecision; }.parent { transform: skew(-10deg); -webkit-backface-visibility: hidden; width:300px;padding-left:15%;margin-left:-15%;overflow:hidden;}.child { transform: skew(10deg); width:300px;background: rgba(90, 190, 230, 0.9);padding-left: 5%;padding-right: 15%;}
<div class="parent"> <!-- skew(-10deg) --> <div class="child geo">Hello</div> <!-- skew(10deg) (skew back) --></div><input type="checkbox" id="inp" checked="true"/> geometricPrecision