É possível, usando apenas CSS, tornar o background
elemento semi-transparente, mas ter o conteúdo (texto e imagens) do elemento opaco?
Eu gostaria de fazer isso sem ter o texto e o plano de fundo como dois elementos separados.
Ao tentar:
p {
position: absolute;
background-color: green;
filter: alpha(opacity=60);
opacity: 0.6;
}
span {
color: white;
filter: alpha(opacity=100);
opacity: 1;
}
<p>
<span>Hello world</span>
</p>
Parece que os elementos filhos estão sujeitos à opacidade de seus pais, portanto, opacity:1
é relativo ao opacity:0.6
dos pais.
p
opacidade fosse.6
e aspan
opacidade fosse.5
, a verdadeira opacidade do texto no intervalo seria0.3
.opacity:.5
para o pai eopacity:2
o elemento filho?opacity:2;
é inválido . O valor daopacity
propriedade deve estar dentro do intervalo inclusivo [0,1].Respostas:
Use uma imagem PNG semitransparente ou use CSS 3:
Aqui está um artigo do css3.info, Opacity, RGBA e comprometer (2007-06-03).
fonte
background-color: rgba(#000, .5);
No Firefox 3 e Safari 3, você pode usar RGBA como Georg Schölly mencionado .
Um truque pouco conhecido é que você pode usá-lo no Internet Explorer também usando o filtro de gradiente.
O primeiro número hexadecimal define o valor alfa da cor.
Solução completa para todos os navegadores:
Isso é da transparência do plano de fundo do CSS sem afetar os elementos filhos, por meio de RGBa e filtros .
Captura de tela dos resultados:
Isso ocorre ao usar o seguinte código:
fonte
Esta é a melhor solução que eu poderia ter, NÃO usando CSS 3. E funciona muito bem no Firefox, Chrome e Internet Explorer, tanto quanto eu posso ver.
Coloque um contêiner
div
e dois filhosdiv
no mesmo nível, um para o conteúdo e outro para o segundo plano. E, usando CSS, dimensione automaticamente o plano de fundo para caber no conteúdo e coloque o plano de fundo na parte de trás usando o z-index.fonte
:after
e evitar a marcação extra?Para uma cor de plano de fundo semitransparente simples, as soluções acima (imagens CSS3 ou bg) são as melhores opções. No entanto, se você quiser fazer algo mais sofisticado (por exemplo, animação, vários planos de fundo etc.), ou se não quiser confiar no CSS3, tente a "técnica do painel":
A técnica funciona usando duas "camadas" dentro do elemento do painel externo:
O
position: relative
painel no é importante; informa a camada traseira para ajustar ao tamanho do painel. (Se você precisar que a<p>
tag seja absoluta, altere o painel de a<p>
para a<span>
e envolva tudo isso em uma<p>
tag de posição absoluta .)A principal vantagem dessa técnica sobre as similares listadas acima é que o painel não precisa ter um tamanho especificado; conforme codificado acima, caberá na largura total (layout normal do elemento de bloco) e apenas na altura do conteúdo. O elemento do painel externo pode ser dimensionado da maneira que desejar, desde que seja retangular (ou seja, o bloco embutido funcionará; o embutido simples não funcionará).
Além disso, oferece muita liberdade para o plano de fundo; você pode colocar realmente qualquer coisa no elemento back e não afetar o fluxo do conteúdo (se você quiser várias subcamadas em tamanho real, verifique se elas também têm posição: absoluta, largura / altura: 100%, e superior / inferior / esquerda / direita: automático).
Uma variação para permitir o ajuste de inserção de segundo plano (via parte superior / inferior / esquerda / direita) e / ou fixação de segundo plano (através da remoção de um dos pares esquerdo / direito ou superior / inferior) é usar o seguinte CSS:
Como está escrito, isso funciona no Firefox, Safari, Chrome, IE8 + e Opera, embora o IE7 e o IE6 exijam CSS e expressões extras, IIRC, e na última vez que verifiquei, a segunda variação de CSS não funciona no Opera.
Pontos a observar:
<div>
s em vez de<span>
s para simplificar seu CSS.Uma demonstração mais completa, mostrando a flexibilidade dessa técnica, usando-a em conjunto com
display: inline-block
e com osauto
&width
s / s específicosmin-height
:E aqui está uma demonstração ao vivo da técnica usada extensivamente:
fonte
width:
eheight:
propriedades compartilhar uma linha, porque eles são o mesmo tipo de construção e melhor entendido como uma forma 2-dimensional, não um par de restrições unidimensionais. Além disso, algumas das linhas têm uma quantidade razoável, porque o conteúdo repetido não é tão importante para mostrar.É melhor usar um semitransparente
.png
.Basta abrir o Photoshop , criar uma
2x2
imagem de pixel ( escolher1x1
pode causar um bug do Internet Explorer! ), Preenchê-la com uma cor verde e definir a opacidade na "guia Camadas" para 60%. Em seguida, salve-o e torne-o uma imagem de plano de fundo:Funciona bem, é claro, exceto no adorável Internet Explorer 6 . Existem correções melhores disponíveis, mas aqui está um truque rápido:
fonte
Há um truque para minimizar a marcação: use um pseudo-elemento como plano de fundo e você pode definir a opacidade sem afetar o elemento principal e seus filhos:
DEMO
Resultado:
Código relevante:
O suporte ao navegador é o Internet Explorer 8 e posterior.
fonte
O método mais fácil seria usar uma imagem PNG de plano de fundo semitransparente .
Você pode usar JavaScript para fazê-lo funcionar no Internet Explorer 6, se necessário.
Eu uso o método descrito em PNGs transparentes no Internet Explorer 6 .
Fora isso, você poderia fingir usando dois side-by-side irmãos elementos - Faça um semi-transparente , então absolutamente posicionar o outro por cima .
fonte
Este método permite que você tenha uma imagem em segundo plano e não apenas uma cor sólida, e pode ser usado para ter transparência em outros atributos, como bordas. Nenhuma imagem PNG transparente é necessária.
Use
:before
(ou:after
) no CSS e forneça o valor de opacidade para deixar o elemento em sua opacidade original. Assim, você pode usar: before para criar um elemento falso e fornecer o plano de fundo transparente (ou bordas) desejado e movê-lo para trás do conteúdo com o qual você deseja manter opacoz-index
.Um exemplo ( violino ) (observe que a
DIV
classe withdad
é apenas para fornecer algum contexto e contraste com as cores, esse elemento extra na verdade não é necessário e o retângulo vermelho é movido um pouco para baixo e para a direita para deixar visível o fundo para trás ofancyBg
elemento):com este CSS:
Nesse caso,
.fancyBg:before
possui as propriedades CSS que você deseja ter com transparência (fundo vermelho neste exemplo, mas pode ser uma imagem ou bordas). É posicionado como absoluto para movê-lo para trás.fancyBg
(use valores zero ou o que for mais apropriado para suas necessidades).fonte
O problema é que o texto realmente tem total opacidade no seu exemplo. Possui opacidade total dentro da
p
tag, masp
é apenas semi-transparente.Você pode adicionar uma imagem de plano de fundo PNG semitransparente em vez de realizá-la em CSS ou separar o texto e dividir em dois elementos e mover o texto sobre a caixa (por exemplo, margem negativa).
Caso contrário, não será possível.
Assim como Chris mencionou: se você usa um arquivo PNG com transparência, precisa usar uma solução alternativa em JavaScript para fazê-lo funcionar no irritante Internet Explorer ...
fonte
Quase todas essas respostas pressupõem que o designer deseja um fundo de cor sólida. Se o designer realmente deseja uma foto como plano de fundo, a única solução real no momento é o JavaScript, como o plugin jQuery Transify mencionado em outro lugar .
O que precisamos fazer é participar da discussão do grupo de trabalho CSS e fazer com que eles nos dêem um atributo de opacidade em segundo plano! Deve funcionar em conjunto com o recurso de múltiplos fundos.
fonte
Aqui está como eu faço isso (pode não ser o ideal, mas funciona):
Crie o
div
que você deseja ser semi-transparente. Dê uma classe / ID. Deixe em branco e feche. Dê a ele uma altura e largura definidas (digamos, 300 pixels por 300 pixels). Dê uma opacidade de 0,5 ou o que você quiser e uma cor de fundo.Em seguida, diretamente abaixo dessa div, crie outra div com um ID / classe diferente. Crie um parágrafo dentro dele, onde você colocará seu texto. Dê a
div
posição: relativa e superior:-295px
(isso é 295 pixels negativos ). Dê um índice z de 2 para uma boa medida e verifique se a opacidade é 1. Estilize o seu parágrafo como quiser, mas verifique se as dimensões são menores que as do primeirodiv
para não transbordar.É isso aí. Aqui está o código:
Isso funciona no Safari 2.x, mas eu não sei sobre o Internet Explorer.
fonte
:before
ou:after
Aqui está um plugin do jQuery que manipulará tudo para você, Transify ( Transify - um plugin do jQuery para aplicar facilmente transparência / opacidade ao plano de fundo de um elemento ).
Eu estava enfrentando esse problema de vez em quando, então decidi escrever algo que tornaria a vida muito mais fácil. O script tem menos de 2 KB e requer apenas uma linha de código para fazê-lo funcionar, além de animar a opacidade do plano de fundo, se você desejar.
fonte
Há algum tempo, escrevi sobre isso em Cross Browser Background Transparency With CSS .
Estranhamente, o Internet Explorer 6 permitirá que você torne o plano de fundo transparente e mantenha o texto na parte superior totalmente opaco. Para os outros navegadores, sugiro usar um arquivo PNG transparente.
fonte
Opacidade de fundo, mas não o texto tem algumas idéias. Use uma imagem semitransparente ou sobreponha um elemento adicional.
fonte
Se você é um cara do Photoshop , também pode usar:
Ou:
fonte
Para tornar o fundo de um elemento semitransparente, mas o conteúdo (texto e imagens) do elemento é opaco, você precisa escrever um código CSS para essa imagem e adicionar um atributo chamado
opacity
com valor mínimo.Por exemplo,
// Quanto menor o valor, mais transparente, ou menor será a transparência.
fonte
CSS 3 tem uma solução fácil para o seu problema. Usar:
Aqui,
rgba
significa vermelho, verde, azul e valor alfa. O valor verde é obtido por causa de 255 e a meia transparência é obtida por um valor alfa de 0,5.fonte
Se você estiver usando Menos , poderá usar
fade(color, 30%)
.fonte
cor de fundo: rgba (255, 0, 0, 0,5); Como mencionado acima, a melhor resposta é simplesmente colocar. Dizer que usar CSS 3, mesmo em 2013, não é simples, porque o nível de suporte de vários navegadores muda a cada iteração.
Embora
background-color
seja suportada por todos os principais navegadores (que não sejam novos no CSS 3) [1], a transparência alfa pode ser complicada, especialmente no Internet Explorer anterior à versão 9 e nas bordas do Safari antes da versão 5.1. [2]Usar algo como Compass ou SASS pode realmente ajudar na produção e compatibilidade entre plataformas.
[1] W3Schools: propriedade CSS background-color
[2] Blog da Norman: lista de verificação de suporte ao navegador CSS3 (outubro de 2012)
fonte
Você pode resolver isso no Internet Explorer 8 (ab) usando a sintaxe de gradiente. O formato da cor é ARGB. Se você estiver usando o pré-processador Sass, poderá converter cores usando a função interna "ie-hex-str ()".
fonte
Você pode usar CSS 3 : puro
rgba(red, green, blue, alpha)
, ondealpha
está o nível de transparência desejado. Não há necessidade de JavaScript ou jQuery.Aqui está um exemplo:
fonte
http://jsfiddle.net/x2ukko7u/ ?
fonte
Você pode fazer isso
rgba color code
usando CSS como este exemplo dado abaixo.fonte
Existe uma solução mais fácil para colocar uma sobreposição sobre uma imagem na mesma div. Não é o uso correto desta ferramenta. Mas funciona como um encanto para fazer essa sobreposição usando CSS.
Use uma sombra embutida como esta:
Isso é tudo :)
fonte
Você pode usar RGBA
(red, green, blue, alpha)
no CSS . Algo assim:Então, simplesmente fazer algo assim vai funcionar no seu caso:
fonte
De acordo com o meu ponto de vista, a melhor maneira de usar uma cor de fundo com opacidade é a seguinte. Se usarmos isso, não perderemos a opacidade para os outros elementos, como cor de teste, borda etc.
Use cor de fundo com opacidade
fonte
Eu normalmente uso essa classe para o meu trabalho. É muito bom.
fonte
Funcionou para mim ao usar o formato,
#AARRGGBB
então o que funcionava para mim era#1C00ff00
. Tente, porque eu já vi isso funcionando para alguns e não para outra pessoa. Estou usando em CSS.fonte
Você pode usar o valor de opacidade anexado ao valor hexadecimal:
Neste exemplo
aa
é a opacidade. Uma opacidade de00
meios transparentes eff
cores sólidas.A opacidade é opcional, portanto, você pode usar o valor hexadecimal como sempre:
Você também pode usar a maneira antiga com
rgba()
:E a
background
abreviação, se você quiser garantir que o plano de fundo não tenha outros estilos, como imagens ou gradientes:A partir da especificação do Mozilla ( https://developer.mozilla.org/en-US/docs/Web/CSS/background-color ):
fonte
Você pode usar cores RGB com opacidade como um código de cores em RGB (63, 245, 0) e adicionar opacidade (como 63, 245, 0, 0,5) e também substituir RGB por RGBA.
A
deve ser usado para opacidade.fonte