Como posso alcançar a seguinte estrutura sem usar tabelas ou JavaScript? As bordas brancas representam bordas de divs e não são relevantes para a pergunta.
O tamanho da área no meio vai variar, mas ele terá valores exatos de pixels e toda a estrutura deve ser dimensionada de acordo com esses valores. Para simplificá-lo, eu precisaria de uma maneira de definir a largura "100% - n px" para as divs superior-média e inferior-média.
Eu apreciaria uma solução limpa entre navegadores, mas, caso isso não seja possível, os hacks CSS o farão.
Aqui está um bônus. Outra estrutura com a qual tenho lutado e acabo usando tabelas ou JavaScript. É um pouco diferente, mas apresenta novos problemas. Eu tenho usado principalmente no sistema de janelas baseado em jQuery, mas gostaria de manter o layout fora do script e controlar apenas o tamanho de um elemento (o do meio).
Respostas:
Você pode usar elementos aninhados e preenchimento para obter uma borda esquerda e direita na barra de ferramentas. A largura padrão de um
div
elemento éauto
, o que significa que ele usa a largura disponível. Você pode adicionar preenchimento ao elemento e ele ainda permanece dentro da largura disponível.Aqui está um exemplo que você pode usar para colocar imagens como cantos arredondados esquerdo e direito e uma imagem central que se repete entre eles.
O HTML:
O CSS:
fonte
>
operador ainda não era bom o suficiente para ser confiável.calc
IE 8 ou as versões atuais do Anroid Browser ou Opera. caniuse.com/#search=calcNova maneira que acabei de me deparar com: css
calc()
:Origem: largura do css 100% menos 100px
fonte
Embora a resposta de Guffa funcione em muitas situações, em alguns casos você pode não querer que os pedaços de preenchimento esquerdo e / ou direito sejam os pais da divisão central. Nesses casos, você pode usar um contexto de formatação de bloco no centro e flutuar os divs de preenchimento para a esquerda e para a direita. Aqui está o código
O HTML:
O CSS:
Eu sinto que essa hierarquia de elementos é mais natural quando comparada às divs aninhadas e aninhadas e representa melhor o que está na página. Por esse motivo, bordas, preenchimento e margem podem ser aplicados normalmente a todos os elementos (ou seja: essa 'naturalidade' vai além do estilo e tem ramificações).
Observe que isso funciona apenas em divs e outros elementos que compartilham sua propriedade 'preencher 100% da largura por padrão'. Entradas, tabelas e possivelmente outras exigirão que você as envolva em uma div de contêiner e adicione um pouco mais de css para restaurar essa qualidade. Se você tiver a sorte de estar nessa situação, entre em contato comigo e eu desenterrarei o css.
jsfiddle aqui: jsfiddle.net/RgdeQ
Aproveitar!
fonte
Você pode usar o layout do Flexbox . Você precisa definir
flex: 1
o elemento que precisa ter largura ou altura dinâmicaflex-direction: row and column
respectivamente.Largura dinâmica:
HTML
CSS
Resultado:
Mostrar snippet de código
Altura dinâmica:
HTML
CSS
Resultado:
Mostrar snippet de código
fonte
A maneira usual de fazer isso é como descrito por Guffa, elementos aninhados. É um pouco triste ter que adicionar marcações extras para obter os ganchos necessários para isso, mas na prática uma div de wrapper aqui ou ali não vai machucar ninguém.
Se você precisar fazê-lo sem elementos extras (por exemplo, quando não tiver controle da marcação da página), poderá usar o tamanho da caixa , que possui um suporte ao navegador bastante decente, mas não completo ou simples. É provavelmente mais divertido do que ter que confiar em scripts.
fonte
Talvez eu esteja sendo burro, mas a mesa não é a solução óbvia aqui?
Outra maneira que eu descobri no chrome é ainda mais simples, mas o homem é um hack!
Isso por si só deve preencher o restante da linha horizontalmente, como as células da tabela. No entanto, você obtém alguns problemas estranhos, ultrapassando 100% de seu pai, definindo a largura como um valor percentual corrige isso.
fonte
Podemos conseguir isso usando a caixa flexível com muita facilidade.
Se tivermos três elementos como Header, MiddleContainer e Footer. E queremos dar uma altura fixa ao cabeçalho e rodapé. então podemos escrever assim:
Para React / RN (os padrões são 'display' como flex e 'flexDirection' como coluna), no web css, teremos que especificar o contêiner do corpo ou o contêiner que os contém como display: 'flex', flex-direction: 'column' como abaixo:
fonte
e se sua div de empacotamento fosse 100% e você usasse o preenchimento para uma quantidade de pixels, se o # do preenchimento precisar ser dinâmico, você poderá facilmente usar o jQuery para modificar o valor do preenchimento quando os eventos forem disparados.
fonte
Eu tive um problema semelhante em que queria um banner na parte superior da tela que tivesse uma imagem à esquerda e uma imagem repetida à direita na borda da tela. Acabei resolvendo assim:
CSS:
A chave era a etiqueta certa. Basicamente, estou especificando que quero que repita de 131px da esquerda para 0px da direita.
fonte
Em alguns contextos, você pode aproveitar as configurações de margem para especificar efetivamente "100% de largura menos N pixels". Veja a resposta aceita para esta pergunta .
fonte