使用CSS -webkit-transform时Chrome上的模糊文本

Dor*_*itz 7 css webkit google-chrome css3 css-transforms

我正在使用

-webkit-transform: skew(-15deg, 0deg);
Run Code Online (Sandbox Code Playgroud)

歪曲一个div,然后

-webkit-transform: skew(15deg, 0deg);
Run Code Online (Sandbox Code Playgroud)

纠偏的含文字的孩子.在谷歌浏览器中,倾斜看起来很丑陋和像素化,所以我使用

-webkit-backface-visibility: hidden;
Run Code Online (Sandbox Code Playgroud)

使它看起来不错.现在容器倾斜得非常好,内部文本是"未弯曲的",但文本本身是模糊和丑陋的!(问题仅存在于使用-webkit的chrome中)

演示

有任何想法如何使文字再次清晰?

HTML

<div class="mainBodyItemBox">
    <div class="mainBodyItemImage">
        <img src="http://upload.wikimedia.org/wikipedia/commons/6/6c/2012_Olympic_Football_-_Men's_tournament_-_Honduras_Vs_Morocco.jpg">
    </div>
    <div class="mainBodyItemDecorator"></div>
    <div class="mainBodyItemText">PEC Zwolle v FC Groningen Tickets
        <br> <span class="mainBodyItemType">Football</span>
 <span class="mainBodyItemTime"><strong>04 Apr 2014</strong> | 21:00</span>
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)

CSS

.mainBodyItemBox {
    background-color: #f5f5f5;
    display: inline-block;
    font-family: Arial;
    font-size: 12px;
    height: 80px;
    width: 365px;
    border-top: 1px solid #ffffff;
    border-bottom: 1px solid #c9c9c9;
    margin-left: 25px;
    margin-top: 10px;
    transform: skew(-10deg, 0deg);
    -webkit-transform: skew(-10deg, 0deg);
    -moz-transform: skew(-10deg, 0deg);
    -o-transform: skew(-10deg, 0deg);
    -ms-transform: skew(-10deg, 0deg);
    overflow: hidden;
    -webkit-backface-visibility: hidden;
}
.mainBodyItemImage {
    height: 100%;
    width: 125px;
    float: left;
    overflow: hidden;
}
.mainBodyItemDecorator {
    float: right;
    height: 100%;
    width: 10px;
    background: rgb(30, 143, 30);
    background: url(data:image/svg+xml;
    base64, PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJod…EiIGhlaWdodD0iMSIgZmlsbD0idXJsKCNncmFkLXVjZ2ctZ2VuZXJhdGVkKSIgLz4KPC9zdmc+);
    background: -moz-linear-gradient(top, rgba(30, 143, 30, 1) 0%, rgba(71, 209, 21, 1) 100%);
    background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, rgba(30, 143, 30, 1)), color-stop(100%, rgba(71, 209, 21, 1)));
    background: -webkit-linear-gradient(top, rgba(30, 143, 30, 1) 0%, rgba(71, 209, 21, 1) 100%);
    background: -o-linear-gradient(top, rgba(30, 143, 30, 1) 0%, rgba(71, 209, 21, 1) 100%);
    background: -ms-linear-gradient(top, rgba(30, 143, 30, 1) 0%, rgba(71, 209, 21, 1) 100%);
    background: linear-gradient(to bottom, rgba(30, 143, 30, 1) 0%, rgba(71, 209, 21, 1) 100%);
    filter: progid: DXImageTransform.Microsoft.gradient(startColorstr='#1e8f1e', endColorstr='#47d115', GradientType=0);
}
.mainBodyItemText {
    color: #323d50;
    font-size: 15px;
    height: 100%;
    margin-left: 125px;
    padding-left: 15px;
    padding-top: 5px;
    transform: skew(10deg, 0deg);
    -webkit-transform: skew(10deg, 0deg);
    -moz-transform: skew(10deg, 0deg);
    -o-transform: skew(10deg, 0deg);
    -ms-transform: skew(10deg, 0deg);
}
.mainBodyItemType {
    color: #9aa7af;
    font-size: 10px;
    margin-top: 0px;
}
.mainBodyItemTime {
    font-size: 12px;
    margin-top: 0px;
    position: absolute;
    bottom: 10px;
    left: 15px;
}
Run Code Online (Sandbox Code Playgroud)

and*_*dyb 4

我不确定这是否是修复模糊文本的可行解决方案,但我已经创建了一些似乎可以避免该问题的东西。

\n\n

我使用的技巧是将所有需要的元素封装transform: skew(-10deg, 0deg)在一个容器中,并将容器绝对定位在文本后面。这样,文本就不会受到任何转换,因此不需要进行歪斜校正。我确实尝试以不同的方式分离文本,但仅仅靠近转换后的元素仍然会导致文本模糊。

\n\n

我创建了 2 个演示,这个演示保留了原始 HTML,而这个演示使用了一些更清晰、更语义化的内容。我还在下面包含了后者的代码。

\n\n

超文本标记语言

\n\n
<article>\n    <section>\n        <h1>PEC Zwolle v FC Groningen Tickets</h1>\n        <p>Football</p>\n        <time><strong>04 Apr 2014</strong> | 21:00</time>\n    </section>\n    <aside>\n        <img src="http://upload.wikimedia.org/wikipedia/commons/6/6c/2012_Olympic_Football_-_Men\'s_tournament_-_Honduras_Vs_Morocco.jpg" /><b></b>\n    </aside>\n</article>\n
Run Code Online (Sandbox Code Playgroud)\n\n

CSS

\n\n
article, aside {\n    font-size: 12px;\n    height: 80px;\n    width: 365px;\n}\n\narticle {\n    display: inline-block;\n    font-family: Arial;\n    position:relative;\n    margin-left: 25px;\n    margin-top: 10px;\n}\naside {\n    position:absolute;\n    z-index:-1;\n    top:0;\n    left:0;\n    background-color: #f5f5f5;\n    border-top: 1px solid #ffffff;\n    border-bottom: 1px solid #c9c9c9;\n    transform: skew(-10deg, 0deg);\n    -webkit-transform: skew(-10deg, 0deg);\n    -moz-transform: skew(-10deg, 0deg);\n    -o-transform: skew(-10deg, 0deg);\n    -ms-transform: skew(-10deg, 0deg);\n    -webkit-backface-visibility: hidden;\n}\nimg {\n    height: 100%;\n    width: 125px;\n}\naside b {\n    right:0;\n    top:0;\n    position:absolute;\n    height: 100%;\n    width: 10px;\n    background: rgb(30, 143, 30);\n    background: url(data:image/svg+xml;\n    base64, PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJod\xe2\x80\xa6EiIGhlaWdodD0iMSIgZmlsbD0idXJsKCNncmFkLXVjZ2ctZ2VuZXJhdGVkKSIgLz4KPC9zdmc+);\n    background: -moz-linear-gradient(top, rgba(30, 143, 30, 1) 0%, rgba(71, 209, 21, 1) 100%);\n    background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, rgba(30, 143, 30, 1)), color-stop(100%, rgba(71, 209, 21, 1)));\n    background: -webkit-linear-gradient(top, rgba(30, 143, 30, 1) 0%, rgba(71, 209, 21, 1) 100%);\n    background: -o-linear-gradient(top, rgba(30, 143, 30, 1) 0%, rgba(71, 209, 21, 1) 100%);\n    background: -ms-linear-gradient(top, rgba(30, 143, 30, 1) 0%, rgba(71, 209, 21, 1) 100%);\n    background: linear-gradient(to bottom, rgba(30, 143, 30, 1) 0%, rgba(71, 209, 21, 1) 100%);\n    filter: progid: DXImageTransform.Microsoft.gradient(startColorstr=\'#1e8f1e\', endColorstr=\'#47d115\', GradientType=0);\n}\nsection {\n    color: #323d50;\n    height: 100%;\n    margin-left:140px;\n}\nsection h1 {\n    font-size:15px;\n    font-weight:normal;\n    margin:5px 0 0;\n}\nsection p {\n    color: #9aa7af;\n    font-size: 10px;\n    margin: 5px 0;\n}\ntime {\n    font-size: 12px;\n}\n
Run Code Online (Sandbox Code Playgroud)\n