Я часто не использую CSS, поэтому каждый раз, когда я его использую, мне приходится снова экспериментировать и разбираться с вещами методом проб и ошибок.
То, что я пытаюсь сделать, это поместить icon_32
в ту же строку, что и «Я сделал это». Изображение имеет высоту 32px, поэтому я хотел немного переместить его вниз, чтобы отцентрировать его по линии.
Немного поэкспериментировав, я нашел решение, которое работает в Safari и Chrome, но не работает в Firefox.
Вот что я делаю:
CSS
ul, li {
/* spacing */
margin: 0;
padding: 0;
border: 0;
outline: 0;
/* list */
list-style: none;
}
#work_list li {
display: block;
/* spacing */
margin-bottom: 10px;
}
#work_list .icon_32 {
display: inline-block;
position: absolute; /* This doesn't work in Firefox. */
cursor: pointer;
/* spacing */
margin-top: -8px;
margin-left: 8px;
}
HTML
<ul id="work_list">
<li> I made this. <div class="icon_32"></div></li>
<li>I write, sometimes.</li>
</ul>
Поскольку нельзя добавить padding-top
к встроенным элементам, я сделал положение иконки абсолютным. Проблема с тем, чтобы он был абсолютным, заключается в том, что я должен вручную установить margin-left
, потому что значок не перемещается влево автоматически с текстом. Установив display
на block
на <li>
и display
на inline-block
на значке, все, что я пытался достичь, сработало (хотя я не до конца понимаю, почему). Это, однако, не работает в Firefox (а я еще даже не тестировал в IE).
Есть ли правильный способ добиться того, что я пытаюсь сделать, который работает корректно во всех браузерах?
Обновление: Как я решил эту проблему, используя предложения из ответов. Большое спасибо за помощь!
Я не хотел использовать line-height
, потому что хотел сохранить исходную высоту li
. Я только что избавился от ненужного position: absolute
и добавил vertical-align: middle
. После этого изображение все еще влияло на высоту li
, поэтому я просто добавил идентификатор к затронутому li
и переписал margin-bottom
, чтобы сумма его высоты + нижнего поля была равна сумме с li
без изображения 32px.
Вот как это закончилось:
CSS
ul, li {
/* spacing */
margin: 0;
padding: 0;
border: 0;
outline: 0;
/* list */
list-style: none;
}
#work_list li {
display: block;
/* spacing */
margin-bottom: 10px;
}
#work_list #work_item_icon {
margin-bottom: 3px;
}
#work_list span.icon_32 {
display: inline-block;
cursor: pointer;
/* spacing */
vertical-align: middle;
margin-top: -8px;
margin-left: 8px;
}
HTML
<ul id="work_list">
<li id="work_item_icon">I made this. <span class="icon_32"></span></li>
<li id="work_item_writing">I write, sometimes.</li>
</ul>