Simulando position fixed no Internet Explorer (IE) - sem javascript
Bom, todo mundo sabe que a propriedade position igual a fixed faz com que o elemento fique fixo na janela do browser independente da movimentação da barra de rolagem.
Isto é uma verdade pra navegadores que seguem bem os padrões (OP, FF,etc) mas para o IE (Internet Explorer até o 7) isto não funciona. Simplesmente não funciona.
Como resolver isto SEM JAVASCRIPT só no CSS?
Primeiramente imagine duas divs dentro de um documento:
- Uma das divs tem dimensões de 400×400, tem um texto gigantesco como conteúdo, porém seu overflow é scroll, o que permite que seja possível ler o conteúdo gigantesco.
- A outra div é uma pequena imagem de 25×25 que está posicionada exatamente sobre a div do conteúdo anterior.
…
Bom, se eu mexer a barra de rolagem da div do conteúdo não irá interferir em nada na movimentação da div que tem a imagem. A imagem continuará quieta sobre o texto.
Bingo!! Agora é só aumentar o tamanho da div com conteúdo pra ocupar a janela inteira.
Pra você não ter que quebrar a cabeça eu já deixei o código prontim só pra você inserir no seu documento (e fazer adaptações se achar necessário).
O Exemplo: Simulando position fixed no Internet Explorer - IE
O código pronto
<style type="text/css">
/* FAZ OS POSITION FIXED NOS NAVEGADORES PADRÃO (não mexa) */
.fixed { position: fixed !important; }
</style>
<!--[if lt IE 7]>
<style type="text/css">
/* FAZ O POSITION FIXED PARA O IE (não mexa).
Para funcionar o DTD do documento deve estar correto. E não ser quirksMode
By Micox - micoxjcg@yahoo.com.br - elmicox.com - elmicox.blogspot.com
*/
.fixed { position: absolute !important; }
body { height: 100% !important; width: 100% !important;
margin: 0 !important; position: relative; }
html { overflow-y: hidden !important; }
#newbody { position: relative !important; overflow-y: scroll !important;
height: 100% !important; width: 100% !important; margin: 0 !important; }
</style>
<![endif]-->
<style type="text/css">
/* COLOQUE AQUI O RESTANTE DAS ESTILIZAÇÕES QUE NÃO TENHAM A VER COM POSITION FIXED
MAS NÃO DECLARE MARGINS, PADDINGS, POSITIONS, DIMENSÕES OU OVERFLOWS PARA HTML, BODY E NEWBODY
*/
</style>
Detalhes:
Da mesma forma que está no exemplo, deverá haver um elemento pai chamado newbody que conterá todo o conteúdo não-fixed e, fora deste, deverão estar todos os elementos que desejar que sejam fixed. Olha o exemplo lá que vai entender.
A página não pode ser renderizada no quirks mode, ou seja, deve estar com o document type definition (DTD) correto;
Pode dar boró se alterar margin, padding, posições, dimensões ou overflows para os elementos HTML, body e newbody.
Perceba que não é aproveitamento de bug do IE. É apenas uma técnica que também funcionaria em outros navegadores se fosse necessário usar.
Muitos gringos já falaram sobre a técnica, mas aqui no Brasol parece que ninguém falou ainda. Estranho…:
Comenta aí malucada. Ninguém comenta mais
Não mande dúvidas nos comentários ou no meu e-mail. Mande elas para o fórum de desenvolvedores Webly. Tem mais gente lá gabaritada a responder e você não fica dependendo só do mico.
Setembro 25th, 2007 11:46
e aí cara sempre mandando bem !
Setembro 25th, 2007 15:05
“O site esta de mudança”
Altera o feed ^^
Da hora o seu madruga na pagina hauhuhauehaue
Setembro 26th, 2007 00:51
interessante, estou rodando windows vista home premium, IE7 não vai fica tudo esquisito
Setembro 26th, 2007 08:08
@diego, não entendi: funfou ou não funfou no IE7? Outros caras que eu conversei disseram que funfou.
@danilo, Igor: valeu caras!
Setembro 26th, 2007 08:08
@diego, não entendi: funfou ou não funfou no IE7? Outros caras que eu conversei disseram que funfou.
@danilo, Igor: valeu caras!
Setembro 26th, 2007 18:58
Sempre salvando nossa pele, né macaco?
Vlw velhinho!
Outubro 8th, 2007 16:38
Olhe que legal não conhecia essa técnica antes, se eu fosse mais empenhado até iria colocá-la nos sistemas antigos onde eram necessários mas vou deixar eles la quietinhos e utilizar nos proximos ehehhehe
valeuuuuuuuuuu micao!
Novembro 13th, 2007 16:54
grande mico! muito bom!!
uma coisa, que to fazendo uma parada aqui, que a div vai mudando de tamanho e vai ficando com overflow, ai nao a barra de rolagem da div fixada nao estava indo pra baixo, dai pra resolver isso eu coloquei um z-index nessa div e funfou diboa!
valeu!!
Dezembro 19th, 2007 09:38
Isso não funcionou aki so funciona no firefox
Dezembro 19th, 2007 10:10
paladino, seu problema é no IE7?
Esse IE7 tá me dando trabalho ehheahe, uns falam que funfa, outros que não funfa..
Abril 4th, 2008 09:07
eu consegui fazer o position fixed no IE6 e 7 com outro metodo q eu achei num forum de jquery sobre um plugin maluco la q eu nao me lembro o nome.
nao eh javascript. eh css msm, utilizando expression.
sei q esse post ta meio atrasado, mass….
bom, deem uma olhada la.
http://www.gruporrp.com.br/versatylesports/teste.html
ta funcionando bonitinho!!!! vlws!
Abril 4th, 2008 09:23
OOooo,
Muito bom Julio.
O Expression tá sendo a salvação do IE6, já fiz uma solução pro hover no IE6.
O lance é muito divertido. Em breve vou fazer uma complilação.
Abril 18th, 2008 11:15
Ops!
Legal! Eu não conhecia essa fixed … legal mesmo!
Outubro 29th, 2008 15:51
Muito bom!
Parabéns…. da pra vê que usando a criatividade podemos fazer muitas coisas boas.
Dezembro 30th, 2008 15:40
Muito boa a alternativa. No entanto, para quem se interessar, existe outra alternativa que, conforme o autor do POST, é realmente mais limpa e tão funcional quanto essa.
Confiram no link: http://forum.imasters.uol.com.br/lofiversion/index.php/t252392.html
Maio 27th, 2009 10:12
Sr. elmicox hahaha sou um grande fã do ajax depois que descobri-o-lo haha fiquei estatutesfato e gostaria de saber de vossa senhoria oh el micox tem como eu criar um site fazendo com que todas as páginas se carreguem dentro de uma div? ou é querer demais? hahahahaa
Maio 27th, 2009 11:13
Opa bruno, por favor leia: http://elmicox.blogspot.com/2006/10/ajax-use-com-moderao.html
Maio 28th, 2009 08:43
ola micox .. li..entendi…e concordei plenamentee hahahaha
omeu objetivo com essa pergunta foi tentar por exemplo intender o gmail ou o orkut .. mais por que????
na construção de um site que fiz, eu nem me precuopei com ajax e o site foi pro ar sem ele depois vi a necessidade do ajax mais somente nos formularios por que era um painel de controle e tinha muitos redirecionamento uma complicação e ainda um painel grande…
to construido um site e tava planejando colocar algo parecido com aquela janelinha de bate-papo instantaneo haha do orkut e gmail.. dai que veio a pergunta imaginando que serial assim que os estariam criados…
[]s velho
Maio 28th, 2009 10:11
Aquilo lá de bate-papo já é um pouco mais complicado pois mexe com muita programação server-side. Mas dá pra fazer sim. hehehe
Junho 15th, 2009 10:53
ola micox, mais eu ainda naum consegui intender se vc souber me responda ok.. aquelas janelinhas de bate papo que ficam fixas naum importa pra que pagina tu vá elas permanecem estaticas nem piscam nem dao reloader dai ja muita gente dizer “é ajax” num post seu no forum imaster tem uma função que vc criou que é sow de bola eu conseguiria com essa função criar a navegação com uma janelinha fixa onde eu consigo navagar nas páginas do site e ela se manter vizivel e so o resto da página mudar exatamente como o orkut so que ele naum passa o GET parece que o do orkut ele realmente vai para a pagina solicitada no caso do que eu to de falando ele somente puxa a pagina na div determinada .. eisss a minha grande duvida .. kkk gostaria de fazer um esquema assim por isso meu interesse em saber como funciona ..abraço cara sucesso tu manda muito flww
Junho 25th, 2009 14:10
Ae Micox….
Acho que sei pq esse codigo as vezes funciona no IE e as vezes não.
Por incrivel que pareça, a extensão da merda do arquivo….
Quem ta fazendo extensao .html…..ta funcionando normal….. quem ta usando .php (por exemplo)….naum ta conseguindo alinhar….que é o meu caso.
Bom, enquanto isso, continuo minha saga atras de uma forma para alinhar isso nos arquivos .php….
Vou ter que apelar para JS ou Jquery!!
Valew…
Abraços
Junho 25th, 2009 14:17
Ué Rodrigo, aqui pra mim sempre funcionou.
Acredito que não tenha nada a ver com a extensão do arquivo mas sim se o arquivo está corretamente validado ou não: validator.w3.org
Arquivos não validados dão problemas inexperados em qualquer situação. Valide sempre.