Existe uma maneira de ter um DIV filho dentro de um DIV de contêiner pai que seja mais largo que seu pai. O DIV filho precisa ter a mesma largura da janela de exibição do navegador.
Veja o exemplo abaixo:
O DIV filho deve permanecer como filho do div principal. Eu sei que posso definir margens negativas arbitrárias na div filho para torná-la mais ampla, mas não consigo descobrir como torná-la essencialmente 100% de largura do navegador.
Eu sei que posso fazer isso:
.child-div{
margin-left: -100px;
margin-right: -100px;
}
Mas preciso que o filho tenha a mesma largura do navegador, que é dinâmico.
Atualizar
Obrigado por suas respostas, parece que a resposta mais próxima até agora é tornar a posição DIV filho: absoluta e defina as propriedades esquerda e direita como 0.
O próximo problema que tenho é que o pai tem a posição: relativa, o que significa que as propriedades esquerda e direita ainda são relativas à div pai e não ao navegador, veja o exemplo aqui: jsfiddle.net/v2Tja/2
Não consigo remover a posição relativa dos pais sem estragar tudo o resto.
position: relative
? Para que você precisaposition: relative
? Acho que estou perguntando: o que você está tentando fazer?Respostas:
Use posicionamento absoluto
fonte
position:fixed
. por que não funciona corretamente?Aqui está uma solução genérica que mantém o elemento filho no fluxo do documento:
Definimos o
width
elemento filho para preencher toda a largura da janela de visualização e, em seguida, fazemos com que ela atenda à borda da tela movendo-a paraleft
uma distância de metade da janela de visualização, menos 50% da largura do elemento pai.Demo:
O suporte do navegador para vw e calc () geralmente pode ser visto como IE9 e mais recente.
Nota: Isso pressupõe que o modelo da caixa está definido como
border-box
. Semborder-box
, você também teria que subtrair bordas e bordas, tornando essa solução uma bagunça.Nota: Recomenda-se ocultar o estouro horizontal do seu contêiner de rolagem, pois determinados navegadores podem optar por exibir uma barra de rolagem horizontal, apesar de não haver estouro.
fonte
position: relative
pai!Eu procurei em toda parte por uma solução para esse problema por um longo tempo. Idealmente, queremos ter o filho maior que o pai, mas sem conhecer antecipadamente as restrições do pai.
E finalmente encontrei uma resposta genérica brilhante aqui . Copiando textualmente:
fonte
90vw
. Além disso, parece quemargin-right
não tem efeito em nenhum caso.Com base na sugestão original da sua sugestão (definindo margens negativas), tentei criar um método semelhante usando unidades de porcentagem para a largura dinâmica do navegador:
HTML
CSS:
As margens negativas deixarão o conteúdo fluir da DIV principal. Portanto, defini
padding: 0 100%;
o botão para empurrar o conteúdo de volta aos limites originais do Chlid DIV.As margens negativas também farão com que a largura total do .child-div se expanda para fora da janela de exibição do navegador, resultando em uma rolagem horizontal. Portanto, precisamos cortar a largura da extrusão aplicando um
overflow-x: hidden
a um DIV dos avós (que é o pai da divisão dos pais):Aqui está o JSfiddle
Já experimentei o de Nils Kaspersson
left: calc(-50vw + 50%)
; funcionou perfeitamente no Chrome e no FF (ainda não tenho certeza sobre o IE) até descobrir que os navegadores Safari não o fazem corretamente. Espero que eles tenham resolvido isso assim que eu realmente gosto desse método simples.Isso também pode resolver o problema em que o elemento Parent DIV deve ser
position:relative
As 2 desvantagens deste método de solução alternativa são:
Informe-me se houver algum problema com esse método;). Espero que ajude.
fonte
O Flexbox pode ser usado para tornar um filho mais amplo que seu pai, com três linhas de CSS.
Só da criança
display
,margin-left
ewidth
necessidade de ser definido.margin-left
depende da criançawidth
. A fórmula é:As variáveis CSS podem ser usadas para evitar o cálculo manual da margem esquerda.
Demo # 1: Cálculo manual
Demo # 2: Usando variáveis CSS
fonte
Eu usei isso:
HTML
CSS
fonte
você pode tentar a posição: absoluto. e dê largura e altura, em cima: 'eixo y a partir de cima' e à esquerda: 'eixo x'
fonte
Eu tive uma questão semelhante. O conteúdo do elemento filho deveria permanecer no elemento pai enquanto o plano de fundo tinha que estender a largura total da janela de exibição.
Resolvi esse problema criando o elemento filho
position: relative
e adicionando um pseudo elemento (:before
) a eleposition: absolute; top: 0; bottom: 0; width: 4000px; left: -1000px;
. O pseudo elemento fica atrás do filho real como um pseudo elemento de fundo. Isso funciona em todos os navegadores (mesmo IE8 + e Safari 6+ - não tem a possibilidade de testar versões mais antigas).Violino de exemplo pequeno: http://jsfiddle.net/vccv39j9/
fonte
overflow-x: hidden
.Adicionando à solução de Nils Kaspersson, também estou resolvendo a largura da barra de rolagem vertical. Estou usando
16px
como exemplo, que é subtraído da largura da porta de exibição. Isso evitará que a barra de rolagem horizontal apareça.fonte
16px
que o que você precisa subtrair porque está causando a barra de rolagem horizontal é a margem / preenchimento padrão do navegador, em vez de subtraí-lo, basta usar isso,html, body{ margin:0; padding:0 }
assim você não precisará fazer cálculos extras para o16px
Supondo que o pai tenha uma largura fixa, por exemplo,
#page { width: 1000px; }
e esteja centralizado#page { margin: auto; }
, você deseja que o filho caiba na largura da janela de exibição do navegador que você pode simplesmente fazer:fonte
Para tornar o div filho tão amplo quanto o conteúdo, tente o seguinte:
fonte
fonte
Eu sei que isso é antigo, mas para quem vem a isso como resposta, você faria assim:
Estouro oculto em um elemento que contém o elemento pai, como o corpo.
Dê ao seu elemento filho uma largura muito maior que a sua página e posicione-o na esquerda absoluta em -100%.
Aqui está um exemplo:
Também aqui está um JS Fiddle: http://jsfiddle.net/v2Tja/288/
fonte
Então a solução será a seguinte.
HTML
CSS
fonte
Eu tentei algumas de suas soluções. Este :
é de longe o melhor, já que não precisamos de css extra para telas menores. Eu criei um codePen para mostrar os resultados: usei uma div pai com uma imagem de plano de fundo e uma div div infantil com conteúdo interno.
https://codepen.io/yuyazz/pen/BaoqBBq
fonte