Categories: CSStodas

A propriedade CSS clip





Documento sem título

Falae Maurício, tranquilidade?

Desculpa incomodar ae, mas eu estou tentando usar a propriedade clip do css, mas não consigo de jeito nenhum. Já vi no site do W3C e da W3Schools, a mesma regra, eu utilizo da forma mostrada, mas não acontece nada.

Essa propriedade já é aceita ou ainda será aceita? Sabe me informar isso Maurício?

Obrigado ae e desculpe o incômodo. 😉

A citação acima foi extraída de um e-mail que recebi de um visitante deste Blog. Resolvi escrever esta matéria explicando como funciona a propriedade CSS CLIP, pouco conhecida e usada.

A propriedade CLIP foi criada com as especificações para CSS nível 2 em 12 de maio de 1998, portanto já existe há muito tempo e é bem suportada pela maioria dos navegadores até mesmo os antiquíssimos como os da versão 4, por exemplo, IE4 e NN4.

Contudo convém ressaltar que navegadores IE7 e anteriores requerem a sintaxe antiga dessa propriedade, ou seja, sem uso de vírgulas separando as coordenadas do recorte.

A melhor tradução para o verbo inglês CLIP é RECORTAR

E é exatamente isso que esta propriedade faz. Ela recorta o conteúdo de um box. Você deve conhecer a propriedade CSS overflow, pois bem, a propriedade CLIP funciona de maneira parecida com overflow com as seguintes diferenças:

  • Overflow se destina a controlar a parte ‘escondida’ (recortada) do conteúdo de um box com os valores auto, hidden, inherit, scroll e visible criando, ou não, barras de rolagem para acessar os conteúdos recortados. Com clip você não tem o controle com barras de rolagem;
  • A propriedade clip só funciona para elementos posicionados de maneira fixed ou absolute e overflow independe de posicionamento;
  • Quando usamos overflow os conteúdos ‘escondidos’ (recortados) não ocupam lugar no fluxo do documento e com clip estes espaços são preservados.

A sintaxe da regra CSS para clip é conforme mostrada a seguir:

.container {clip: rect (top, right, bottom, left); }

onde:

  • .container é o elemento HTML cujo conteúdo será recortado;
  • clip é a propriedade recortar;
  • rect(top, right, bottom, left) (topo, direita, inferior, esquerda) é a função para recortar cujos parâmetros são as coordenadas para o recorte expressas em medidas CSS (exceto porcentagem que não é aceita), conforme mostradas na figura abaixo:

Temos uma imagem de 350 x 240px e queremos recortar a área em destaque na figura. Observe a definição das coordenadas para o recorte:

(top, right, bottom, left) » (90px, 280px, 160px, 80px)

O código HTML

...
...
<div style="width:350px;height:240px;position:relative;">

<img src="foto.jpg" alt="Foto para clip" width="350" height="240" » 
style="position:absolute;clip: rect(90px, 280px, 160px, 80px); " />

</div>

Observar que tivemos que criar um DIV para servir de container à imagem, pois como a imagem será recortada ela terá que ser posicionada e no nosso caso adotamos a forma absoluta (não usamos position: fixed; pois os Internet Explorer antigos não suportam esta propriedade CSS). Assim o DIV servirá de contexto para posicionamento da imagem sendo a ela atribuida position: relative;

Usamos estilização inline somente para fins didáticos (visualização e entendimento do código). Não use estilos inline! 🙂

Observe a seguir o resultado do recorte da imagem e note que a área da imagem que foi recortada permanece com seu espaço preservado em branco no documento.

Você pode recortar qualquer elemento com a propriedade clip.
Observe abaixo um DIV com um texto como conteúdo a ser recortado com as mesmas coordenadas que recortamos a foto anterior.

Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Morbi eleifend, purus quis laoreet faucibus, ante augue malesuada mi, id rhoncus augue lorem eget elit. Ut sollicitudin sodales purus. Phasellus libero felis, blandit nec, commodo ut, imperdiet ut, nibh. Suspendisse potenti. Donec ullamcorper cursus dolor. Duis vitae ipsum. Maecenas dapibus hendrerit diam.

Observe a seguir o resultado do recorte do texto e note que a área de texto que foi recortada permanece com seu espaço preservado em branco no documento.

Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Morbi eleifend, purus quis laoreet faucibus, ante augue malesuada mi, id rhoncus augue lorem eget elit. Ut sollicitudin sodales purus. Phasellus libero felis, blandit nec, commodo ut, imperdiet ut, nibh. Suspendisse potenti. Donec ullamcorper cursus dolor. Duis vitae ipsum. Maecenas dapibus hendrerit diam.

Atualizações em 05/12/2013

  • Ajustes no texto
  • Desafio: Encontrar uma aplicação prática para essa propriedade.
    Sugestão: Mostrar trechos ampliados de uma imagem em uma área ao lado da imagem combinado com transições e animações CSS. (Já vi esse efeito na net! Não copie, crie!).Encontrou uma aplicação legal? Poste o link nos comentários ou envie o código para mim que eu publico.


Maujor

Exerci o magistério paralelamente a minha carreira profissional por toda uma vida e ao longo destes trinta anos aprendi tanto quanto ensinei. Sou um apaixonado por Web Standards e desenvolvo o site de tutoriais CSS para Web Design.

View Comments

  • Gostei do exemplo Maujor, muito bem explicado. Ainda estou aprendendo e os seus tutoriais são de grande ajuda. Uma dúvida: Dá para aplicar essa função à um iframe, por exemplo? Onde eu queira que apareça apenas uma certa área de outra página web?

  • Show de bola!!!!!!!!!!!!
    Cara vc e D+, me manda um autografo seu! rsrs

  • eu gostaria de saber como utilizar essa mesma tag, só que com o resto que não foi recortado não aparecesse na página, pois eu fiz isso para uma postagem para o meu blogger, só que o problema que por causa disso o conteúdo oculto mandou o meu menú da esquerda para lá em baixo ...

    óh ...

    //http://www.maujor.com/blog/2006/06/26/a-propriedade-css-clip/

  • Excelente tutorial. As coordenadas do clip, bem como, de outros elementos do css, normalmente confundem um pouco a cabeça. Este tutorial foi bem esclarecedor, principalmente através do exemplo.

    Continue assim sempre produzindo materiais práticos e eficientes.

    Parabéns.

  • Cara muito legal o post. Eu nao sabia sobre o CLIP e putz, to vendo que voce escreveu em 2006 hahaha. Que tapado que eu sou.

    É assim mesmo, sempre aprendendo. Fiz um exemplo baseado nesta propriedade.

    No exemplo poderia fazer de N formas como já faço, mas testei com a propriedade CLIP, gostei do resultado. Só não testei nos navegadores Opera e Chrome.

    Segue link de JQuery com CLIP CSS

    Pra ficar mais organizado pros seus leitores, se quiser postar a solução em seu blog pode colocar.

    Abraço e parabéns

  • Maujor obrigado por esclarecer mais uma duvida... como sempre com muita clareza e exemplos práticos...

    Valew

  • De nada, professor! Estou ouvindo sua entrevista com o Guanabara!

  • A W3C recomenda que utilizemos "," (vírgula) entre os valores. Mas, segundo minhas experiências, o IE6 e IE7 simplesmente ignora a função do clip quando utilizamos o caracter ",". Ou seja, ao invés de fazer clip: rect(0px, 64px, 64px, 0px); faça clip: rect(0px 64px 64px 0px); Dessa forma funciona no IE6 e 7. No IE8 corre sem problemas de qualquer uma das maneiras.

    Testem vocês mesmos... é REAL! E acho interessante o Maujor atualizar o post com esse detalhe de compatibilidade. Afinal de contas, demorei umas 3 horas para descobrir isso!

    • @Sérgio
      Obrigado!
      O W3C prevê as duas sintaxes, separação com vírgulas ou com espaço em branco. Preconiza ainda que os Agentes de Usuário devem aceitar ambas as sintaxes.
      Mas, (para variar) o IE não respeita quando a sintaxe é com vírgulas. Por esta razão o tutorial usa a sintaxe com espaços.
      Bom saber que o IE8 corrigiu.

Share
Published by
Maujor

Recent Posts

Teste seu conhecimento #20

Em 2006 comecei a publicar nesse blog uma série de desafios CSS que consistiam em…

7 anos ago

Teste seu conhecimento #19

Há muito tempo que eu não publico um "Teste seu conhecimento". Esta semana, revendo algumas…

9 anos ago

JavaScript bubbling e capturing

Introdução Elementos da marcação HTML podem ser aninhados uns dentro de outros, criando-se uma cadeia…

10 anos ago

HTML5 – W3C versus WHATWG

HTML5? Web universal? É comum eu me deparar com dúvidas sobre a HTML5 não só…

10 anos ago

Seria esse o futuro das imagens responsivas?

Quem é Tab Atkins Jr? Tab Atkins Jr, um desenvolvedor americano, trabalhou durante muitos anos…

10 anos ago

BrazilJS Conf 2013

Pessoal, a BrazilJS Conf 2013 disponibilizou para o Maujor cupons de desconto para serem oferecidos…

11 anos ago