问题
Consider a div
with the border-radius
, border
, and background-color
CSS attributes applied:
<div style="background-color:#EEEEEE; border-radius:10px; border: 1px black solid;">
Blah
</div>
Now consider a similar layout but with the background-color
specified in an inner-div:
<div style="border-radius:10px; border: 1px black solid;">
<div style="background-color:#EEEEEE;">
Blah
</div>
</div>
I'm dismayed by the fact that the background-color
of the inner <div>
is obscuring the border of the outer <div>
.
This is a simplified sample of the problem. In reality, I'm using a <table>
as the inner element with alternating row colors. And I'm using a <div>
as the outer element since border-radius
does not seem to work on the <table>
element. Here's a jsfiddle of a sample of this problem.
Does anyone have a suggestion for a solution?
回答1:
Try overflow:hidden
in the outer div
:
<div style="border-radius:10px; border: 1px black solid; overflow: hidden">
<div style="background-color:#EEEEEE;">
Blah
</div>
</div>
回答2:
Add these CSS rules:
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;
}
See updated fiddle.
回答3:
You can fix this by applying overflow: hidden;
to the element with the border. A much cleaner way I think.
回答4:
Does a table have to be used? Here's an example using DIV's: 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;
}
回答5:
Add some padding, or do the background color on the outer element
回答6:
Would it be acceptable to give the div a little padding? That way the background colors wouldn't conflict.
回答7:
You could add border-radius to the child element too.
<div style="border-radius:10px; border: 1px black solid;">
<div style="background-color:#EEEEEE; border-radius:10px;">
Blah
</div>
</div>
来源:https://stackoverflow.com/questions/6312067/border-radius-background-color-cropped-border