Existe uma maneira CSS direta de tornar a borda de um elemento semitransparente com algo assim?
border-opacity: 0.7;
Caso contrário, alguém tem uma idéia de como eu poderia fazer isso sem usar imagens?
Infelizmente, o opacity
elemento torna o elemento inteiro (incluindo qualquer texto) semi-transparente. A melhor maneira de tornar a borda semi-transparente é com o formato de cor rgba. Por exemplo, isso daria uma borda vermelha com 50% de opacidade:
div {
border: 1px solid rgba(255, 0, 0, .5);
-webkit-background-clip: padding-box; /* for Safari */
background-clip: padding-box; /* for IE9+, Firefox 4+, Opera, Chrome */
}
O problema com essa abordagem é que alguns navegadores não entendem o rgba
formato e não exibirão nenhuma borda se esta for a declaração inteira. A solução é fornecer duas declarações de borda. O primeiro com uma opacidade falsa, e o segundo com o real. Se um navegador for capaz, ele usará o segundo, se não, ele usará o primeiro.
div {
border: 1px solid rgb(127, 0, 0);
border: 1px solid rgba(255, 0, 0, .5);
-webkit-background-clip: padding-box; /* for Safari */
background-clip: padding-box; /* for IE9+, Firefox 4+, Opera, Chrome */
}
A primeira declaração de borda terá a cor equivalente a uma borda vermelha opaca de 50% sobre um fundo branco (embora qualquer elemento gráfico abaixo da borda não seja exibido).
UPDATE: Adicionei "background-clip: padding-box;" para esta resposta (de acordo com a sugestão do SooDesuNe nos comentários) para garantir que a borda permaneça transparente mesmo se uma cor sólida de fundo for aplicada.
border-radius
, obterão cantos arredondados. Se não, eles não fazem. O conteúdo ainda está acessível, ainda parece bom, apenas parece melhor se eles estiverem usando um navegador capaz. Eu nunca tive um cliente reclamando disso nos últimos 1,5 anos de operação dessa maneira em todos os projetos.background-clip:padding-box;
também.É fácil, use uma sombra sólida com deslocamento 0:
Além disso, se você definir um raio de borda para o elemento, ele fornecerá bordas bastante arredondadas
jsFiddle Demo
fonte
box-shadow
não tem tamanho e pode quebrar seu layout, tornando as margens desiguais! jsfiddle.net/bj81hew7/2Como outros já mencionaram: CSS-3 diz que você pode usar a
rgba(...)
sintaxe para especificar uma cor de borda com um valor de opacidade (alfa).Aqui está um exemplo rápido, se você quiser conferir.
Funciona no Safari e no Chrome (provavelmente funciona em todos os navegadores de webkit).
Funciona no Firefox
Duvido que funcione no IE, mas suspeito que exista algum filtro ou comportamento que o faça funcionar.
Há também esta postagem de stackoverflow , que sugere alguns outros problemas - a saber, que a borda é renderizada sobre qualquer cor de fundo (ou imagem de fundo) que você especificou; limitando assim a utilidade da borda alfa em muitos casos.
fonte
background-clip: padding-box;
(e até que isso seja suportado, você pode usar as extensões de fornecedor -webkit e -moz).Se você verificar sua codificação CSS com o validador W3C, verá se o seu código CSS é aceitável, mesmo se funcionou nos principais navegadores.
Criando uma borda transparente via CSS, conforme escrito acima,
não é aceito pelos padrões W3C, nem mesmo para CSS3. Eu usei o validador de entrada direta com o seguinte código CSS,
Os resultados foram,
Infelizmente, o valor alfa (a letra "a" no final de "rgb") não é aceito pelo W3C como parte dos valores de cores da borda ainda. Eu me pergunto por que não é padronizado, pois funciona em todos os navegadores. O único problema é se você deseja seguir os padrões do W3C ou se afastar dele para criar algo em CSS.
Para usar o validador CSS online do W3C / entrada direta .
Sempre é uma boa ideia usar um validador para verificar seu trabalho; isso realmente ajuda a encontrar erros pequenos ou até grandes na codificação, quando você fica vesgo após horas de trabalho de codificação.
fonte
* Não tanto quanto eu sei que não há o que eu faço normalmente nesse tipo de circunstâncias, é criar um bloco abaixo com um tamanho maior ((tamanho de borda * 2) + tamanho original) e torná-lo transparente usando
aqui está um exemplo
Atualizar:
Esta resposta está desatualizada, pois, afinal de contas, essa pergunta tem mais de 8 anos. Hoje, todos os navegadores atualizados suportam rgba, sombras de caixa e assim por diante. Mas este é um exemplo decente de como era há mais de 8 anos.
fonte
rgba(...)
em cores de borda. você pode experimentá-lo aqui .Como uma solução alternativa que pode funcionar em alguns casos: altere
border-style
paradotted
.Ter grupos alternados de pixels entre a cor do primeiro plano e a cor do plano de fundo não é o mesmo que uma linha contínua de pixels parcialmente transparentes. Por outro lado, isso requer significativamente menos CSS e é muito mais compatível em todos os navegadores, sem nenhuma diretiva específica.
fonte
Outras respostas tratam do aspecto técnico do problema de opacidade da borda, enquanto eu gostaria de apresentar um hack (apenas CSS e HTML puro). Basicamente, crie uma div de contêiner, com uma div de borda e, em seguida, a div de conteúdo.
E então o CSS: (defina a borda do conteúdo como none, cuide do posicionamento para que a espessura da borda seja contabilizada)
fonte
Não, não há como definir apenas a opacidade de uma borda com css.
Por exemplo, se você não conhecia a cor , não há como alterar apenas a opacidade da borda usando simplesmente
rgba()
.fonte
tente isto:
E aqui vem o nosso CSS mágico ..
Confira a demonstração aqui.
fonte