CSS - 转换函数不能在链接上工作?

时间:2016-01-10 19:53:14

标签: html css css3 css-transforms

当href的扩展名为.pdf时,我确实喜欢这样做。 .DOC; .PPT; .xls然后它会在它前面添加相应的文件图片。然后当我将鼠标悬停在它上面时,我尝试将链接变小,但我没有做任何事情!我做错了什么或什么?

enter image description here

代码:



ul{
  list-style-type: none;
}
ul a{
  text-decoration:none;
  padding-left: 20px;
  background-repeat: no-repeat;
}
ul a:hover{
  text-decoration:underline;
  color:#666;
  -moz-transform: scale(0.9);
  -webkit-transform: scale(0.9);
  -ms-transform: scale(0.9);
  transform: scale(0.9);
}
a[href$=".pdf"]{
  background-image:url(http://i.stack.imgur.com/zJlYq.gif);
}
a[href$=".doc"]{
  background-image:url(http://i.stack.imgur.com/z2lbW.gif);
}
a[href$=".ppt"]{
  background-image:url(http://i.stack.imgur.com/Tk5Vv.gif);
}
a[href$=".xls"]{
  background-image:url(http://i.stack.imgur.com/sOr7E.gif);
}

<ul>
  <li><a href="/one.pdf">pdf</a></li>
  <li><a href="/two.doc">doc</a></li>
  <li><a href="/three.ppt">ppt</a></li>
  <li><a href="/four.xls">xls</a></li>
</ul>
&#13;
&#13;
&#13;

3 个答案:

答案 0 :(得分:3)

您应该将display: inline-block用于<a>代码(或display: block),因为<a>默认情况下为display: inline,但transformable element可以'与display: inline

  

Transformable element - 一个元素,其布局由CSS框模型控制,该模型是块级或原子内联级元素,或者......

     

Inline-block - 此值使元素生成内联级块容器。内联块的内部被格式化为块框,元素本身被格式化为原子内联级框。

ul {
    list-style-type: none;
}

ul a {
    text-decoration: none;
    padding-left: 20px;
    background-repeat: no-repeat;
    display: inline-block;
}

ul a:hover {
    text-decoration: underline;
    color: #666;
    -webkit-transform: scale(0.9);
    -moz-transform: scale(0.9);
    -ms-transform: scale(0.9);
    transform: scale(0.9);
}

a[href $= '.pdf'] {
    background-image: url(http://i.stack.imgur.com/zJlYq.gif);
}

a[href $= '.doc'] {
    background-image: url(http://i.stack.imgur.com/z2lbW.gif);
}

a[href $= '.ppt'] {
    background-image: url(http://i.stack.imgur.com/Tk5Vv.gif);
}

a[href $= '.xls'] {
    background-image: url(http://i.stack.imgur.com/sOr7E.gif);
}
<ul>
    <li><a href="/one.pdf">pdf</a></li>
    <li><a href="/two.doc">doc</a></li>
    <li><a href="/three.ppt">ppt</a></li>
    <li><a href="/four.xls">xls</a></li>
</ul>

答案 1 :(得分:3)

transform不适用于<a>等内联元素。您可以将链接显示为内联块或块以使转换工作!

  

可变形元素   可转换元素是以下类别之一的元素:

     
      
  • 一个元素,其布局由CSS box模型控制,该模型是块级或原子内联级元素,或者其display属性计算为table-row,table-row-group,table-header -group,table-footer-group,table-cell或table-caption [CSS21]

  •   
  • SVG命名空间中的一个元素,不受CSS框模型的控制,该模型具有属性transform,'patternTransform'或gradientTransform [SVG11]。

  •   
     

http://www.w3.org/TR/css3-transforms/#transformable-element
  http://www.w3.org/TR/css3-transforms/#transform-property

此代码有效:

ul{
  list-style-type: none;
}
ul a{
  display:inline-block;
  text-decoration:none;
  padding-left: 20px;
  background-repeat: no-repeat;
}
ul a:hover{
  display:inline-block;
  text-decoration:underline;
  color:#666;
  -moz-transform: scale(0.9);
  -webkit-transform: scale(0.9);
  -ms-transform: scale(0.9);
  transform: scale(0.9);
}
a[href$=".pdf"]{
  background-image:url(http://placehold.it/20x20);
}
a[href$=".doc"]{
  background-image:url(http://placehold.it/20x20);
}
a[href$=".ppt"]{
  background-image:url(http://placehold.it/20x20);
}
a[href$=".xls"]{
  background-image:url(http://placehold.it/20x20);
}
<ul>
  <li><a href="/one.pdf">pdf</a></li>
  <li><a href="/two.doc">doc</a></li>
  <li><a href="/three.ppt">ppt</a></li>
  <li><a href="/four.xls">xls</a></li>
</ul>

答案 2 :(得分:0)

display: inline-block放在链接元素上。您似乎无法转换内联元素。此外 - 您的语法应该完全有效,尽管您可能有太多前缀。只有IE9应该需要MS前缀,我怀疑还需要其他任何一个。