Не могу заставить работать CSS Sprite .. что я делаю не так?

Я использую Генератор спрайтов CSS для создания спрайтов для веб-страницы, над которой я работаю, но, похоже, это не работает, и я не знаю почему ... Я думаю, это что-то очевидное, но ...!

Итак, я взял 3 изображения, заархивировал, сгенерировал файл PNG (я проверил результат, он кажется нормальным) и получил обратно следующие классы css:

.sprite-welcom1 { background-position: 0 -30px; } 
.sprite-welcom3 { background-position: 0 -109px; } 
.sprite-3 { background-position: 0 -188px; } 

Итак, вот HTML-код, который я тестирую, и по какой-то причине все, что я получаю, - это хорошая пустая страница:

<html>
<head>
    <style>
    .sprite-welcom1 { background-position: 0 -30px; } 
    .sprite-welcom3 { background-position: 0 -109px; } 
    .sprite-3 { background-position: 0 -188px; } 

    .sprite-bg {
       background: url(csg-495a902b04181.png) no-repeat top left;
    }
    </style>
</head>
<body>
    <div class = "sprite-bg sprite-3"></div>
</body>
</html>

Какие-нибудь советы?

Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
2
0
6 018
8

Ответы 8

Правило .sprite-bg для background-position, установленное как часть составного правила для background (часть top left), имеет более высокий приоритет, чем автономный параметр background-position для .sprite-3, поскольку он появляется позже в таблице стилей.

Поместите правило для .sprite-bg первым.

Дуг прав. Вы можете выявить подобные проблемы, используя инструменты разработчика вашего браузера. В Windows, Firefox, IE и Chrome F12 используется как горячая клавиша для вызова инструментов разработчика.

Tony Topper 08.12.2011 18:52

Определите ширину и высоту для <div class = "sprite-bg sprite-3">.

div пуст. положить что-нибудь внутрь. как космос (&nbsp;).

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

Также не забывайте о порядке фона. фоновая позиция: | вверху | | слева |;

Это меня пару раз облажало. Наконец, в A List Apart есть отличная статья о Sprite Maps (http://www.alistapart.com/articles/sprites/).

<html>
<head>
    <style>
    .sprite-container div {
       background: url(csg-495a902b04181.png) top left no-repeat;
       width: 20px; //width is neccessary
       height: 20px; //height is neccessary
    }

    .sprite-3 { background-position: 0 -188px; } 
    .sprite-4 { background-position: -20px -188px; }

    </style>
</head>
<body>
    <div class = "sprite-container">
      <div class = "sprite-3"></div>
      <div class = "sprite-4"></div>
    </div>
</body>
</html>

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

Tim Knight 31.12.2008 02:02

Не используйте генератор. Найдите время, чтобы сделать это самостоятельно с нуля. Тогда в следующий раз, когда вы воспользуетесь этим методом, вы будете знать, что искать, когда что-то пошло не так, и вы ответите на свой вопрос, и, черт возьми, может быть, кто-то еще находится в Stack Overflow.

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

Откройте Photoshop, GIMP или почти любое современное программное обеспечение для редактирования изображений. Убедитесь, что в вашей программе включена опция линейки, и таким образом измерьте координаты фонового изображения вашего элемента. При отсутствии линейок - что, вероятно, является редкостью, вы всегда можете поиграть с расширением MeasureIt Firefox и открытием .png во вкладке.

Как уже упоминалось, ваш элемент sprite-bg должен иметь либо некоторый контент, чтобы придать ему высоту / ширину, либо иметь эти свойства, указанные в css, таким образом:

.sprite-bg {
  background: url(csg-495a902b04181.png) no-repeat top left;
  width: 100px; /* (or whatever the width should be) */
  height: 100px; /* (or whatever the height should be) */
}

Как сказал кто-то другой, я бы переместил правила для .sprite-welcom1, .sprite-welcom3 и .sprite-3 ниже основного .sprite-bg в таблице стилей.

По какой-то причине Firefox 3 иногда требует 2 класса в селекторе CSS, чтобы карта спрайтов работала. Я догадываюсь, что правила специфичности вызывают проблемы при загрузке карты спрайтов. Добавив дополнительный класс, он работает правильно.

/* Bad  */ .childClass2 { background-position: -10px -20px; }
/* Good */ .parentClass1 .childClass2 { background-position: -10px -20px; }

Всегда хорошо «пространство имен» вашего CSS с помощью parentClass, чтобы избежать неожиданной стилизации тега DOM в другом месте. Вот несколько дополнительных улучшений всех вышеперечисленных идей.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<HTML xmlns = "http://www.w3.org/1999/xhtml">
<head>
    <style type = "text/css">
    .sprite-container div {
       background: transparent url(//www.yourDomain.com/csg-495a902b04181.png) no-repeat scroll 0 0;
       width: 200px; /* width is necessary */
       height: 20px; /* height is necessary */
    }
    .sprite-container .sprite-3 { background-position: 0 -188px; } 
    .sprite-container .sprite-4 { background-position: -20px -188px; }
    </style>
</head>
<body>
    <div class = "sprite-container">
      <div class = "sprite-3"></div> 
      <div class = "sprite-4"></div> 
      <!-- Empty divs are fine! Unless you *really* want text on top of
           your sprite map. :o) Btw: &shy; is invisible when a hyperlink
           is wrapped around it. &nbsp is not... it creates an 
           underscored hyperlink. Use &shy; which is a soft-hyphen.
       -->
    </div>
</body>
</html>

Этот код работает в: IE 7, Firefox 3, Google Chrome 1, Opera 9 и Safari 3.

Совет. Если в URL-адресе не указано http: //, то карта спрайтов будет обслуживаться как из соединений http: //, так и https: //.

(Прокрутите вправо, чтобы увидеть «no-repeat scroll 0 0;»)

Вы должны объявить height и width для элемента div. Вот и все.

Другие вопросы по теме