Como uma borda de 180 pixels com altura / largura-> 0px se torna um círculo com um raio de 180 pixels?
Vamos reformular isso em duas perguntas:
Onde width
e height
realmente aplicar?
Vamos dar uma olhada nas áreas de uma caixa típica ( fonte ):
O height
e width
aplica-se apenas ao conteúdo, se o modelo de caixa correto estiver sendo usado (sem modo peculiar, sem Internet Explorer antigo).
Onde se border-radius
aplica?
O border-radius
aplica-se na borda da borda. Se não houver preenchimento nem borda, isso afetará diretamente a borda do conteúdo, o que resultará no seu terceiro exemplo.
O que isso significa para o raio da borda / círculo?
Isso significa que suas regras CSS resultam em uma caixa que consiste apenas de uma borda. Suas regras afirmam que essa borda deve ter uma largura máxima de 180 pixels em todos os lados, enquanto, por outro lado, deve ter um raio máximo do mesmo tamanho:
Na figura, o conteúdo real do seu elemento (o pequeno ponto preto) é realmente inexistente. Se você não aplicou, border-radius
você terminaria com a caixa verde. O border-radius
te dá o círculo azul.
Fica mais fácil de entender se você aplicar border-radius
apenas os dois cantos :
#silly-circle{
width:0; height:0;
border: 180px solid red;
border-top-left-radius: 180px;
border-top-right-radius: 180px;
}
Como no seu exemplo, o tamanho e o raio de todos os cantos / bordas são iguais, você obtém um círculo.
Mais recursos
Referências
Manifestações
- Abra a demonstração abaixo, que mostra como isso
border-radius
afeta a borda (pense na caixa azul interna como a caixa de conteúdo, a borda preta interna como a borda do preenchimento, o espaço vazio como o preenchimento e a borda vermelha gigante como, bem, fronteira). As interseções entre a caixa interna e a borda vermelha geralmente afetam a borda do conteúdo.
var all = $('#TopLeft, #TopRight, #BottomRight, #BottomLeft');
all.on('change keyup', function() {
$('#box').css('border' + this.id + 'Radius', (this.value || 0) + "%");
$('#' + this.id + 'Text').val(this.value + "%");
});
$('#total').on('change keyup', function() {
$('#box').css('borderRadius', (this.value || 0) + "%");
$('#' + this.id + 'Text').val(this.value + "%");
all.val(this.value);
all.each(function(){$('#' + this.id + 'Text').val(this.value + "%");})
});
#box {
margin:auto;
width: 32px;
height: 32px;
border: 100px solid red;
padding: 32px;
transition: border-radius 1s ease;
-moz-transition: border-radius 1s ease;
-webkit-transition: border-radius 1s ease;
-o-transition: border-radius 1s ease;
-ms-transition: border-radius 1s ease;
}
#chooser{margin:auto;}
#innerBox {
width: 100%;
height: 100%;
border: 1px solid blue;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="box">
<div id="innerBox"></div>
</div>
<table id="chooser">
<tr>
<td><label for="total">Total</label></td>
<td><input id="total" value="0" type="range" min="0" max="100" step="1" /></td>
<td><input readonly id="totalText" value="0" type="text" /></td>
</tr>
<tr>
<td><label for="TopLeft">Top-Left</label></td>
<td><input id="TopLeft" value="0" type="range" min="0" max="100" step="1" /></td>
<td><input readonly id="TopLeftText" value="0" type="text" /></td>
</tr>
<tr>
<td><label for="TopRight">Top right</label></td>
<td><input id="TopRight" value="0" type="range" min="0" max="100" step="1" /></td>
<td><input readonly id="TopRightText" value="0" type="text" /></td>
</tr>
<tr>
<td><label for="BottomRight">Bottom right</label></td>
<td><input id="BottomRight" value="0" type="range" min="0" max="100" step="1" /></td>
<td><input readonly id="BottomRightText" value="0" type="text" /></td>
</tr>
<tr>
<td><label for="BottomLeft">Bottom left</label></td>
<td><input id="BottomLeft" value="0" type="range" min="0" max="100" step="1" /></td>
<td><input readonly id="BottomLeftText" value="0" type="text" /></td>
</tr>
<caption><code>border-radius</code> values. All values are in percent.</caption>
</table>
<p>This demo uses a box with a <code>width/height</code> of 32px, a <code>padding</code> of 32px, and a <code>border</code> of 100px.</p>