Arhn - архитектура программирования

Должны ли изображения CSS Sprite иметь пространство X между каждым элементом?

У меня проблема, какое-то время я пытался понять, как решить эту проблему. Я очень хорошо опишу это ниже...

Я пытаюсь использовать изображение в качестве изображения спрайта для списка UL. Он должен отображать значок с текстом рядом с ним, и значок, и текст должны куда-то ссылаться.

Мой первый пример выглядит так, как я хочу. Когда font-size установлено на 10px, все выглядит нормально... sprite ok

Как только я изменю font-size с 10px на 16px...

спрайт не в порядке

Вот CSS и HTML

CSS

#post-meta-wrapper{
    list-style: none;
    margin:20px 0 20px 20px;
    width:400px;
}

#post-meta-wrapper li {
    width:100%;
    color: #44495B;
    border-top: 1px dotted #CCC;
    color: #999;
    font-size: 10px;
    line-height: 28px;
    margin: 0px 0px 0px 0px;
    padding: 0px 0px 0px 0px;
    text-indent: 0px;
}
#post-meta-wrapper li a{
    background: url(http://i.imgur.com/Bcps8.png) no-repeat 0px -183px;
    padding-left:15px;
}

#post-meta-wrapper .meta-img {
    background:#fff;
    width: 15px;
    height: 10px;
    margin: 0px 0px 0px 0px;
    padding: 0px 0px 0px 8px;
    overflow: hidden;
}

#post-meta-wrapper a:hover,
#post-meta-wrapper .active{
    background: url(http://i.imgur.com/Bcps8.png) no-repeat 0px -195px;
    width: 15px;
    height: 10px;
}

HTML

<ul id="post-meta-wrapper">
    <li class="author">
        <a href="#"><span class="meta-img">Test link</a>
    </li>
    <li class="author">
        <a href="#" class="active"><span class="meta-img">Test link</a>
    </li>
    <li class="author">
        <a href="#"><span class="meta-img">Test link</a>
    </li>
    <li class="author">
        <a href="#"><span class="meta-img">Test link</a>
    </li>
    <li class="author">
        <a href="#"><span class="meta-img">Test link</a>
    </li>
    <li class="author">
        <a href="#"><span class="meta-img">Test link</a>
    </li>
   
</ul>

Примеры JSFiddle

Это первый файл с font-size: 10px http://jsfiddle.net/jasondavis/Mt87G/4/

Это СБОЙ с font-size: 16px http://jsfiddle.net/jasondavis/Mt87G/5/< /а>

Помоги мне?

Хорошо, я знаю, что могу просто изменить изображение спрайта, чтобы вокруг каждого объекта на изображении были огромные пространства, и тогда вы не заметили бы эту проблему, но я действительно хотел бы решить эту проблему правильно. Я имею в виду, возможно ли сделать то, что я пытаюсь сделать, только с помощью CSS или изображение должно быть разнесено? Я видел другие изображения спрайтов, где они расположены близко друг к другу, как у меня, и я видел некоторые, где все находится на расстоянии около 100 пикселей друг от друга.

Пожалуйста, помогите мне, если вы знаете, как решить эту проблему, я пробовал все, что мог придумать, но пока безуспешно. Мне нужно сделать это в массовом масштабе, поэтому я хотел бы сделать это правильно сейчас, прежде чем я это сделаю. Спасибо за любую помощь


  • Есть ли причина, по которой вы не закрываете теги span? 17.11.2011
  • Я бы сказал, чем ближе, тем лучше, меньше размер файла и т. д. 17.11.2011

Ответы:


1
  1. Закрыть диапазон
  2. Установите width, height, float и margin-top этого диапазона для выравнивания с базой высоты строки

Попробуйте это: http://jsfiddle.net/Mt87G/19/

CSS

#first a{
     font-size: 10px;
     padding-left: 5px;
     line-height: 12px;
}
#second a{
    font-size: 22px;
    line-height: 25px;
    padding-left: 5px; 
}
.meta-img{
    background: url(http://i.imgur.com/Bcps8.png) no-repeat 0px -183px;
    width: 13px;
    height: 12px;
    float: left;
}
#first .meta-img{
    margin-top: 4px
}
#second .meta-img{
    margin-top: 7px
}

HTML

<p id="first">
    <a href="#">
        <span class="meta-img"></span>Test link
    </a>  
</p>    

<p id="second">
    <a href="#">
        <span class="meta-img"></span>Test link
    </a> 
</p>
17.11.2011

2

Я бы предложил использовать псевдоэлемент :before. Добавьте класс к своей якорной ссылке или элементу списка и стилизуйте элемент pseduo, чтобы он содержал изображение спрайта. Это дает тот же эффект, что и возможность задать определенный размер диапазона, без необходимости дополнительной разметки.

<li class="icon">
    <a href="#">Test Link<a/>
<li>

.icon:before{
    content: '';
    width: 10px;
    height: 10px;
    display: block;
    background: url(http://i.imgur.com/Bcps8.png) no-repeat 0px -183px;
    /* other css for positioning */
}

Если вы хотите, чтобы иконка была частью ссылки, перед ней должен быть якорь. Он будет подчеркнут, если якорь подчеркнут.

Если вы поместите его на li, ссылка все еще может быть подчеркнута без подчеркивания значка, но чтобы сделать ее кликабельной, вам нужно немного поколдовать с отступами на якорях.

Примечание: Как упомянул jimplode, это не будет работать в IE ‹= 7. Поэтому, если вам нужно, чтобы это работало там (грустно для вас), лучше использовать дополнительную разметку.

17.11.2011

3

Я думаю, что вы можете сделать больше пробелов между изображениями. Если у вас есть отдельные изображения, вы можете использовать http://spritegen.website-performance.org/ для создавать изображения спрайтов, и вы можете указать произвольное пространство между изображениями спрайтов.

Если вы динамически меняете размер шрифта, вы также можете использовать спрайт с большим пространством и можете изменить только фоновое положение.

17.11.2011

4

Хорошо написанный вопрос! Я упростил ваши две примерные скрипки в одну скрипку:

http://jsfiddle.net/Mt87G/6/

Кажется, что в варианте 16 пикселей изображение просто показывает немного больше, поскольку высота строки становится больше из-за большего размера шрифта.

Отредактировано: видимо, SO также использует спрайты, см., например, это изображение. Если я использую firebug, чтобы увеличить высоту строки, например, для кнопки «голосовать», в какой-то момент начинает появляться следующий спрайт.

Итак, если бы вы последовали их примеру, кажется, вы могли бы:

  • установите фиксированную высоту для вашего элемента
  • оставьте немного места между спрайтами, просто чтобы быть уверенным

Строгий ответ на ваш вопрос тогда кажется «нет, не нужно».

17.11.2011

5

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

17.11.2011
  • +1 Это гораздо более гибко в долгосрочной перспективе и позволяет использовать макет сетки по сравнению с вертикальным (50+ значков = один длинный вертикальный файл спрайта). Недостатком является дополнительная наценка. Jquery использует эту технику для значков кнопок пользовательского интерфейса. 17.11.2011
  • Использование диапазона имеет обратную сторону дополнительной разметки. Использование псевдоэлемента дает такой же эффект, но без лишних усилий. 18.11.2011
  • Однако имеет преимущество работы во всех браузерах, в отличие от псевдоэлемента. 21.11.2011

  • 6

    Я обычно оставляю несколько пикселей между спрайтами из-за ошибок округления, которые я видел в мобильном Safari. Если между спрайтами всего 1 пиксель, иногда на краю элемента появляется полоска следующего спрайта толщиной с волос. Добавление небольшого буферного пространства позволяет избежать этой проблемы. Если вы используете файлы PNG, на самом деле не так много дополнительного размера файла (крайне небольшое увеличение) с большим интервалом из-за того, как они сжимаются.

    17.11.2011
    Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..