web-dev-qa-db-ja.com

border-radius + background-color ==トリミングされたボーダー

border-radiusdiv、およびbackground-color CSS属性が適用されたborderを考えます。

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

enter image description here

次に、同様のレイアウトを検討しますが、background-colorをinner-divで指定します。

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

enter image description here

innerbackground-color<div>outer<div>

これは、問題の簡単なサンプルです。実際には、<table>を行の色が交互に変わる内部要素として使用しています。 <div>border-radius要素では機能しないようであるため、外側の要素として<table>を使用しています。 これはjsfiddleです この問題のサンプルです。

誰かが解決策を提案していますか?

57
Kirk Woll

overflow:hidden外側のdiv

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

これらの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 を参照してください。

9
melhosseiny

これを修正するには、overflow: hidden;を境界線のある要素に適用します。もっときれいな方法だと思う。

3
Mark W

テーブルを使用する必要がありますか? 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;
}
2
ngen

子要素にもborder-radiusを追加できます。

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

パディングを追加するか、外側の要素に背景色を付けます

0
gnur

Divに小さなパディングを与えることは受け入れられますか?そうすれば、背景色が競合することはありません。

0
ern