如何在border-radius后删除角上的白色像素

时间:2013-02-16 16:21:54

标签: html css

我创建了一个带圆角的简单无序列表,在选择列表项时,我希望背景变为蓝色以显示活动状态。当我没有边界半径时,一切看起来都很棒。

但是,当我使用4px的边框半径来舍入所有边,并选择底部带圆角的最后一个列表项(#5)时,蓝色活动状态现在在角上显示小的白色像素。我似乎无法弄清楚如何防止这种情况发生。谢谢你的帮助。

http://jsfiddle.net/8PN8Z/

HTML

<div class="left-dash">
  <div class="dash-stats-3">
        <ul class="dash-stats-3-ul">
            <li><span id="explore-themes">testing</span></li>
            <li>
                <a href="#" class="tab-link" data-remote="true">
                    <span class="ss-pika ss-icon">1</span><span class="theme"> test-1</span>
                </a>
            </li>
            <li>
                <a href=#"" class="tab-link" data-remote="true">
                    <span class="ss-pika ss-icon">2</span><span class="theme"> test-2</span>
                </a>
            </li>
            <li>
                <a href="" class="tab-link" data-remote="true">
                    <span class="ss-pika ss-icon">3</span><span class="theme"> test-3</span>
                </a>
            </li>
            <li>
                <a href="/theme/inspiring" class="tab-link" data-remote="true">
                    <span class="ss-pika ss-icon">4</span><span class="theme"> test-4</span>
                </a>
            </li>
            <li>
                <a href="#" class="tab-link" data-remote="true">
                    <span class="ss-pika ss-icon">5</span><span class="theme"> test-5</span>
                </a>
            </li>
        </ul>
    </div>
</div>

CSS

.left-dash {
    background: #444;
    height: 500px;
}
.left-dash div {
  -webkit-border-radius: 4px 4px 4px 4px;
  border-radius: 4px 4px 4px 4px;
}
.left-dash div ul li:first-child, .left-dash div ul li:first-child a {
  -webkit-border-radius: 4px 4px 0px 0px;
  border-radius: 4px 4px 0px 0px; 
}

.left-dash div ul li:last-child,
.left-dash div ul li:last-child a {
  -webkit-border-radius: 0px 0px 4px 4px;
  border-radius: 0px 0px 4px 4px; 
}



.dash-stats-3 {
    width: 220px;
    margin-bottom: 17px;
    background: #9f9f9f;
    -webkit-background-clip: padding-box; /* for transparent border with solid bg - Safari */
    background-clip: padding-box;/* for IE9+, Firefox 4+, Opera, Chrome */
    border-radius: 0px;
    border: 1px solid rgba( 0, 0, 0, 0.15);
    box-shadow: inset 0px 0px 2px 0px #FFFFFF,0px 1px 3px 0px rgba(0,0,0, 0.15);
    -webkit-box-shadow: inset 0px 0px 2px 0px #FFFFFF,0px 1px 3px 0px rgba(0,0,0, 0.15);
    -moz-box-shadow: inset 0px 0px 2px 0px #FFFFFF,0px 1px 3px 0px rgba(0,0,0, 0.15);
    -o-box-shadow: inset 0px 0px 2px 0px #FFFFFF,0px 1px 3px 0px rgba(0,0,0, 0.15);
    font-family:'Museo Sans W01 700' san-serif;
    font-size: 14px;
    color: #828282;
    text-shadow: 0px 1px 1px #FFFFFF;
    font-weight: normal !important;
}



.dash-stats-3 ul li a, .dash-stats-3 ul li:first-child {
    height: 41px;
    border-bottom: solid rgba( 0, 0, 0, 0.15) 1px;
    border-top: solid rgba(255, 255, 255, .65) 1px;
}
.left-dash div ul li:last-child, .left-dash div ul li:last-child a {
    border-bottom: none;
}

.dash-stats-3 ul li a {
    position:relative;
    line-height:43px;
    display:block;
}


.dash-stats-3 ul li a.active-tab {
    z-index:120;
    border-top: 1px solid #5b82a7;
    background: #4e81be; /* Old browsers */ 
}

JS

$(function(){
        $('a.tab-link').click(function(){
          $('a.tab-link').removeClass('active-tab')
          $(this).addClass('active-tab')
        });
      });

2 个答案:

答案 0 :(得分:0)

首先,给active-tab一个半径。

.dash-stats-3 ul li a.active-tab {
    z-index:120;
    border-top: 1px solid #5b82a7;
    background: #4e81be; /* Old browsers */ 
        -webkit-border-radius: 0px 0px 2px 2px;
        border-radius: 0px 0px 2px 2px;  
}

确保它小于li的半径,(2px)。

并删除a处于默认状态的半径。删除它。

.left-dash div ul li:last-child a{
  -webkit-border-radius: 0px 0px 4px 4px;
  border-radius: 0px 0px 4px 4px; 
}

保持这一点。

.left-dash div ul li:last-child{
  -webkit-border-radius: 0px 0px 4px 4px;
  border-radius: 0px 0px 4px 4px; 
}

检查出来:http://jsfiddle.net/FcXVY/

问题在于您为子元素提供了与父元素相同的边界半径。即使父元素没有边框,也会显示一些微小的像素,并且边框更差。看看这个:http://jsfiddle.net/UVTJQ/

答案 1 :(得分:0)

行。我认为这简化了事情。看看这个。我希望它有所帮助。

http://jsfiddle.net/sheriffderek/8WTam/

<ul class="test-list">
    <li><a href="?">Item thing</a></li>
    <li><a href="?">Item thing</a></li>
    <li><a href="?">Item thing</a></li>
    <li><a href="?">Item thing</a></li>
    <li><a href="?">Item thing</a></li>
    <li><a href="?">Item thing</a></li>
</ul>

CSS:

/* border box - google it. it rules*/ 
* { 
    -moz-box-sizing: border-box; 
    -webkit-box-sizing: border-box; 
    box-sizing: border-box; 
}

.test-list {
    float: left;
    overflow: hidden;
    list-style: none;

    /* just to show the properly containing ul */  
    margin: 2em;
    background-color: rgba(0,0,0,.05);
    padding: 1em;
}

.test-list li {

}

.test-list a {
    display: block;
    float: left;
    clear: left;
    background-color: #f06;
    padding: 1em 2em;
    min-width: 12em;

    color: white;
    text-decoration: none;
    border: 3px solid rgba(0,0,0,1);
    border-bottom: 0;
}

.test-list a:hover {
    background-color: lightblue;
    color: black;
}

.test-list li:first-of-type a {
    -webkit-border-radius:.4em .4em 0 0;
    border-radius: .4em .4em 0 0;
}

.test-list li:last-of-type a {
    -webkit-border-radius: 0 0 .4em .4em;
    border-radius: 0 0 .4em .4em;
    border-bottom: 3px solid black;
}