Повторяющиеся изображения с:после псевдоэлементов

#html #css #pseudo-element

#HTML #css #псевдоэлемент

Вопрос:

Я хотел бы разместить заголовки на своем сайте следующим образом: http://cl.ly/0m3F0j392e0G1n0s0T34 Что бы я в идеале хотел сделать, так это использовать текст для заголовка, а затем сделать так, чтобы gif размером 10 на 10 пикселей повторялся горизонтально после него.

РЕДАКТИРОВАТЬ: я должен добавить, что я хотел бы использовать текстурированный фон, поэтому я не могу установить какие-либо сплошные цвета для элемента h2.

Я смог добавить gif после заголовка, но я не могу заставить его повторяться, даже если добавлю repeat-x. Вот код, который я использовал:

 h2:after {
content: 'url(img/imagehere.gif) repeat-x';
}
 

Существуют ли какие-либо обходные пути для этого или какие-либо альтернативные методы? Я бы предпочел не прибегать к нарезке всего заголовка в виде изображения. Я думал о том, чтобы переместить заголовок влево, а затем переместить пустой div вправо с gif в качестве повторяющегося фонового изображения, но я полагаю, что для этого предназначен псевдоэлемент:after, верно?

Ответ №1:

Немного халтурно и будет включать добавление overflow-x:hidden; к родительскому элементу, но должно сработать:

 h2 {
    position: relative;
    padding-right: 10px;
    float: left;
    }
h2::after {
    content: '';
    position: absolute;
    left: 100%;
    right: 9999px;
    background: url(image.gif);
    height: 10px;
    width: 9999px;
    }
 

Комментарии:

1. К вашему сведению, обратите внимание на разницу в обозначениях между псевдоэлементами и псевдоклассами в CSS3

2. К вашему сведению, обратите внимание на разницу между совместимостью браузера и CSS3: P

Ответ №2:

Вы можете установить любые атрибуты для своего псевдоэлемента after. Что бы я сделал, это установил для содержимого значение «» (пустое), а затем установил ширину и высоту для псевдоэлемента. Тогда вы можете установить фон для повторяющегося gif как обычно.

 h2:after {
  content: "";
  height:20px;
  width:400px;
  background:url('img/imagehere.gif') repeat-x top left;
}
 

Комментарии:

1. Спасибо за ответ. Я пробовал это, и это кажется логичным, но не стоит по какой-либо причине. Я настроил его на JSfiddle, чтобы показать вам: jsfiddle.net/PMc4S

Ответ №3:

При использовании content:url() класса pressed создайте img элемент. Вам нужно использовать background в этом случае. Нравится то, что сказал Эрик.

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

 <h1><span>your text content</span></h1>
 

А затем добавьте повторяющийся фон в h

 h1{ background:'url(img/imagehere.gif) repeat-x';}
 

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

 span{background:white} 
 

Обновить:

если у вас есть фоновое изображение под вашим h1 , то вы можете сделать это:

Тот же HTML: <h1><span>your text content</span></h1>

CSS:

скажем, у вас body есть фоновое изображение:

 body{background-image:(foo)}
 

затем вы хотите bar , чтобы ваше изображение повторялось после заголовка. Вы должны сделать это:

 h1{background:url(bar)}
 

И добавьте тот же фон body span , который у вас есть, к тексту, содержащему ваш текст:

 h1 span{background-image:(foo)}
 

Это решило бы вашу проблему. Посмотрите на эту скрипку, чтобы увидеть в действии. Это не зависит от вашего размера текста или чего-либо еще.

Примечание: если вы используете span , то вы должны сделать это dispaly:inline-block

Обновить:

Основываясь на вашем запросе, я переосмысливаю это. Я использовал tables это время. Код без объяснения:

HTML

 <table>
    <tbody>
        <tr>
            <td><h1>Heading</h1></td>
            <td class="pattern"></td>
        </tr>
    </tbody>
</table>
 

CSS

 body{background:url(foo)}
table, tbody, tr{width:100%;}
.pattern{background:url(bar); width:100%;}
 

Смотрите в действии<

Комментарии:

1. Привет, хороший обходной путь! Проблема в том, что эти элементы находятся поверх текстурированного фона (извините, я не указал это в исходном сообщении), поэтому сплошной цвет будет выглядеть немного странно

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

3. Хорошо, понял! Смотрите обновления! (Я тоже ненавижу таблицы, но это лучше, чем использовать JS для стилизации)

4. Мохсен, ты оказал огромную помощь, и я действительно ценю твою помощь! Похоже, CSS-трюк от Криса тоже работает.

Ответ №4:

Приведенный выше ответ от Эрика Хинтона будет работать, если вы добавите объявление «display: block», как показано ниже:

 h2:after {
  content: "";
  display:block;
  height:20px;
  width:400px;
  background:url('img/imagehere.gif') repeat-x top left;
}