Eu quero ter uma lista "interna" com marcadores de lista ou números decimais sendo alinhados com blocos de texto superiores. As segundas linhas das entradas da lista precisam ter o mesmo recuo da primeira linha!
Por exemplo:
Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
Aenean commodo ligula eget dolor. Aenean Aenean massa.
Cum sociis natoque penatibus et magnis dis parturient montes,
nascetur ridiculus mus. Donec quam felis,
1. Text
2. Text
3. longer Text, longer Text, longer Text, longer Text, longer Text, longer Text
second line of longer Text
4. Text
Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
Aenean commodo ligula eget dolor.
O CSS fornece apenas dois valores para sua "posição de estilo de lista" - dentro e fora. Com "dentro", as segundas linhas são alinhadas com os pontos da lista e não com a linha superior:
3. longer Text, longer Text, longer Text, longer Text, longer Text, longer Text
second line of longer Text
4. Text
A largura "fora" da minha lista não está mais alinhada com os blocos de texto superiores.
As experiências ampliam o recuo do texto, o preenchimento à esquerda e a margem à esquerda para listas desordenadas, mas elas falham nas listas ordenadas porque depende do número de caracteres da lista decimal:
Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
Aenean commodo ligula eget dolor.
3. longer Text, longer Text, longer Text, longer Text, longer Text, longer Text
second line of longer Text
4. Text
11. Text
12. Text
"11." e "12." não estão alinhados com o bloco de texto superior comparado ao "3". e "4.".
Então, onde está o segredo sobre as listas ordenadas e o recuo da segunda linha? Obrigado pelo seu esforço!
fonte
Respostas:
Atualizar
Esta resposta está desatualizada. Você pode fazer isso de maneira muito mais simples, como apontado em outra resposta abaixo:
Consulte https://www.w3schools.com/cssref/pr_list-style-position.asp
Resposta original
Estou surpreso ao ver que isso ainda não foi resolvido. Você pode usar o algoritmo de layout de tabela do navegador (sem usar tabelas) como este:
Demonstração: http://jsfiddle.net/4rnNK/1/
Para fazê-lo funcionar no IE8, use a
:before
notação herdada com dois pontos.fonte
foo
é apenas uma seqüência arbitrária (id), que é usado para conectar oscounter-reset
,counter-increment
ecounter()
propriedades.position: relative
no<li>
eposition: absolute
no conteúdo gerado. Veja jsfiddle.net/maryisdead/kgr4k para um exemplo.40px
? Isso quebrará quando os contadores forem mais largos que isso . O objetivo de usar o layout da tabela é que o navegador ajustará automaticamente o conteúdo.Acredito que isso fará o que você está procurando.
JSFiddle: https://jsfiddle.net/dzbos70f/
fonte
1em
não é igual ao espaço do travessão. As linhas não se alinham perfeitamente em pixels. Segundo, e quando a lista atingir o número 10? 100? O recuo do texto não funcionará, não será alinhado. Esta resposta deve ser rejeitada.1em
. oi60.tinypic.com/a0eyvs.jpg O primeiro item da lista está usando a técnica de recuo do texto acima. Comparado com a aparência normal da posição no estilo da lista: fora dele está desalinhado, neste caso, por um pixel.A maneira mais fácil e limpa, sem hacks, é apenas recuar o
ul
(ouol
), assim:Isso dá o mesmo resultado que a resposta aceita: https://jsfiddle.net/5wxf2ayu/
Captura de tela:
fonte
list-style-position: outside
para<li>
.Verifique este violino:
http://jsfiddle.net/K6bLp/
Ele mostra como recuar manualmente ul e ol usando CSS.
HTML
CSS
Também editei seu violino
http://jsfiddle.net/j7MEd/3/
Tome nota disso.
fonte
type
atributo para<ol>
parece estar obsoleto no HTML 5. Use emstyle="list-style-type: "
vez disso.Você pode definir a margem e o preenchimento de um
ol
ouul
em CSSfonte
Eu acredito que você só precisa colocar a lista 'bala' fora do preenchimento.
fonte
Você pode usar CSS para selecionar um intervalo; nesse caso, você deseja listar os itens de 1 a 9:
Em seguida, ajuste as margens desses primeiros itens de maneira apropriada:
Veja em ação aqui: http://www.wortfm.org/wort-madison-charts-for-the-week-beginning-11192012/
fonte
O seguinte CSS fez o truque:
fonte
minha solução é exatamente o mesmo que Pumbaa80 um 's, mas eu sugiro usar
display: table
em vez dedisplay:table-row
para oli
elemento. Então será algo assim:Então agora podemos usar margens para espaçar entre
li
'sfonte
Eu gosto bastante dessa solução:
fonte
As listas ol, ul funcionarão se você quiser, também pode usar uma tabela com border: none no css.
fonte
O CSS fornece apenas dois valores para sua "posição de estilo de lista" - dentro e fora. Com "dentro", as segundas linhas são alinhadas com os pontos da lista e não com a linha superior:
Nas listas ordenadas, sem intervenção, se você der ao "list-style-position" o valor "inside", a segunda linha de um item longo da lista não terá recuo, mas retornará à borda esquerda da lista (ou seja, irá alinhar à esquerda com o número do item). Isso é peculiar às listas ordenadas e não ocorre em listas não ordenadas.
Se, em vez disso, você der ao "list-style-position" o valor "outside", a segunda linha terá o mesmo recuo que a primeira linha.
Eu tinha uma lista com uma borda e tive esse problema. Com "list-style-position" definido como "inside", minha lista não parecia como eu queria. Mas com a "posição do estilo de lista" definida como "fora", os números dos itens da lista ficaram fora da caixa.
Resolvi isso simplesmente definindo uma margem esquerda mais ampla para toda a lista, que empurrou a lista inteira para a direita, de volta à posição em que estava antes.
CSS:
ol.classname {margin: 0; padding: 0;}
ol.classname li {margin: 0.5em 0 0 0; padding-left: 0; list-style-position: outside;}
HTML:
fonte
Ok, voltei e descobri algumas coisas. Esta é uma SOLUÇÃO ÁSPERA para o que eu estava propondo, mas parece ser funcional.
Primeiro, fiz dos números uma série de listas não ordenadas. Uma lista não ordenada normalmente terá um disco no início de cada item da lista (
Então, fiz a lista inteira ser exibida: linha da tabela. Aqui, por que não basta colar o código em vez de tagarelar?
CSS:
}
}
Isso parece alinhar o texto na 2ª div com os números na lista ordenada na primeira div. Cercei a lista e o texto com uma tag, para que eu possa dizer a todos os divs para exibir como blocos embutidos. Isso os alinhava muito bem.
A margem existe para colocar um espaço entre o período e o início do texto. Caso contrário, eles correm um contra o outro e parece uma tristeza.
Meu empregador queria que o texto contornado (para entradas bibliográficas mais longas) fosse alinhado com o início da primeira linha, não com a margem esquerda. Originalmente, eu estava mexendo com uma margem positiva e um recuo de texto negativo, mas então percebi que, quando mudei para dois divs diferentes, isso tinha o efeito de fazer com que o texto ficasse alinhado porque a margem esquerda do div foi a margem em que o texto começou naturalmente. Assim, tudo que eu precisava era de uma margem de 0,2em para adicionar algum espaço, e tudo o mais se alinhava em ordem.
Espero que isso ajude se o OP estivesse com um problema semelhante ... tive dificuldade em entendê-lo.
fonte
Eu tive esse mesmo problema e comecei a usar a resposta do usuário123444555621 . No entanto, eu também precisava adicionar
padding
e umborder
a cada umli
, o que essa solução não permite porque cadali
um é umtable-row
.Primeiro, usamos a
counter
para replicar osol
números do.Em seguida, definimos
display: table;
cada umli
edisplay: table-cell
o:before
para nos dar o recuo.Finalmente, a parte complicada. Como não estamos usando um layout de tabela para o todo
ol
, precisamos garantir que cada um:before
tenha a mesma largura. Podemos usar ach
unidade para manter aproximadamente a largura igual ao número de caracteres. Para manter as larguras uniformes quando o número de dígitos para os:before
diferentes, podemos implementar consultas de quantidade . Supondo que você saiba que suas listas não terão 100 itens ou mais, é necessário apenas uma regra de consulta de quantidade:before
para alterar sua largura, mas você pode adicionar mais facilmente.fonte