CSS: Как удалить псевдоэлементы (после, до,…)?

236

Я хотел бы использовать переключатель для размещения тегов абзаца на веб-странице.

Я использую псевдоэлемент после:

p:after {content: url("../img/paragraph.gif");}

Теперь мне нужно удалить этот код CSS со страницы.

Как это можно сделать легко?

Я хочу добавить, что:

  • JQuery уже используется на странице

  • и я не хочу включать или удалять файлы, содержащие CSS.

Thariama
источник
возможная
копия манипулирования псевдоэлементами

Ответы:

455
p:after {
   content: none;
}

none является официальным значением для установки содержимого, если оно указано, в значение ничего.

http://www.w3schools.com/cssref/pr_gen_content.asp

Джилли
источник
2
Удаляет ли это на самом деле другие стили, связанные с контентом, таким образом, даже если у вас установлены отступы и поля, они становятся инертными?
Райан Уильямс
Это должен быть принятый ответ. Использование контента: ''; может привести к неожиданным результатам при попытке переопределить ранее установленный атрибут содержимого.
Рой Милдер
Вы не можете просто сделать display: none?
MDTech.us_MAN
@ MDTech.us_MAN да, вы можете сделать «display: none», но оно все равно будет сохранено в дереве DOM. Настройка содержимого: никто даже не помещает его в дерево DOM (это можно проверить с помощью инспектора DOM в Chrome)
kumarharsh
29

Вам нужно добавить правило CSS, которое удаляет содержимое после ( через класс ).


Обновление из - за некоторые действительные комментарии.

Более правильным способом полного удаления / отключения :afterправила является использование

p.no-after:after{content:none;}

как Джиллиан Ло Вонг ответил .


Оригинальный ответ

Вам нужно добавить правило CSS, которое удаляет содержимое после ( через класс ).

p.no-after:after{content:"";}

и добавить этот класс к вашему, pкогда вы хотите с этой строкой

$('p').addClass('no-after'); // replace the p selector with what you need...

рабочий пример по адресу: http://www.jsfiddle.net/G2czw/

Габриэле Петриоли
источник
16
$('p:after').css('display','none');
Хенрик Альбрехтссон
источник
9

Как упоминалось в ответе Джиллиан , назначение noneдля contentрешения проблемы:

p::after {
   content: none;
}

Обратите внимание , что в CSS3 , W3C , рекомендуется использовать два двоеточия ( ::) для псевдо-элементов , таких как ::beforeили ::after.

Из веб-документа MDN о псевдоэлементах :

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

simhumileco
источник
5

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

drewww
источник
0

была такая же проблема несколько минут назад и просто content:none;не делал работу, но добавление content:none !important;и display:none !important;работал для меня

SkyRider
источник
-3
p:after {
  content: none;
}

Это способ удалить, :afterи вы можете сделать то же самое для:before

Приянка Чоудхары
источник
1
Этот ответ, кажется, повторяет то же решение, что и принятое в настоящее время решение от нескольких лет назад. Если вы чувствуете, что вам есть что добавить, оставьте это как комментарий к исходному ответу. В качестве альтернативы, если у вас есть другое решение, пожалуйста, объясните, почему оно отличается (и, возможно, лучше).
MTCoster