Використання: перед псевдоелементом CSS для додавання зображення в модальний


116

У мене є клас CSS, Modalякий абсолютно розміщений, z-індексований вище свого батьківського і добре розміщений з JQuery. Я хочу додати зображення каретки (^) у верхню частину модального поля і дивився на використання :beforeпсевдоселектора CSS, щоб зробити це чисто.

Зображення має бути абсолютно розміщене та z-індексовано над модальним, але я не знайшов жодного способу додати відповідний клас до зображення в contentатрибуті:

.Modal:before{
  content:url('blackCarrot.png') /* with class ModalCarrot ??*/
}

.ModalCarrot{
   position:absolute;
   left:50%;
   margin-left:-8px;
   top:-16px;
}

Другий найкращий варіант - чи можу я додати стилі, вбудовані в атрибут вмісту?

Відповіді:


175

http://caniuse.com/#search=:далі

:afterі :beforeз contentними добре використовувати, оскільки вони підтримуються у кожному головному браузері, окрім Internet Explorer, щонайменше, у 5 версіях. Internet Explorer має повну підтримку у версії 9+ та часткову підтримку у версії 8.

Це те, що ви шукаєте?

.Modal:after{
  content:url('blackCarrot.png'); /* with class ModalCarrot ??*/
  position:relative; /*or absolute*/
  z-index:100000; /*a number that's more than the modal box*/
  left:-50px;
  top:10px;
}

.ModalCarrot{
   position:absolute;
   left:50%;
   margin-left:-8px;
   top:-16px;
}

Якщо ні, то можете пояснити трохи краще?

або ви можете використовувати jQuery, як сказав Джошуа:

$(".Modal").before("<img src='blackCarrot.png' class='ModalCarrot' />");


2
Це. Точка Джошуа щодо сумісності браузера також є правильною, хоча IE8 надає зображення у вмісті: після вмісту, але не надаватиме його частини, які знаходяться за межами батьківського кордону.
RSG

Зараз (у 2017 році) IE 11 - єдина версія IE, яка все ще підтримується Microsoft; Таким чином, не можна багато хвилюватися про сумісність IE8. Також рішення CSS майже завжди краще, ніж рішення jQuery, оскільки вони, як правило, завантажуються набагато швидше, а jQuery може спричинити мерехтіння екрана, переписавши ваш макет після завантаження сторінки.
Nosajimiki

1
@Nosajimiki про те, чи варто вам турбуватися про старіші веб-переглядачі, залежить чи не від ваших відвідувачів.
Хосе Фаети

35

Ви повинні використовувати атрибут background, щоб надати цьому елементу зображення, і я би використовував :: after, а не раніше, таким чином він повинен бути вже намальований поверх вашого елемента.

.Modal:before{
  content: '';
  background:url('blackCarrot.png');
  width: /* width of the image */;
  height: /* height of the image */;
  display: block;
}

Дякую за пропозицію - у модаля є рамка, тому я не думаю, що я можу використовувати фонове зображення для розташування зображення моркви над кольором кордону / біг за потребою.
RSG

Чому ні? якщо ви абсолютно позиціонуєте цей псевдоелемент, ви можете переміщати його з полями. Він буде намальований поверх меж інших елементів та / або кольору bg.
Хосе Фаети

Фонове зображення не може поширюватися за межі діва?
RSG

12
Вам, ймовірно, потрібно додати вміст: ''; до цього, щоб він з'явився
Willster

13

1.це моя відповідь на вашу проблему.

.ModalCarrot::before {
content:'';
background: url('blackCarrot.png'); /*url of image*/
height: 16px; /*height of image*/
width: 33px;  /*width of image*/
position: absolute;
}

5
Я додав background-size: 33px 16px; background-repeat: no-repeat;масштаб зображення!
Hasse Björk

-4

Вміст і раніше є обох ненадійними у веб-переглядачах. Я б запропонував дотримуватися jQuery для цього. Я не впевнений, що ви робите, щоб з’ясувати, чи потрібно додати цю моркву чи ні, але ви повинні отримати загальну думку:

$(".Modal").before("<img src='blackCarrot.png' class='ModalCarrot' />");

1
Це мене сумує. У нас є милосердно обмежений набір орієнтованих браузерів, тому мене все ще цікавить, що можливо з CSS.
RSG

Навіть із тим, що вміст активно використовується в CSS3, з того, що я бачив, він все ще є одним із тих, хто ніде не підтримується повністю. Я вважаю, що це має відношення до деякого страху перед можливістю ввести зло. Крім того, я вважаю, що вміст потребує вже наявного елемента, який потрібно вводити, - не впевнений, чи зможу я маніпулювати DOM настільки сильно.
Джошуа

4
Ця відповідь неправильна, оскільки вона має ненадійну підтримку у веб-переглядачах. Contentі after/beforeвони дуже надійні для кожного головного браузера, він працює з ie8, принаймні FF3.5, принаймні Chrome 9, принаймні Opera 10.6, принаймні Safari 3.2, кожна версія iOS Safari, кожна версія Opera mini, кожна версія Opera Mobile і будь-коли версії браузера Android. якщо ви хочете знати, чи підтримується щось перехресний браузер, перевірте: caniuse.com/#search=:after
android.nick

Тільки тому, що Інтернет каже, що це є, не означає, що це правда. Працюйте з ними, вони діють по-різному у кожному браузері. І IE 7 все ще є дуже популярним браузером, який не підтримує жодного з них.
Джошуа

3
На насправді, ви краще з CSSбільш ніж JavaScriptна цьому. Незалежно від того , як кровотечі краю браузера, користувач все ще може мати JavaScriptінвалід ... До щастя , в цьому випадку :beforeі :afterселектори широко підтримуються; quirksmode.org/css/selectors
Стів Бузонас
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.