border-radius + background-color == обрезанная граница - PullRequest
56 голосов
/ 11 июня 2011

Рассмотрим div с примененными атрибутами border-radius, border и background-color CSS:

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

enter image description here

Теперь рассмотрим похожую компоновку, но с background-color, указанным во внутреннем div:

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

enter image description here

Я встревожен тем, что background-color из внутреннего <div> затеняетграница внешняя <div>.

Это упрощенный пример проблемы.На самом деле я использую <table> в качестве внутреннего элемента с чередующимися цветами строк.И я использую <div> в качестве внешнего элемента, так как border-radius, похоже, не работает на элементе <table>. Вот jsfiddle примера этой проблемы.

У кого-нибудь есть предложения по решению?

Ответы [ 7 ]

106 голосов
/ 12 сентября 2012

Попробуйте overflow:hidden во внешнем div:

<div style="border-radius:10px; border: 1px black solid; overflow: hidden">
  <div style="background-color:#EEEEEE;">
    Blah
  </div>
</div>
9 голосов
/ 11 июня 2011

Добавьте эти правила 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 .

3 голосов
/ 05 июля 2012

Это можно исправить, применив overflow: hidden; к элементу с рамкой.Я думаю, намного чище.

2 голосов
/ 11 июня 2011

Нужно ли использовать таблицу? Вот пример использования 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;
}
0 голосов
/ 28 сентября 2016

Вы также можете добавить border-radius для дочернего элемента.

<div style="border-radius:10px; border: 1px black solid;">
  <div style="background-color:#EEEEEE; border-radius:10px;">
    Blah
  </div>
</div>
0 голосов
/ 11 июня 2011

Было бы приемлемо дать div немного отступить?Таким образом, цвета фона не будут конфликтовать.

0 голосов
/ 11 июня 2011

Добавьте немного отступов или сделайте цвет фона на внешнем элементе

...