2010-12-11 35 views
3

我有一个网站,在主页上有几个按钮:http://www.bniolsztyn.pl(波兰语,对不起)。由jQuery设置的填充改变元素的宽度

有几个蓝色按钮与下面的标记:

<div class='more-link'> 
    <a href='#'>Read more...</a> 
</div> 

他们的造型:

div.more-link a { 
    padding: 8px 20px; 
    color: #d0d0d0; 
} 
div.more-link { 
    width: 100%; 
    height: 12px; 
    padding: 6px 0; 
    margin: 4px 0; 
    text-align: center; 
    background: url(/sites/all/themes/bni/img/button.png) center repeat-x; 
    background-color: #1a3754; 
    background: -moz-linear-gradient(top,#5190cf 0%,#27527e 48%,#1a3754 52%,#234a71 100%); 
    background: -webkit-gradient(linear,left top,left bottom,color-stop(0%,#5190cf),color-stop(48%,#27527e),color-stop(52%,#1a3754),color-stop(100%,#234a71)); 
    background: linear-gradient(top,#5190cf 0%,#27527e 48%,#1a3754 52%,#234a71 100%); 
    border: 1px solid #5190cf; 
    -webkit-border-radius: 5px; 
    -moz-border-radius: 5px; 
    border-radius: 5px; 
    -webkit-box-shadow: 0 0 0 1px #244e76, 0 3px 3px rgba(0,0,0,.5); 
    -moz-box-shadow: 0 0 0 1px #244e76, 0 3px 3px rgba(0,0,0,.5); 
    box-shadow: 0 0 0 1px #244e76, 0 3px 3px rgba(0,0,0,.5); 
} 

<a>标签有两侧固定20像素的填充:

alt text

使用jQuery,我让它占据整个父DIV:

alt text

jQuery的代码如下:

$(document).ready(function(){ 
    $('div.more-link a').each(function(){ 
     var container = $(this).parent().width(); 
     var link = $(this).width(); 
     var pad = Math.floor((container - link)/2); 
     $(this).css({ 
      paddingLeft: pad + 'px', 
      paddingRight: pad + 'px' 
     }); 
    }); 
}); 

现在,一切工作正常在Firefox,Opera和IE浏览器。然而,铬似乎到jQuery代码反应以一种特殊的方式:它减少了<a>标签的宽度和,作为一个后果,按钮上的文字向右移动:

alt text

起初,我认为这是一个box-sizing的问题,但似乎并非如此。禁用jQuery添加的内联填充将使元素的宽度恢复正常(必须设置左侧和右侧填充值才能看到怪癖)。

我使用Chrome 8.0.552.215和jQuery 1.4.4。

这是Chrome的一个已知问题,还是我身边的“一个可怕的失败”?代码有什么问题吗?你能重现错误吗?

回答

1

我不相信你需要JQuery来解决这个问题。您是否只是试图将<a>文本居中在容器“按钮”<div>?如果是这样,你可以用CSS做到这一点:

div.more-link a { 
    color: #d0d0d0; 
    display:block; 
    line-height: 24px; 
} 
div.more-link { 
    width: 100%; 
    height: 24px; 
    margin: 4px 0; 
    text-align: center; 
    background: url(/sites/all/themes/bni/img/button.png) center repeat-x; 
    background-color: #1a3754; 
    background: -moz-linear-gradient(top,#5190cf 0%,#27527e 48%,#1a3754 52%,#234a71 100%); 
    background: -webkit-gradient(linear,left top,left bottom,color-stop(0%,#5190cf),color-stop(48%,#27527e),color-stop(52%,#1a3754),color-stop(100%,#234a71)); 
    background: linear-gradient(top,#5190cf 0%,#27527e 48%,#1a3754 52%,#234a71 100%); 
    border: 1px solid #5190cf; 
    -webkit-border-radius: 5px; 
    -moz-border-radius: 5px; 
    border-radius: 5px; 
    -webkit-box-shadow: 0 0 0 1px #244e76, 0 3px 3px rgba(0,0,0,.5); 
    -moz-box-shadow: 0 0 0 1px #244e76, 0 3px 3px rgba(0,0,0,.5); 
    box-shadow: 0 0 0 1px #244e76, 0 3px 3px rgba(0,0,0,.5); 
} 

通知我只是移除了这两个元素,调整DIV的高度填充,并添加display:block;,并line-height:24px;<a>

编辑:要清楚,上面的代码也将使整个“按钮”可点击。

+0

完美,这当然解决了这个问题:)。很不错,我很少考虑将内联元素转换为块级别。非常感谢你,无论是为答案和HTML启示:)。 – mingos 2010-12-11 01:26:51

相关问题