2014-11-06 3 views
0

У меня есть следующий HTML (который я управления):Как вертикально выравнивать элементы элемента списка HTML?

<ul> 
    <li> 
     <a href="mailto:[email protected]">email and co: [email protected]</a> 
    </li> 
    <li> 
     <a href="xmpp:[email protected]">XMPP: [email protected]</a> 
    </li> 
</ul> 

Это делает, как это (я преувеличил «по электронной почте & сотрудничества» текст для проблемы, чтобы быть более заметным):

* email and co: [email protected] 
* XMPP: [email protected] 

Я хотел бы, чтобы сделать это в несколько красивее образом, совместив как электронная почта и XMPP адрес, более или менее, как это:

* email and co: [email protected] 
* XMPP:   [email protected] 

(или SOMET hing подобный).

Я пытался играть с display: table и друзьями не повезло: он кажется <a> тег дует все вверх :(

Это мой текущий Fiddle:. http://jsfiddle.net/xL314Lkt/ с неработающего раствором Если удалить <a> тег , это, кажется, хорошо, но я на самом деле нужно, и я ищу решение (если это возможно), которые:.

  • сохраняет содержимое семантически правильный или лучший вид правильно (как я не хочу разделить <a> на две части.)
  • не устанавливает фиксированную ширину ни для одного из элементов, я бы накладывал метки на одно и то же пространство, но также позволял им естественным образом (и сохраняя визуальную правильность, играя с полями и прокладками). Собственно, это все вещи оказываются в пространстве не так ширины, поэтому помимо естественного потока я должен держать вещи в минимуме.
+0

вам нужно иметь две раскладки бок о бок –

ответ

1

Вы должны изменить якорь тега display свойство block:

Codepen: http://codepen.io/erquhart/pen/wJcCK

<ul> 
    <li> 
     <a href="mailto:[email protected]">email and co: <span>[email protected]</span></a> 
    </li> 
    <li> 
     <a href="xmpp:[email protected]">XMPP: <span>[email protected]</span></a> 
    </li> 
</ul> 

a { 
    display: block; 
    width: 300px; 
} 

span { 
    float: right; 
} 
+0

Это на самом деле работает довольно хорошо, кроме того факта, что продолжительность составляет теперь выравнивается вправо. –

1

Если вы готовы сделать этикетку фиксированной ширины:

<ul> 
    <li> 
     <a href="mailto:[email protected]"> 
      <label class="listLabel">email and co:</label> 
      <span class="listSpan">[email protected] 
     </a> 
    </li> 
    <li> 
     <a href="xmpp:[email protected]"> 
      <label class="listLabel">XMPP:</label> 
      <span class="listSpan">[email protected]</span> 
     </a> 
    </li> 
</ul> 

Затем установите свой CSS:

.listLabel, 
.listSpan { 
    display:inline-block; 
    vertical-align:top; 
} 

.listLabel { 
    width:100px; 
} 

Это должно придать внешний вид, который вы ищете.

+0

Это также работает и немного более легкое, чем решение @im_benton, но, как я прокомментировал в его ответе, я бы предпочел не иметь фиксированную ширину, если это возможно ... –

+0

@multani - вы хотите, чтобы все ширины были то же, но вы не хотите делать фиксированную ширину ... тогда вам понадобится решение JS. – PlantTheIdea

+0

На самом деле это отлично работает, если я удаляю '' и использую' display: table * 'вещи :) Как и таблица. –

1

Ваш лучший выбор - просто добавить минимальную ширину.

<ul> 
    <li> 
     <a href="mailto:[email protected]"> 
      <span class="label">email and co:</span> 
      <span class="value">[email protected]</span> 
     </a> 
    </li> 
    <li> 
     <a href="xmpp:[email protected]"> 
      <span class="label">XMPP:</span> 
      <span class="value">[email protected]</span> 
     </a> 
    </li> 
</ul> 

CSS

ul { 
    display: table; 
} 

li { 
    display: table-row; 
} 

span.label, 
span.value { 
    display: table-cell; 
} 

.label { 
    min-width: 100px; 
} 
+0

Это лучшее, что я могу сделать в данный момент, но, как я описал в обновлении в OP, я бы предпочел НЕ устанавливать фиксированную ширину для элементов. –

1

Вы должны использовать список определений, это семантически болееправильно:

<dl> 
    <dt>email and co</dt> 
    <dd>[email protected]</dd> 
    <dt>XMPP</dt> 
    <dd>[email protected]</dd> 
</dl> 

CSS может выглядеть следующим образом:

dt 
{ 
    float:left; 
    clear:both; 
    min-width:38em; 
} 
dd { 
    float:left; 
} 
+0

Список определений будет семантически более правильным, вы правы. Но мне нужно было бы разделить '' (по одному в каждом '

'/'
'), об этом я сейчас обдумываю. –

0
Смежные вопросы