Eu isolei um pequeno caso de teste do z-index
bug do IE7 , mas não sei como corrigi-lo. Eu tenho jogado o z-index
dia todo.
O que há de errado z-index
no IE7?
Teste CSS:
input {
border: 1px solid #000;
}
div {
border: 1px solid #00f;
}
ul {
border: 1px solid #f00;
background-color: #f00;
list-style-type: none;
margin: 0;
padding-left: 0;
z-index: 1000;
}
li {
color: #fff;
list-style-type: none;
padding-left: 0;
margin-left: 0;
}
span.envelope {
position: relative;
}
span.envelope ul {
position: absolute;
top: 20px;
left: 0;
width: 150px;
}
Teste de HTML:
<form>
<label>Input #1:</label>
<span id="envelope-1" class="envelope">
<input name="my-input-1" id="my-input-1" />
<ul>
<li>item</li>
<li>item</li>
<li>item</li>
<li>item</li>
</ul>
</span>
<br><br>
<label>Input #2:</label>
<span id="envelope-2" class="envelope">
<input name="my-input-2" id="my-input-2" />
</span>
</form>
css
internet-explorer-7
z-index
rezna
fonte
fonte
Respostas:
O índice Z não é uma medida absoluta. É possível que um elemento com z-index: 1000 esteja atrás de um elemento com z-index: 1 - desde que os respectivos elementos pertençam a diferentes contextos de empilhamento .
Ao especificar o z-index, você o especifica em relação a outros elementos no mesmo contexto de empilhamento e, embora o parágrafo da especificação CSS no Z-index indique que um novo contexto de empilhamento é criado apenas para conteúdo posicionado com um índice z diferente de auto (ou seja, o documento inteiro deve ser um único contexto de empilhamento), você fez construir uma extensão posicionado: Infelizmente IE7 interpreta conteúdo posicionado sem z-index isso como um novo contexto de empilhamento.
Em resumo, tente adicionar este CSS:
ou redesenhe o documento para que seus períodos não tenham posição: relativa por mais tempo:
Consulte http://www.brenelz.com/blog/2009/02/03/squish-the-internet-explorer-z-index-bug/ para obter um exemplo semelhante desse bug. O motivo pelo qual um elemento pai (envelope-1 no seu exemplo) funciona com um índice z mais alto é porque todos os filhos do envelope-1 (incluindo o menu) se sobrepõem a todos os irmãos do envelope-1 (especificamente, envelope-2).
Embora o z-index permita definir explicitamente como as coisas se sobrepõem, mesmo sem o z-index, a ordem das camadas está bem definida . Finalmente, o IE6 possui um bug adicional que faz com que caixas de seleção e iframes flutuem sobre tudo o resto.
fonte
http://www.vancelucas.com/blog/fixing-ie7-z-index-issues-with-jquery/
fonte
Tente atribuir ao elemento pai um valor mais alto do índice z (pode ser ainda mais alto que o próprio valor do índice z da criança) para corrigir o erro.
fonte
Eu encontrei esse problema, mas em um projeto grande em que as alterações em HTML precisavam ser solicitadas e se tornaram um problema inteiro, estava procurando uma solução css pura.
Ao colocar
position:relative; z-index:-1
no conteúdo principal do meu corpo, meu cabeçalho suspenso subitamente aparece acima do conteúdo do corpo no ie7 (ele já era exibido sem problemas em todos os outros navegadores e no ie8 +)O problema era que isso desabilitava todas as ações de foco e clique em todo o conteúdo do elemento com o
z-index:-1
comando I, então, fui para o elemento pai de toda a página e forneci umposition:relative; z-index:1
O que corrigiu o problema e manteve a funcionalidade correta de camadas.
Parece um pouco hacky, mas funcionou conforme necessário.
fonte
Eu descobri que tinha que colocar uma designação especial de índice z em div em uma folha de estilo específica ie7:
div {z-index: 10; }
Para o índice z de divs não relacionadas, como uma nav, para mostrar acima do controle deslizante. Eu não poderia simplesmente adicionar um índice z ao div deslizante.
fonte
html {z-index:1; position:relative;}
permitir que o menu repassasse a imagem do carrossel no IE.Se a indexação z mais alta mencionada anteriormente nos nós pais não atender às suas necessidades, você poderá criar uma solução alternativa e direcioná-la para navegadores problemáticos por comentários condicionais do IE ou usando a detecção de recurso (mais idealista) fornecida pelo Modernizr.
Teste rápido (e obviamente funcionando) para o Modernizr:
fonte
Parece que não é um bug, ou seja, apenas para uma compreensão diferente do padrão css. Se o contêiner externo não for especificado, o índice z, mas o elemento interno especificou um índice z mais alto. Portanto, o irmão do contêiner pode sobrepor o elemento de alto índice z. Mesmo assim, isso ocorre apenas no IE7, mas o IE6, IE8 e Firefox estão ok.
fonte
No IE6 em geral, certos elementos da interface do usuário são implementados com controles nativos. Esses controles são renderizados em uma fase completamente separada (janela?) E sempre aparecem acima de qualquer outro controle, independentemente do z-index. Caixas de seleção são outro controle tão problemático.
A única maneira de contornar esse problema é construir o conteúdo que o IE renderiza como uma "janela" separada - ou seja, você pode colocar uma caixa de seleção sobre uma caixa de texto ou, mais útil, um iframe.
Em resumo, você precisará colocar "em movimento", como itens de menu em um iframe, para permitir que o IE coloque esses controles de interface do usuário acima.
Isso deveria ter sido corrigido no IE7 (consulte http://blogs.msdn.com/ie/archive/2006/01/17/514076.aspx ), mas talvez você esteja executando algum tipo de modo de compatibilidade?
fonte
Esse bug parece ser um problema separado do bug do IE padrão de contexto de empilhamento separado. Eu tive um problema semelhante com várias entradas empilhadas (essencialmente uma tabela com um preenchimento automático em cada linha). A única solução que encontrei foi fornecer a cada célula um valor decrescente do índice z.
fonte
Se você deseja criar um menu suspenso e ter um problema com o índice z, pode resolvê-lo criando índices z com o mesmo valor (índice z: 999; por exemplo). Basta colocar o índice z nos divs pai e filho e isso resolverá o problema. Eu resolvo o problema com isso. Se eu colocar índices z diferentes, claro, ele mostrará minha div filho sobre a div pai, mas, quando eu quiser mover o mouse da guia menu para a submenu div (lista suspensa), ela desaparecerá ... eu coloquei z-indexes do mesmo valor e resolvo o problema ..
fonte
Eu o resolvi usando as ferramentas de desenvolvedor do IE7 (é uma barra de ferramentas) e adicionando um índice z negativo ao contêiner da div que estará abaixo da outra div.
fonte