Eu tenho uma página (XHTML Strict) onde flutuo uma imagem ao lado de parágrafos regulares de texto. Tudo vai bem, exceto quando uma lista é usada em vez de parágrafos. Os marcadores da lista se sobrepõem à imagem flutuada.
Alterar a margem da lista ou dos itens da lista não ajuda. A margem é calculada a partir da esquerda da página, mas o flutuador empurra os itens da lista para a direita dentro do li
próprio. Portanto, a margem só ajuda se eu a ampliar mais que a imagem.
Flutuar a lista ao lado da imagem também funciona, mas não sei quando a lista fica ao lado de uma bóia. Não quero flutuar todas as listas do meu conteúdo apenas para corrigir isso. Além disso, flutuar à esquerda altera o layout quando uma imagem é flutuada para a direita, em vez de para a esquerda da lista.
A configuração li { list-style-position: inside }
move os marcadores junto com o conteúdo, mas também faz com que as linhas quebradas sejam alinhadas com o marcador, em vez de alinhadas com a linha acima.
Obviamente, o problema é causado pelo disparo da bala fora da caixa, o flutuador empurrando o conteúdo da caixa para a direita (não a própria caixa). É assim que o IE e o FF lidam com a situação e, até onde eu sei, não estão errados de acordo com as especificações. A questão é: como posso evitá-lo?
Adicionando uma melhoria à solução de Glen E. Ivey :
http://jsfiddle.net/mblase75/TJELt/
Eu prefiro essa técnica, pois ela funciona quando a lista precisa fluir pela imagem flutuante, enquanto a
overflow: hidden
técnica não. No entanto, também é necessário adicionarpadding-right: 1em
aoli
para impedir que eles excedam o contêiner.fonte
position: relative;
ao item de linha, ele cria um problema de empilhamento com o conteúdo flutuante. Descobri (no Chrome e Firefox) que era difícil passar o mouse e clicar nos links do conteúdo flutuante. A correção para mim foi adicionarposition: relative; z-index: 1;
ao elemento flutuante, que parecia resolver o problema de empilhamento.ul {overflow: hidden;}
o problema foi resolvido em todos os navegadores, a solução acima foi o único remédio para esse problema no Prince XML , um conversor de XHTML + CSS3 para PDF.É aqui que a propriedade "display" se destaca. Defina o CSS abaixo para fazer a lista funcionar junto com o conteúdo flutuante.
display: mesa; funciona ao lado de conteúdo flutuante (preenchendo a lacuna), mas sem ocultar o conteúdo por trás dela. Muito parecido com uma mesa :-)
EDIT: Lembre-se de adicionar uma classe para isolar quais listas você deseja fazer isso. Por exemplo, "ul.in-content" ou mais geralmente ".content ul"
fonte
Tente list-style-position: inside para alterar o layout das balas.
fonte
list-style-position:inside
seria uma ótima solução, mas faz com que as linhas que quebram iniciem alinhadas com o marcador, em vez de alinhadas com a linha acima.Em http://archivist.incutio.com/viewlist/css-discuss/106382 , encontrei uma sugestão que funcionou para mim: estilize os elementos 'li' com:
Onde você substitui "1em" pela largura do preenchimento / margem esquerdo que seus itens de lista teriam se o flutuador não estivesse presente. Isso funciona muito bem no meu aplicativo, mesmo lidando com o caso em que a parte inferior do flutuador ocorre no meio das listas - os marcadores voltam para a margem esquerda (local) exatamente à direita.
fonte
Por que
overflow: hidden
funcionaA solução é tão fácil quanto:
Uma caixa de bloco
overflow:
diferente devisible
estabelece um novo contexto de formatação de bloco para seu conteúdo. Recomendação do W3C: http://www.w3.org/TR/CSS2/visuren.html#block-formattingExemplo
Os botões do meu site , que estão
<li>
disfarçados, são feitos assim. Diminua a viewport (janela) do seu navegador para ver o recuo em ação .Respostas relacionadas
Artigo com exemplos
fonte
Ao adicionar
overflow: auto;
aos seusul
trabalhos para mim, pelo menos.Atualizar
Atualizei meu jsfiddle para visualizar o que está acontecendo. Ao ter o
ul
lado do flutuanteimg
, o conteúdo doul
será empurrado pelo flutuador, mas não pelo contêiner real. Ao adicionar aoverflow: auto
caixa inteiraul
, será empurrada pelo flutuador em vez de apenas pelo conteúdo.fonte
Você pode atribuir
position: relative; left: 10px;
aoli
. (Você também pode querer dar ummargin-right: 10px;
, caso contrário, ele poderá ficar muito largo no lado direito.)Ou, se você quiser usar
float
oul
- como sugerido por outros - provavelmente poderá impedir o resto de flutuar à direita da ul usandoclear: left
o elemento que segue a ul.fonte
Estou usando isso para resolver este problema:
fonte
aviso Legal
As listas ao lado dos elementos flutuantes causam problemas. Na minha opinião, a melhor maneira de evitar esses tipos de problemas flutuantes é evitar imagens flutuantes que se cruzam com o conteúdo. Também ajudará quando você precisar oferecer suporte ao design responsivo.
Um design simples de ter imagens centralizadas entre parágrafos parecerá muito atraente e será muito mais fácil de suportar do que tentar ficar extravagante. Também está a um passo de a
<figure>
.Mas eu realmente quero imagens flutuadas!
Ok, se você é
louco porpersistência o suficiente para continuar nesse caminho, há algumas técnicas que podem ser usadas.O mais simples é fazer com que a lista use
overflow: hidden
ouoverflow: scroll
para que a lista seja essencialmente encolhida, o que puxa o preenchimento de volta para onde é útil:Esta técnica tem alguns problemas, no entanto. Se a lista for longa, na verdade ela não contorna a imagem, o que praticamente derrota todo o propósito de usá
float
-la.Mas eu realmente quero listas de quebra-cabeças!
Ok, se você é ainda mais
loucoe persistente e precisa continuar por esse caminho, existe outra técnica que pode ser usada para agrupar os itens da lista e manter marcadores.Em vez de preencher
<ul>
e tentar fazer com que ele se comporte bem com marcadores (o que nunca parece querer fazer), retire-os<ul>
e dê-os ao<li>
s. As balas são perigosas e os<ul>
justos não são responsáveis o suficiente para lidar com elas adequadamente.Esse comportamento de agrupamento pode fazer coisas estranhas ao conteúdo complexo, por isso não recomendo adicioná-lo por padrão. É muito mais fácil configurá-lo como algo que pode ser incluído, em vez de algo que deve ser substituído.
fonte
Tente o seguinte na sua etiqueta UL. Isso deve cuidar das marcas que cobrem sua imagem e você não precisa atrapalhar o alinhamento esquerdo causado por
list-position: inside
.fonte
Eu mesmo lutava com isso. O melhor que gerenciei é o seguinte:
O texto não é realmente recuado, mas o marcador é exibido.
fonte
Editado para atualizar com base no comentário do OP
ok, basta dividi-lo em 2 divs aninhados
tente alterar o ul li css para
ul {flutuar: esquerda; fundo: azul; }
fonte
Depois de lutar com essa questão interessante em vários projetos e investigar por que isso acontece, finalmente acredito que encontrei as duas: uma solução funcional e 'responsiva' .
Aqui está o truque de mágica, exemplo ao vivo: http://jsfiddle.net/superKalo/phabbtnx/
fonte
display: flex;
ali
, para que o marcador esteja centralizado verticalmente, quando altero o tamanho da fonte da:before
peça.Trabalhando em um LMS sem acesso ao cabeçalho do documento, ficou mais fácil usar o
margin-right: 20px
estilo embutido da imagem. O que devo a este site .fonte
tente isto:
Se você quiser que eles vire à esquerda, basta colocar um valor de - ## px.
fonte
ou você pode fazer isso:
e remova todo o estilo do li
fonte
Que tal agora?
fonte
margin-left: auto fará com que o próprio elemento fique alinhado à direita. Defina a altura e a largura do elemento que você deseja - no meu é uma imagem de fundo em uma div dentro
fonte
Você também pode tentar flutuar
ul
para a esquerda e definir um apropriadowidth
para ele, para que flutue próximo à imagem.Algo um pouco como este jsfiddle ?
fonte
Eu consertei com
fonte
fonte
Adicionar
display:table;
aul
:fonte