Eu não quero herdar a opacidade filho do pai no CSS.
Eu tenho uma div que é o pai e outra dentro da primeira div que é a criança.
Quero definir a propriedade opacity na div pai, mas não quero que a div child herde a propriedade opacity.
Como eu posso fazer isso?
opacity
é um pouco comodisplay: none
neste sentido.Respostas:
Em vez de usar opacidade, defina uma cor de fundo com rgba, onde 'a' é o nível de transparência.
Então, em vez de:
usar
fonte
.png
:)A opacidade não é realmente herdada no CSS. É uma transformação de grupo pós-renderização. Em outras palavras, se um
<div>
tiver opacidade definida, você renderiza a div e todos os seus filhos em um buffer temporário e, em seguida, compõe esse buffer inteiro na página com a configuração de opacidade especificada.O que exatamente você quer fazer aqui depende da renderização exata que você está procurando, o que não está claro na pergunta.
fonte
opacity: .7;
sobrediv#container
faz com que cada elemento filho - deul
/li
paraimg
ap
- também têm a mesma opacidade. Certamente é herdado.opacity: 0.7
todos os descendentes para ver como seria a herança. Como eu disse, o que acontece é que a opacidade é aplicada a todo o grupo "elemento e todos os seus descendentes" como uma unidade, em vez de herdar.Como outros usuários mencionaram neste e em outros threads semelhantes, a melhor maneira de evitar esse problema é usar RGBA / HSLA ou usar um PNG transparente.
Mas, se você quiser uma solução ridícula, semelhante à vinculada em outra resposta neste tópico (que também é meu site), aqui está um novo script que escrevi que corrige esse problema automaticamente, chamado thatsNotYoChild.js:
http://www.impressivewebs.com/fixing-parent-child-opacity/
Basicamente, ele usa JavaScript para remover todos os filhos da div pai e, em seguida, reposicionar os elementos filhos de volta ao local em que deveriam estar, sem ser realmente filhos desse elemento.
Para mim, esse deveria ser o último recurso, mas achei que seria divertido escrever algo que fizesse isso, se alguém quiser fazer isso.
fonte
Um pequeno truque se seu pai for transparente e você desejar que seu filho seja o mesmo, mas definido exclusivamente (por exemplo, para substituir os estilos de agente de usuário de um menu suspenso selecionado):
fonte
A opacidade do elemento filho é herdada do elemento pai.
Mas podemos usar a propriedade css position para realizar nossa conquista.
A div do contêiner de texto pode ser colocada fora da div pai, mas com o posicionamento absoluto projetando o efeito desejado.
Requisito ideal ------------------ >>>>>>>>>>>>>
HTML
CSS
Resultado:--
o texto não está visível porque herdou a opacidade da div pai.
Solução ------------------- >>>>>>
HTML
CSS
Resultado :
o texto é visível com a mesma cor do plano de fundo porque a div não está na div transparente
fonte
A pergunta não definiu se o plano de fundo é uma cor ou uma imagem, mas como o @Blowski já respondeu por planos de fundo coloridos, há um hack para as imagens abaixo:
Dessa forma, você pode manipular a cor da sua opacidade e até adicionar bons efeitos de gradiente.
fonte
Parece que os
display: block
elementos não herdam a opacidade dosdisplay: inline
pais.Exemplo de Codepen
Talvez por ser uma marcação inválida e o navegador os esteja separando secretamente? Porque a fonte não mostra isso acontecendo. Estou esquecendo de algo?
fonte
As respostas acima parecem complicadas para mim, então escrevi o seguinte:
kb-mask-overlay
é seu pai (opacidade),pop-up
são seus filhos (sem opacidade). Tudo abaixo do restante do seu site.fonte
Não existe uma abordagem de tamanho único, mas uma coisa que achei particularmente útil é definir opacidade para os filhos diretos de uma div, exceto a que você deseja manter totalmente visível. Em código:
e css:
Caso você tenha cores / imagens de plano de fundo no pai, corrija a opacidade das cores com rgba e imagem de plano de fundo aplicando filtros alfa
fonte
Se você precisar usar uma imagem como plano de fundo transparente, poderá contorná-la usando um pseudo-elemento:
html
css
fonte
Minha resposta não é sobre layout estático de pais e filhos, é sobre animações.
Eu estava fazendo uma demo svg hoje e precisava que o svg estivesse dentro de div (porque o svg é criado com a largura e a altura do div dos pais, para animar o caminho), e esse div pai precisava ficar invisível durante a animação do caminho svg (e depois essa div deveria
animate opacity from 0 to 1
, é a parte mais importante). E como parent divopacity: 0
estava escondendo meu svg, me deparei com esse hack com avisibility
opção (child withvisibility: visible
pode ser visto dentro de parent withvisibility: hidden
):E então, em js, você remove a
.invisible
classe com a função timeout, adicionando.opacity-zero
classe, aciona o layout com algo comowhatever.style.top;
e remove a.opacity-zero
classe.Melhor verificar esta demonstração http://codepen.io/suez/pen/54bbb2f09e8d7680da1af2faa29a0aef?editors=011
fonte
No mac, você pode usar o editor de visualização prévia para aplicar opacidade a um retângulo branco colocado sobre a imagem .png antes de colocá-la no .css.
1)
Logotipo da imagem
2) Crie um retângulo ao redor da imagem
Retângulo ao redor do logotipo
3) Altere a cor do plano de fundo para o
retângulo branco que ficou branco
4) Ajuste a imagem opaca da opacidade do retângulo
fonte
Atribua a opacidade 1.0 à criança recursivamente com:
Exemplo:
fonte
Para outras pessoas que tentam fazer uma tabela (ou algo assim) parecer focada em uma linha usando opacidade. Como o @Blowski disse, use cores e não opacidade. Confira este violino: http://jsfiddle.net/2en6o43d/
fonte