Estou construindo um site multilíngue, com o proprietário me ajudando com algumas traduções. Algumas das frases exibidas precisam de quebras de linha para manter o estilo do site.
Infelizmente, o proprietário não é um cara de computador; portanto, se ele vir foo<br />bar
a chance de modificar os dados de alguma forma, enquanto estiver traduzindo.
Existe uma solução CSS (além de alterar a largura) a ser aplicada a um elemento que seria interrompido após cada palavra?
(Eu sei que posso fazer isso em PHP, mas estou me perguntando se há um truque bacana que eu não conheça em CSS para realizar a mesma coisa, talvez nos recursos do CJK.)
EDITAR
Vou tentar diagramar o que está acontecendo:
---------------- ----------------
| Short Word | | Gargantuan |
| | | Word |
---------------- ----------------
A palavra longa quebra automaticamente, a palavra curta não. Eu quero que fique assim:
---------------- ----------------
| Short | | Gargantuan |
| Word | | Word |
---------------- ----------------
fonte
Respostas:
Usar
onde
<parent-width>
é a largura do elemento pai (ou um valor alto arbitrário que não cabe em uma linha). Dessa forma, você pode ter certeza de que há até uma quebra de linha após uma única letra. Funciona com Chrome / FF / Opera / IE7 + (e provavelmente até o IE6, pois também suporta espaçamento de palavras).fonte
.parent { word-spacing: 100px; }
onde100px
está a largura do elemento pai. O problema é que esta solução não funciona se você tiver um pai fluido.word-spacing: 100000px
e você não precisará se preocupar com a fluidez dos pais em termos de largura. Definir um espaçamento de palavras de 100% faria sentido (teria sido 100% da largura pai), mas os valores expressos em porcentagem não são suportados para essa propriedade css.word-spacing: 2em;
e na largura móvel, quero que sejam de linha única:word-spacing: unset;
A resposta dada por @HursVanBloob funciona apenas com contêiner pai de largura fixa, mas falha no caso de contêineres de largura de fluido .
Eu tentei muitas propriedades, mas nada funcionou como esperado. Finalmente, cheguei à conclusão de que atribuir
word-spacing
um valor muito alto funciona perfeitamente bem.ou, para os navegadores modernos, você pode usar a
vw
unidade CSS (largura visual em% do tamanho da tela).fonte
Uma solução alternativa é descrita na frase separada para uma palavra por linha , aplicando
display:table-caption;
ao elementofonte
Tente usar
white-space: pre-line;
. Ele cria uma quebra de linha sempre que uma quebra de linha aparece no código, mas ignora o espaço em branco extra (guias e espaços etc.).Primeiro, escreva suas palavras em linhas separadas no seu código:
Em seguida, aplique o estilo ao elemento que contém as palavras.
Tenha cuidado , porém, toda quebra de linha no código dentro do elemento criará uma quebra de linha. Assim, escrever o seguinte resultará em uma quebra de linha extra antes da primeira palavra e depois da última:
Há um ótimo artigo sobre truques de CSS que explica os outros atributos de espaço em branco.
fonte
white-space
pode ser usado para responder à pergunta. Desculpe, mas não vejo como.white-space: pre;
" para exibir essas quebras de linha como uma<pre>
tag faria? Isso pode funcionar, e uma quebra de linha deve parecer mais natural para os tradutores do que a<br />
. Vou tentar editar a sua resposta para adicioná-lo :)white-space: pre-line;
provavelmente seria mais apropriado, pois ignora espaço em branco extra no seu código. Vou atualizar a resposta.white-space: pre;
para o IE 7.Se você quiser escolher entre diferentes soluções, além das respostas fornecidas ...
Um método alternativo é fornecer ao contêiner uma largura de 0 e garantir que o estouro seja visível. Então cada palavra transbordará e estará em sua própria linha.
Ou você pode usar um desses
width
valores recém-propostos , desde que eles ainda existam quando você ler isso.fonte
Você não pode segmentar cada palavra em CSS. No entanto, com um pouco de jQuery você provavelmente poderia.
Com o jQuery, você pode agrupar cada palavra em um
<span>
período de CSS definido edisplay:block
colocá-lo em sua própria linha.Em teoria, é claro: P
fonte
:first-child
truque ou algo lá fora ...https://jsfiddle.net/bm3Lfcod/1/
Para quem procura uma solução que funcione dentro de um contêiner pai flexível com filhos flexíveis nas duas dimensões. por exemplo. botões da barra de navegação.
fonte
CSS
propriedade que você possa oferecer. Digamos que uma propriedade que poderia causarbrowser reflow
Eu enfrentei o mesmo problema e nenhuma das opções aqui me ajudou. Alguns serviços de email não oferecem suporte a estilos especificados. Aqui está a minha versão, que resolveu o problema e funciona em todos os lugares que verifiquei:
OU usando CSS:
fonte
A melhor solução é a
word-spacing
propriedade.Adicione o
<p>
em um contêiner com um tamanho específico (exemplo300px
) e depois você precisará adicionar esse tamanho como o valor no espaçamento entre palavras.HTML
CSS
Dessa forma, sua sentença será sempre quebrada e definida em uma coluna, mas a parte do parágrafo será dinâmica.
Aqui um exemplo Codepen
fonte
No meu caso,
funcionou perfeitamente, espero que ajude qualquer outro iniciante como eu.
fonte