Como esse CSS produz um círculo?


206

Este é o CSS:

div {
    width: 0;
    height: 0;
    border: 180px solid red;
    border-radius: 180px;
}

Como ele produz o círculo abaixo?

Digite a descrição da imagem aqui

Suponha que, se a largura do retângulo for de 180 pixels e a altura de 180 pixels, apareceria assim:

Digite a descrição da imagem aqui

Depois de aplicar o raio da borda de 30 pixels, apareceria assim:

Digite a descrição da imagem aqui

O retângulo está ficando menor, ou seja, quase desaparecendo se o tamanho do raio aumentar.

Então, como uma borda de 180 pixels height/width-> 0pxse torna um círculo com um raio de 180 pixels?


14
É um objeto 0x0 com uma borda de 180 pixels ao redor, com cantos arredondados. Portanto, os cantos arredondados são quadrantes de um círculo.
Kaz

Eu tenho uma pergunta boba em minha mente por que você quer fazer circlecom borda ??? podemos facilmente fazer circlecom widthe heightassim por que fazemos comborder
The Mechanic

7
Para sua informação, para criar círculos, use <code> raio da borda: 50% </code> - facilita o ajuste da largura / altura ao ajustar seu layout.
precisa

Sim senhoras, é uma matemática
Medet Tleukabiluly

Respostas:


372

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 widthe heightrealmente aplicar?

Vamos dar uma olhada nas áreas de uma caixa típica ( fonte ):

W3C: Áreas de uma caixa típica

O heighte widthaplica-se apenas ao conteúdo, se o modelo de caixa correto estiver sendo usado (sem modo peculiar, sem Internet Explorer antigo).

Onde se border-radiusaplica?

O border-radiusaplica-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:

Imagem de exemplo

Na figura, o conteúdo real do seu elemento (o pequeno ponto preto) é realmente inexistente. Se você não aplicou, border-radiusvocê terminaria com a caixa verde. O border-radiuste 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;
}

Borda aplicada apenas em dois cantos

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-radiusafeta 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.


Eu não acho que o css3-background faça referências ao css3-box (o css3-box está pendente de reescrita).
BoltClock

@BoltClock: Eu pensei que css3-box definiria as arestas . Há apenas uma referência ao css2.1-box na introdução (não normativa), e a imagem fornecida também está lá; portanto, o css3-box não é realmente necessário para entender border-radius(que mudanças devem ser esperadas na reescrita do css3- caixa?).
Zeta

@ Zeta eu tenho uma pergunta boba em minha mente por que você quer fazer circlecom borda ??? podemos facilmente fazer circlecom widthe heightassim por que fazemos comborder
The Mechanic

1
@ Sarfaraz: Dê uma olhada na pergunta do OP: "Então, como uma borda de 180px height/width-> 0pxse torna um círculo com um raio de 180px?" . Eu simplesmente respondi a pergunta. Existem outras maneiras de criar um círculo, mas o OP estava interessado apenas em como esse método específico funciona.
Zeta #

@Zeta: Não sei ao certo o que exatamente será alterado, mas, como o WD não foi atualizado em 6 anos, suspeito que muito disso será. Eu sei que a seção 11 ( overflowfamília de propriedades) agora vive em seu próprio módulo, css-overflow-3, mas isso ainda não foi refletido no ED. Você verá a abundância de questões no ED, mas eu imagino que não é uma lista exaustiva: dev.w3.org/csswg/css3-box
BoltClock

94

Demo

Vamos examinar a questão de outra maneira com esta demonstração de imagem:

Vamos ver primeiro como o raio da borda é produzido?

Para produzir raio, são necessários dois lados de sua borda. Se você definir o raio da borda para 50 pixels, serão necessários 25 pixels de um lado e 25 pixels de outro lado.

Digite a descrição da imagem aqui

E tirar 25 pixels de cada lado produziria assim:

div{
    width: 0px;
    height: 0px;
    border: 180px solid red;
    border-radius: 0 50px 0 0;
}

Digite a descrição da imagem aqui

Agora veja quanto pode ser necessário no máximo quadrado para aplicar em um canto?

Pode levar até 180 pixels da parte superior e 180 pixels da direita. Então produziria assim:

div{
    width: 0px;
    height: 0px;
    border: 180px solid red;
    border-radius: 0 180px 0 0;
}

Digite a descrição da imagem aqui

E veja isso como ele produz se definirmos um valor diferente de raio?

Suponha que, se você aplicar o raio da borda apenas a dois cantos de maneira desigual:

  • canto superior direito a 180 pixels

  • canto inferior direito a 100 pixels

Então levaria

  • canto superior direito: 90 pixels da parte superior e 90 pixels da direita

  • canto inferior direito: 50 pixels da direita e 50 pixels da parte inferior

Então produziria assim

div{
    width: 0px;
    height: 0px;
    border: 180px solid red;
    border-radius: 0 180px 100px 0;
}

Digite a descrição da imagem aqui

Quanto máximo de sua borda pode ser necessário para aplicar em todos os lados? E veja como isso produz um círculo?

Pode levar até metade do tamanho da borda, ou seja, 180 pixels / 2 = 90 pixels. Então produziria um círculo como este

div{
    width: 0px;
    height: 0px;
    border: 180px solid red;
    border-radius: 180px;
}

Digite a descrição da imagem aqui

Por que leva apenas metade do quadrado para aplicar em todos os lados?

Porque todos os cantos precisam definir o valor do raio igualmente.

Tomando partes iguais de sua borda, produz um círculo.


7
Na verdade, a versão atual desta resposta leva um pouco longe. A questão é simplesmente "como esse CSS cria um círculo", não "como o raio da borda funciona em geral", portanto, embora tecnicamente correto, seja um pouco demais. Além disso, você pode reformatar a pergunta e colocar o código real nos ambientes de código.
Zeta

3

Bordas são a caixa externa de qualquer conteúdo e, se você aplicar um raio, simplesmente produzirá a borda circular.


3

Eu acho que ele inicialmente cria um retângulo com height and width = 180pxe depois faz uma curva com um raio específico, como 30pxem cada canto. Por isso, define bordercom dado radius.


1

Ambos .ae.b dará a saída idêntica.

Q. Por que eu usei width: 360px; height: 360px; ?

A. border: 180px solid red;em .atrabalhos comoborder-width: 180px 180px 180px 180px; /* Top Right Bottom Left */ .

Espero que este violino ajude você a entender o conceito.

.a{
    width: 0;
    height: 0;
    border: 180px solid red;
    border-radius: 180px;
}
.b{
    background:red;
    width: 360px;
    height: 360px;
    border-radius: 180px;
}

9
Hã? "Como .a funciona?" "Aqui está uma comparação entre .a e .b" Não sei o que você está tentando dizer aqui.
BoltClock
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.