Isso é possível usando CSS e duas tags DIV de bloco embutido (ou o que seja) em vez de usar uma tabela?
A versão da tabela é esta (bordas adicionadas para que você possa vê-lo):
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head></head>
<body>
<table style="width:100%;">
<tr>
<td style="border:1px solid black;width:100px;height:10px;"></td>
<td style="border:1px solid black;height:10px;"></td>
</tr>
</table>
</body>
</html>
Produz uma coluna esquerda com uma LARGURA FIXA (não uma largura percentual) e uma coluna da direita que se expande para preencher O ESPAÇO RESTANTE na linha. Parece bem simples, certo? Além disso, como nada é "flutuado", a altura do contêiner pai expande-se adequadamente para abranger a altura do conteúdo.
--BEGIN RANT
- Vi as implementações "clear fix" e "holy grail" para layouts de várias colunas com coluna lateral de largura fixa, e elas são péssimas e complicadas. Eles invertem a ordem dos elementos, usam larguras de porcentagem ou flutuam, margens negativas e o relacionamento entre os atributos "esquerdo", "direito" e "margem" é complexo. Além disso, os layouts são sensíveis a subpixels, de forma que a adição de um único pixel de bordas, preenchimento ou margens interrompa todo o layout e envia colunas inteiras para a próxima linha. Por exemplo, erros de arredondamento são um problema, mesmo se você tentar fazer algo simples, como colocar 4 elementos em uma linha, com a largura de cada um configurada para 25%.
--END RANT--
Eu tentei usar "inline-block" e "white-space: nowrap;", mas o problema é que simplesmente não consigo obter o segundo elemento para preencher o espaço restante na linha. Definir a largura para algo como "width: 100% - (LeftColumWidth) px" funcionará em alguns casos, mas executar um cálculo em uma propriedade width não é realmente suportado.
fonte
display: table-*
construção que funcionará, mas também não é "mais semântica" (sendo um caso terrível dediv
sopa) e quebra a compatibilidade com o IE6. Eu, pessoalmente, iria ficar com o<table>
, a menos que alguém consegue chegar a uma idéia simples gênio que funciona semRespostas:
Veja: http://jsfiddle.net/qx32C/36/
Por que eu substituir
margin-left: 100px
comoverflow: hidden
on.right
?EDIT: Aqui estão dois espelhos para o link acima (morto):
fonte
box-sizing: border-box
sobre odiv
s. Apenas um palpite, já que você não forneceu uma demonstração mostrando o comportamento que descreve. Dito isto, adisplay: table
solução baseada geralmente é melhor . Essa é uma pergunta muito antiga, mas acho que estava tentando evitar algo relacionado às tabelas nesta questão devido ao comportamento do OP.Uma solução moderna usando o flexbox:
http://jsfiddle.net/m5Xz2/100/
fonte
flex: 1
vez dewidth: 100%
?flex: 1
é uma abreviação deflex-grow: 1
. É um atributo de combinação:flex: <grow> <shrink> <basis>
.flexbugs
você sabe.Compatível com os navegadores modernos comuns (IE 8+): http://jsfiddle.net/m5Xz2/3/
fonte
display:table
.inline-block
preencher o restante da linha.Você pode usar calc (100% - 100px) no elemento fluido, juntamente com display: bloco em linha para ambos os elementos.
Esteja ciente de que não deve haver espaço entre as tags; caso contrário, você terá que considerar esse espaço no seu cálculo também.
Exemplo rápido: http://jsfiddle.net/dw689mt4/1/
fonte
Eu usei
flex-grow
propriedade para atingir esse objetivo. Você precisará definirdisplay: flex
para o contêiner pai, depois precisará definirflex-grow: 1
o bloco que deseja preencher o espaço restante, ou exatamenteflex: 1
como o tanius mencionado nos comentários.fonte
Se você não puder usar
overflow: hidden
(porque não desejaoverflow: hidden
) ou se não gostar de hacks / soluções alternativas em CSS, poderá usar JavaScript. Observe que pode não funcionar tão bem porque é JavaScript.http://jsfiddle.net/ys2eogxm/
fonte
Quando você desiste dos blocos embutidos
http://jsfiddle.net/RXrvZ/3731/
(por CSS Float: flutuando uma imagem à esquerda do texto )
fonte