border-radius + background-color ==裁剪边框

时间:2011-06-10 21:05:34

标签: html css border background-color css3

考虑应用了divborder-radiusborder CSS属性的background-color

<div style="background-color:#EEEEEE; border-radius:10px; border: 1px black solid;">
  Blah
</div>

enter image description here

现在考虑类似的布局,但在inner-div中指定background-color

<div style="border-radius:10px; border: 1px black solid;">
  <div style="background-color:#EEEEEE;">
    Blah
  </div>
</div>

enter image description here

inner background-color的{​​{1}}模糊了外部 {{1}的边框这一事实让我感到沮丧}。

这是问题的简化示例。实际上,我使用<div>作为交替行颜色的内部元素。我使用<div>作为外部元素,因为<table>似乎不适用于<div>元素。 Here's a jsfiddle此问题的一个示例。

有没有人建议解决方案?

7 个答案:

答案 0 :(得分:106)

在外部overflow:hidden中尝试div

<div style="border-radius:10px; border: 1px black solid; overflow: hidden">
  <div style="background-color:#EEEEEE;">
    Blah
  </div>
</div>

答案 1 :(得分:9)

添加以下CSS规则:

tr:first-of-type td:first-child {
    border-top-left-radius: 5px;    
}

tr:first-of-type td:last-child {
    border-top-right-radius: 5px;    
}

tr:last-of-type td:first-child {
    border-bottom-left-radius: 5px;    
}

tr:last-of-type td:last-child {
    border-bottom-right-radius: 5px;    
}

查看更新的fiddle

答案 2 :(得分:3)

您可以通过将overflow: hidden;应用于带边框的元素来解决此问题。我认为这是一种更清洁的方式。

答案 3 :(得分:2)

是否必须使用表格?以下是使用DIV的示例:http://jsfiddle.net/6KwGy/1/

HTML:

<div id="container">
    <div class="row">
        <div class="leftHalf">
            <p>data 1</p>
        </div>
        <div class="rightHalf">
            <p>data 2</p>
        </div>
    </div>
    <div class="row">
        <div class="leftHalf">
            <p>data 1</p>
        </div>
        <div class="rightHalf">
            <p>data 2</p>
        </div>
    </div>
    <div class="row">
        <div class="leftHalf">
            <p>data 1</p>
        </div>
        <div class="rightHalf">
            <p>data 2</p>
        </div>
    </div>
</div>

CSS:

.container {
    width: 100%;
}

.leftHalf {
    float:left;
    width:50%;
}

.rightHalf {
    float:left;
    width:50%;
}
.row {
    float: left;
    width: 100%;
}

#container .row:nth-child(odd) {
    background-color: #EEEEEE;
}
#container .row:first-child {
    border-top: 1px solid black;
    border-top-left-radius: 5px;
    border-top-right-radius: 5px;
    -moz-border-radius-topleft: 5px;
    -moz-border-radius-topright: 5px;
    -webkit-border-radius-topleft: 5px;
    -webkit-border-radius-topright: 5px;
}
#container .row:last-child {
    border-bottom: 1px solid black;
    border-bottom-left-radius: 5px;
    border-bottom-right-radius: 5px;
    -moz-border-radius-bottomleft: 5px;
    -moz-border-radius-bottomright: 5px;
    -webkit-border-radius-bottomleft: 5px;
    -webkit-border-radius-bottomright: 5px;
}
#container .row {
    border-left: 1px solid black;
    border-right: 1px solid black;
}

答案 4 :(得分:0)

添加一些填充,或在外部元素上执行背景颜色

答案 5 :(得分:0)

给div加点填充是否可以接受?这样背景颜色就不会发生冲突。

答案 6 :(得分:0)

您也可以将border-radius添加到子元素。

<div style="border-radius:10px; border: 1px black solid;">
  <div style="background-color:#EEEEEE; border-radius:10px;">
    Blah
  </div>
</div>