Categories: CSSTestestodas

Teste-seu-conhecimento-02

Você sabe como resolver este ‘bug’?

Se você já construiu um layout baseado em CSS é muito provável que tenha se deparado com esta situação.
Você zerou as margens e paddings superior e inferior para o elemento body e ao visualizar seu layout ocorre o seguinte:

No Internet Explorer está tudo certinho e de acordo com suas previsões, ou seja, a sua página está ‘coladinha’ nos limites superior e inferior da janela do navegador. Mas, no Firefox a página encontra-se ‘descolada’ daqueles limites, mostrando um espaçamento como se fosse uma margem entre os limites da página e da janela do navegador.

Neste link, construi uma página (na verdade, uma simulação simples, constando apenas de alguns parágrafos dentro de uma DIV) mostrando esta inconsistência de renderização. Abra a página no Internet Explorer e no FireFox e compare. Observe que no Internet Explorer não existe um espaço extra acima e abaixo da página.

Perguntas:

  1. Qual navegador apresenta o comportamento correto
    O Internet Explorer que honra as declarações de margens e paddings zerados ou o FireFox que acresenta uma margem?
  2. Você sabe explicar porque isto acontece?
  3. Que declarações CSS devo usar para fazer o FireFox renderizar igual ao Internet Explorer?
  4. Que declarações CSS devo usar para fazer o Internet Explorer renderizar igual ao FireFox?

Nota: ‘Hacks’ não devem ser colocados no (X)HTML, assim resolva o problema sem acrescentar ID’s, classes ou introduzir qualquer alteração na marcação da página. Use somente regras CSS.

Maujor

Exerci o magistério paralelamente a minha carreira profissional por toda uma vida e ao longo destes trinta anos aprendi tanto quanto ensinei. Sou um apaixonado por Web Standards e desenvolvo o site de tutoriais CSS para Web Design.

View Comments

  • Uau, essa discussão ja dura 3 anos :-)
    #container{
    padding:1px 0px;
    }

    Pra mim isso é um erro do Firefox, ele considera que se um bloco pai não tem borda nem padding então a margem de um elemento interno "escapa" pra fora do elemento pai.
    assim a margem de p sai para fora do #container

    Pelo que vi nos links indicados nesse debate, é correto colapsar margens juntas, mas pra mim é um correto burro.

    Outra coisa burra do Firefox que eu acho é o fato do Padding ser externo às dimensões. No quadro com o código abaixo o quadro ficara com 30 de largura por 40 de altura e não 20x20 como seria mostrado no IE e parace o obvio.
    .exemplo{
    padding: 10px 5px;
    width:20px;
    height:20px
    }

    Mas no mais, o Firefox é MUITO mais obediente aos códigos.
    todos outros funcionam, hehe, no IE não.

  • olha meu site com resolvo isso?
    http://www.lucianoferreiraolimpia.com.br/
    no IE o anuncio fica no meio da pagina e no firefox fica certo la no topo onde eu quero que fique
    da uma forcinha ainda
    (entendo muito mais d php do css, pod uma coisa dessa?)
    huhushus
    desd ja agradeço

  • No meu caso foi simples e o que me ajudou
    * { padding:0; margin:0; }

    !!! valeu a dica

  • Para o FF exibir igual ao IE, fiz assim:

    * { padding:0; margin:0; }

    Já para o IE exibir igual ao FF fiz assim:

    #container {
    width:400px;
    margin:0 auto;
    background:#ccc;
    margin-top:10px;
    margin-bottom:10px;
    }

    #container>p{padding-top:0;
    margin:0 auto;
    }

  • Olá amigos:

    Testei o css reset, e esse não resolveu para mim, não sei pq, acompanhei igual o imasters.com.br passou.
    Mais consegui resolver com

    * { padding:0; margin:0; }

    para firefox e ie

    abraços

  • Cada navegador define um valor inicial para algumas propriedades de seus elementos.
    Entao nao tem navegador errado, se vc nao quer te esse tipo de problema defina um valor inicial pra todos os elementos
    Pra quem quiser uma solucao pronta procure o CSS reset do yahoo
    :p

  • Quem renderiza errado e sempre renderizou errado é o IE, e como tudo da microsoft que tenta definir um padrao proprio, sem levar em conta o padrao da web. O povo está tao acostumado a fazer pagina pro IE que acha estranho quando tudo nao funciona em outros browsers como mozilla, firefox, opera.. achando que o ie é o unico inteligente.

  • Oi pra todos. Galera meu ie7 esta lendo o do FF. Tipo eu defino um valor para margin-top: 10px; e depois redefino para FF , margin-top: 5px ; ainda sim o coisa ruim do IE7 pega o alguem pode me dar uma ajuda?

  • 1-
    QUEM ESTÁ CERTO?
    FF

    QUAL O EFEITO MAIS ESPERADO?
    IE

    2-

    QUEM É O DONO DA MARGEM?
    a margem é do elemento p quem gera a margem é a propriedade display: block (padrão de 'p'), que cria uma margem superior e inferior ao bloco

    PORQUE A MARGEM NÃO APARECE NO IE?
    Não se engane! no IE a margem tbm aparece, no FF aparece o fundo amarelo, no IE você vê o fundo cinza mas a distância continua existindo.

    ENTÃO ONDE ESTA O PROBLEMA?
    O "problema" está na ALTURA do #container (pai de 'P').
    Quando a altura do container pai não é definido quem define a altura é a soma das alturas do conteudo (propriedade height) nesse caso não entram as margens.
    O fundo é renderizado começando a partir do inicio do bloco por isso o fundo aparece.

    3-
    COMO FAZER O FF EXIBIR IGUAL AO IE?
    então não é para eliminar a margem, certo?? Você vai querer apenas que o fundo englobe as margens.
    #container {
    width:400px;
    margin: 0 auto;
    background: #ccc;
    overflow:hidden;
    }
    essa opção serve pra ocultar todo o conteudo que exceder a area do #container, nesse caso como não foi definido uma altura as margens dos elementos filhos entrarão no calculo da altura.
    (é aqui que a maioria esbarra quando está começando com CSS). Quem desenvolve só para o IE reclama que o FF "cria margens". Já quem está acostumado com padrões fica enfurecido quando o IE aumenta o tamanho das DIV´s.

    QUERO ELIMINAR AS MARGENS de ´p´! COMO FAÇO?
    Isto significa( margin:0;)
    vc pode fazer isso de 3 maneiras:

    *{
    margin:0;
    }//as vezes generalizar pode nao ser o ideal pra você. Voce poderá acabar tendo que definir margens para todos os paragrafos... isso poderá lhe dar um trabalho desnecessário futuramente.

    p{
    display:inline:
    }//isso vai acabar com a organização dos paragrafos :(

    #container p{
    margin:0;
    }

    4-
    retire a propriedade margin:0; de body.

Share
Published by
Maujor

Recent Posts

Teste seu conhecimento #20

Em 2006 comecei a publicar nesse blog uma série de desafios CSS que consistiam em…

7 anos ago

Teste seu conhecimento #19

Há muito tempo que eu não publico um "Teste seu conhecimento". Esta semana, revendo algumas…

10 anos ago

JavaScript bubbling e capturing

Introdução Elementos da marcação HTML podem ser aninhados uns dentro de outros, criando-se uma cadeia…

10 anos ago

HTML5 – W3C versus WHATWG

HTML5? Web universal? É comum eu me deparar com dúvidas sobre a HTML5 não só…

10 anos ago

Seria esse o futuro das imagens responsivas?

Quem é Tab Atkins Jr? Tab Atkins Jr, um desenvolvedor americano, trabalhou durante muitos anos…

11 anos ago

BrazilJS Conf 2013

Pessoal, a BrazilJS Conf 2013 disponibilizou para o Maujor cupons de desconto para serem oferecidos…

11 anos ago