Propriedade shape-outside

A propriedade shape-outside permite definir formas de fluxo não padronizadas para elementos flutuantes. Os elementos adjacentes fluirão ao redor da forma definida, e não do contêiner retangular.

Sintaxe

cssseletor {
  shape-outside: valor;
}

Valores

Valor Descrição
circle() Forma de fluxo circular
ellipse() Forma de fluxo elíptica
polygon() Forma poligonal arbitrária
url() Forma baseada no canal alfa da imagem
margin-box Usar as bordas da margem (valor padrão)

Exemplo

Vamos criar uma forma de fluxo circular para um elemento flutuante. Usamos as propriedades shape-outside e clip-path:

html<div class="shape"></div>
<p>
  some long text
</p>
css.shape {
  width: 150px;
  height: 150px;
  float: left;
  shape-outside: circle(50%);
  clip-path: circle(50%);
  background: #3498db;
}

p {
  width: 500px;
  text-align: justify;
}

Результат:

Exemplo

Vamos definir uma margem através da propriedade shape-margin:

html<div class="shape"></div>
<p>
  some long text
</p>
css.shape {
  width: 150px;
  height: 150px;
  float: left;
  shape-outside: circle(50%);
  shape-margin: 10px;
  clip-path: circle(50%);
  background: #3498db;
}

p {
  width: 500px;
  text-align: justify;
}

Результат:

Exemplo

Sem a propriedade clip-path o texto fluirá ao redor do círculo, mas o elemento não terá a forma de um círculo:

html<div class="shape"></div>
<p>
  some long text
</p>
css.shape {
  width: 150px;
  height: 150px;
  float: left;
  shape-outside: circle(50%);
  background: #3498db;
}

p {
  width: 500px;
  text-align: justify;
}

Результат:

Exemplo

Outra forma de elemento:

html<div class="shape"></div>
<p>
  some long text
</p>
css.shape {
  width: 200px;
  height: 200px;
  background-color: #4CAF50;
  float: left;
  shape-outside: polygon(0% 0%, 100% 50%, 0% 100%);
  clip-path: polygon(0% 0%, 100% 50%, 0% 100%);
  margin-right: 20px;
  margin-bottom: 20px;
}

p {
  width: 500px;
  text-align: justify;
}

Результат:

Exemplo

Outra forma de elemento:

html<div class="shape"></div>
<p>
  some long text
</p>
css.shape {
  width: 200px;
  height: 200px;
  background-color: #4CAF50;
  float: left;
  shape-outside: polygon(50% 0%, 100% 25%, 100% 75%, 50% 100%, 0% 75%, 0% 25%);
  clip-path: polygon(50% 0%, 100% 25%, 100% 75%, 50% 100%, 0% 75%, 0% 25%);
  margin-right: 20px;
  margin-bottom: 20px;
}

p {
  width: 500px;
  text-align: justify;
}

Результат:

Veja também

  • a propriedade clip-path,
    que cria a forma visível do elemento
  • a propriedade float,
    necessária para o funcionamento do shape-outside
  • a propriedade shape-margin,
    que adiciona uma margem ao redor da forma