CSS: Comment supprimer les pseudo-éléments (après, avant,…)?

236

Je voudrais utiliser un commutateur pour la disposition des balises de paragraphe sur une page Web.

J'utilise le pseudo-élément après:

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

Maintenant, je dois supprimer ce code CSS de la page.

Comment cela peut-il se faire facilement?

Je veux ajouter que:

  • jQuery est déjà utilisé sur la page

  • et je ne veux pas inclure ou supprimer des fichiers contenant CSS.

Thariama
la source
duplication possible de pseudo-éléments CSS
Blazemonger

Réponses:

455
p:after {
   content: none;
}

none est la valeur officielle pour définir le contenu, s'il est spécifié, sur rien.

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

Gilly
la source
2
Est-ce que cela efface réellement les autres styles liés au contenu, donc même si vous avez des rembourrages et des marges définis, ils deviennent inertes?
Ryan Williams
Ce devrait être la réponse acceptée. Utilisation du contenu: ''; peut entraîner des résultats inattendus lorsque vous essayez de remplacer un attribut de contenu précédemment défini.
Roy Milder
Tu ne peux pas faire display: none?
MDTech.us_MAN
@ MDTech.us_MAN oui vous pouvez faire "display: none", mais il sera toujours conservé dans l'arborescence DOM. Définition du contenu: aucun ne le met même dans l'arborescence DOM (vous pouvez le vérifier via l'inspecteur DOM de Chrome)
kumarharsh
29

Vous devez ajouter une règle css qui supprime le contenu après ( via une classe ).


Une mise à jour en raison de quelques commentaires valides.

La manière la plus correcte de supprimer / désactiver complètement la :afterrègle consiste à utiliser

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

comme Gillian Lo Wong a répondu .


Réponse originale

Vous devez ajouter une règle css qui supprime le contenu après ( via une classe ).

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

et ajoutez cette classe à votre pquand vous voulez avec cette ligne

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

un exemple de travail sur: http://www.jsfiddle.net/G2czw/

Gabriele Petrioli
la source
16
$('p:after').css('display','none');
Henrik Albrechtsson
la source
9

Comme mentionné dans la réponse de Gillian , attribuer noneà contentrésout le problème:

p::after {
   content: none;
}

Notez que dans CSS3 , le W3C a recommandé d'utiliser deux deux-points ( ::) pour les pseudo-éléments comme ::beforeou ::after.

Du web doc MDN sur les pseudo-éléments :

Remarque: En règle générale, les deux-points ( ::) doivent être utilisés à la place des deux-points ( :). Cela distingue les pseudo-classes des pseudo-éléments. Cependant, comme cette distinction n'était pas présente dans les anciennes versions de la spécification W3C, la plupart des navigateurs prennent en charge les deux syntaxes pour des raisons de compatibilité. Notez que cela ::selectiondoit toujours commencer par des deux points ( ::).

simhumileco
la source
5

Cela dépend de ce qui est réellement ajouté par les pseudosélecteurs. Dans votre situation, définir le contenu sur ""vous en débarrassera, mais si vous définissez des bordures ou des arrière-plans ou autre chose, vous devez les supprimer spécifiquement. Pour autant que je sache, il n'y a pas de remède universel pour tout supprimer d'un élément avant / après, quel qu'il soit.

drewww
la source
0

a eu le même problème il y a quelques minutes et content:none;n'a tout simplement pas fait de travail mais l'ajout content:none !important;et le display:none !important;travail pour moi

SkyRideR
la source
-3
p:after {
  content: none;
}

Ceci est un moyen de supprimer le :afteret vous pouvez faire de même pour:before

Priyanka Choudhary
la source
1
Cette réponse semble réitérer la même solution que celle actuellement acceptée il y a plusieurs années. Si vous sentez que vous avez quelque chose à ajouter, veuillez le laisser comme un commentaire sur la réponse originale. Alternativement, si vous avez une solution différente, veuillez expliquer pourquoi elle est différente (et peut-être meilleure).
MTCoster