2010-06-23 3 views
17

Каков наилучший способ выровнять значки (слева) и текст (справа) или другой текст слева и значок справа?выровнять значки с текстом

Должен ли образ изображения и текст одинакового размера? В идеале я бы хотел, чтобы они были разными, но были на одном и том же вертикальном выравнивании.

Я использую свойство css background-position для получения значков большего изображения.

Вот как я это делаю сейчас, но я борюсь с тем, чтобы заставить их быть на одной линии или вертикально выровняться по низу.

Текст

Это то, что я получаю после того, как я попробовать свои предложения.

Хотя текст теперь выровнен со значком, он накладывается над значком справа от значка, который я хочу. Обратите внимание, что я использую фоновое положение, чтобы показать значок из большего набора изображений.

В основном я получаю

<icon><10px><text_and_unwanted_icon_to_the_right_under_it> 
<span class="group3_drops_icon group3_l_icon" style="">50</span> 

group3_drops_icon { 
background-position:-50px -111px; 
} 

.group3_l_icon { 
-moz-background-clip:border; 
-moz-background-inline-policy:continuous; 
-moz-background-origin:padding; 
background:transparent url(/images/group3.png) no-repeat scroll left center; 
height:35px; 
overflow:hidden; 
padding-left:55px; 
} 

ответ

35

Я обычно использую background:

<style type="text/css"> 
.icon { 
background-image: url(path/to/my/icon.jpg); 
background-position: left center; 
background-repeat: no-repeat; 

padding-left: 16px; /* Or size of icon + spacing */ 
} 
</style> 

<span class="icon">Some text here</span> 
+0

+1 Это то, что я использую, с вариациями. Это единственный способ получить изображения в соответствии с исходной базой текста во всех браузерах. – Robusto

+0

Спасибо, см. Правки для моих комментариев. – badnaam

+0

Если вы пливите свои значки фона, а текст будет справа, вы должны пометить свои значки вертикально, а не горизонтально. – rossipedia

23

Вы можете сделать это на той же линии с использованием вертикального выравнивания и высоту строки

<p style='line-height: 30px'> 
    <img src='icon.gif' style='vertical-align: middle' />Icon Text 
</p> 

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

span.icontext { 
    background: transparent url(icon.gif) no-repeat inherit left center; 
    padding-left: 10px /* at least the width of the icon */ 
} 

<span class="icontext"> 
    Icon Text 
</span> 
8

К сожалению, ни один из этих ответов не является доказательством пули, и каждый из них имеет один большой недостаток.

@rossipedia Я использовал для реализации всех своих значков таким образом, и это работает очень хорошо. Но, и это большое, но это не работает с спрайтами, так как вы используете свойство background-position для размещения значка внутри контейнера, который включает ваш текст. И не использовать спрайты, где вы можете плохо для производительности и SEO, что делает их обязательными для любого хорошего современного веб-сайта.

@Jamie Wong Первое решение имеет два недостатка разметки. Использование элементов семантически правильно недооценивается некоторыми, но вы увидите преимущества в определении приоритетов в своем ранжировании в поисковых системах. Поэтому, прежде всего, вы не должны использовать p-тег, когда контент не является абзацем. Вместо этого используйте span. Во-вторых, img-tag предназначен только для только. В очень конкретных случаях вам, возможно, придется игнорировать это правило, но это не один из них.

Я не буду врать вам, я проверил много мест в свое время и ИМХО, нет оптимального решения. Эти два решения являются те, которые приходят ближе к тому, что, хотя:

Инлайн-Block Solution

HTML: 
<div class="container"> 
    <div class="icon"></div> 
    <span class="content">Hello</span> 
</div> 

CSS: 
.container { 
    margin-top: 50px; 
} 

.container .icon { 
    height: 30px; 
    width: 30px; 
    background: #000; 
    display: inline-block; 
    vertical-align: middle; 
} 
.container .content { 
    display: inline-block; 
    vertical-align: middle; 
} 

"дисплей: встроенный блок;" это прекрасная вещь. Вы можете сделать так много с этим, и он играет очень красиво с отзывчивым дизайном. Но это зависит от вашего клиента. Inline-Block не работает с IE6, IE7 и все еще вызывает проблемы с IE8. Я лично больше не поддерживаю IE6 и 7, но IE8 все еще там. Если вашему клиенту действительно нужен его сайт для использования в IE8, встроенный блок, к сожалению, не является вариантом. Оцените это первым. Замените черный фон элемента значка своим спрайтом, расположите его, не бросайте туда-сюда и вуаля, вот оно. О, да, и в качестве плюса вы можете выровнять текст так, как хотите, с вертикальным выравниванием.

P.S .: Я знаю, что там есть пустой тег HTML, если у кого-то есть предложение о том, как его заполнить, я был бы благодарен.

Fixed Height Решение

.clearfix:after { 
    content: "."; 
    display: block; 
    clear: both; 
    visibility: hidden; 
    line-height: 0; 
    height: 0; 
} 

.clearfix { 
    display: inline-block; 
} 

html[xmlns] .clearfix { 
    display: block; 
} 

* html .clearfix { 
    height: 1%; 
} 
.container { 
    margin-top: 50px; 
    border: 1px solid #000; 
} 

.container .icon { 
    height: 30px; 
    width: 30px; 
    background: #000; 
    float:left; 
} 
.container .content { 
    line-height: 30px; 
    float: left; 
    display: block; 
} 

Я ненавижу это. Он использует фиксированную высоту строки для текста, и если вы выберете ту же высоту, что и поле «Значок», текст будет центрирован до этой высоты. Чтобы выровнять текст вверху, отрежьте высоту линии, а внизу, вам нужно будет исправить это с положением: абсолютным и фиксированной шириной и высотой для контейнера. Я не собираюсь вникать в это, если кто-то не попросит об этом, потому что это целая проблема для себя и приносит с собой множество недостатков. Основным недостатком этого пути является фиксированная высота. Исправленные высоты всегда негибкие и особенно с текстом, это может вызвать множество проблем (вы больше не можете масштабировать текст как пользователь без его обрезания, а другие браузеры визуализируют текст по-разному). Поэтому не забудьте, что в браузере текст отключен и что у него есть какая-то маховая комната внутри его высоты линии. P.S .: Не забывайте clearfix для контейнера. И, конечно же, замените черный фон вашим спрайтом и положением + no-repeat.

Заключение

Используйте встроенный блок, если это вообще возможно. ;) Если это не так, глубоко вдохните и попробуйте второе решение.

+2

«И не используя спрайты, где вы можете плохо для производительности и SEO, что делает их обязательными для любого хорошего современного веб-сайта». Вышеупомянутые решения являются прекрасным примером ситуации, когда вам может понадобиться оторваться от спрайтов (всего за несколько изображений). Сказать, что это навредит SEO, - это растяжка. – JeremyE

+0

Очень верно! К настоящему времени я почти полностью использую знаковые шрифты, если, конечно, я не должен использовать многоцветные значки. Кроме того, есть взлом для встроенного блока, так что это не проблема, о которой я думал. – Merritt6616

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