Comment puis-je remplacer le texte par CSS?

Comment puis-je remplacer le texte par css en utilisant une méthode comme celle-ci:

.pvw-title img[src*="IKON.img"] { visibility:hidden; }

au lieu de ( img[src*="IKON.img"] ), je dois utiliser quelque chose qui peut remplacer le texte à la place.

je dois utiliser [ ] pour le faire fonctionner.

<div class="pvw-title">Facts</div>

je dois remplacer"faits".

220
demandé sur RyanS 2011-10-26 01:58:46

17 réponses

ou peut-être pourriez-vous envelopper "Facts" autour d'un <span> comme suit:

<div class="pvw-title"><span>Facts</span></div>

ensuite utiliser:

.pvw-title span {
  display: none;
}
.pvw-title:after {
  content: 'whatever it is you want to add';
}
208
répondu Matthew Cachia 2012-12-18 21:03:52

obligatoire : c'est un hack: CSS n'est pas le bon endroit pour le faire, mais dans certaines situations - par exemple, vous avez une bibliothèque tierce partie dans une iframe qui ne peut être personnalisée que par CSS - ce type de hack est la seule option.

vous pouvez remplacer le texte par CSS. remplaçons un bouton vert par" Bonjour "par un bouton rouge qui dit" au revoir " , en utilisant CSS. Voir http://jsfiddle.net/ZBj2m/274 / pour une démo en direct:

voici notre bouton vert:

<button>Hello</button>

button {
  background-color: green;
  color: black;
  padding: 5px;
}

cachons maintenant l'élément d'origine, mais ajoutons un autre élément de bloc par la suite:

button {
  visibility: hidden;
}
button:after {
  content:'goodbye'; 
  visibility: visible;
  display: block;
  position: absolute;
  background-color: red;
  padding: 5px;
  top: 2px;
}

Note:

  • nous devons explicitement marquer cette valeur comme un élément de bloc, 'after' elements are span by default
  • nous devons compenser l'élément original en ajustant la position du pseudo-élément.
  • nous devons Cacher l'élément original et afficher le pseudo-élément en utilisant visibility . Note display: none sur l'élément original ne fonctionne pas.
170
répondu mikemaccana 2018-08-08 15:14:22

si vous êtes prêt à utiliser des pseudo-éléments et les laisser insérer du contenu, Vous pouvez faire ce qui suit. Il ne suppose la connaissance de l'élément d'origine et ne nécessite pas de supplément additionnel.

.element {
  text-indent: -9999px;
  line-height: 0; /* Collapse the original line */
}

.element::after {
  content: "New text";
  text-indent: 0;
  display: block;
  line-height: initial; /* New content takes up original line height */
}

JSFiddle Exemple

120
répondu James van Dyke 2014-02-26 22:14:12

basé sur la réponse de mikemaccana , cela a fonctionné pour moi

button {
  position: absolute;
  visibility: hidden;
}

button:before {
  content: "goodbye";
  visibility: visible;
}

§ positionnement absolu

un élément en position absolue de l'écoulement et donc prend pas de place lors de l'insertion d'autres éléments.

45
répondu Steven Penny 2017-05-23 12:18:17

Simple, Court, Efficace. Aucun html supplémentaire n'est nécessaire.

.pvw-title { color: transparent; }

.pvw-title:after { 
        content: "New Text To Replace Old";
        color: black; /* set color to original text color */
        margin-left: -30px;
        /* margin-left equals length of text we're replacing */
    }

j'ai dû le faire pour remplacer le lien texte, autre que la maison, pour woocommerce breadcrumbs

SASS / LESS

body.woocommerce .woocommerce-breadcrumb > a[href$="/shop/"] {
    color: transparent;
    &:after { 
        content: "Store";
        color: grey;
        margin-left: -30px;
    }
}

CSS

body.woocommerce .woocommerce-breadcrumb > a[href$="/shop/"] {
    color: transparent;
}

body.woocommerce .woocommerce-breadcrumb > a[href$="/shop/"]&:after { 
    content: "Store";
    color: @child-color-grey;
    margin-left: -30px;
}
25
répondu hawkeye126 2015-11-09 18:27:07

vous ne pouvez pas, vous pouvez.

.pvw-title:after {
  content: "Test";
}

inscrire après le contenu actuel de l'élément. Il ne le remplace pas réellement, mais vous pouvez choisir pour un div vide, et utiliser CSS pour ajouter tout le contenu.

mais alors que vous pouvez plus ou moins, vous ne devriez pas. Le contenu réel doit être mis dans le document. La propriété content est principalement destinée à un petit markup, comme les guillemets autour du texte qui doit apparaître cité.

13
répondu GolezTrol 2015-01-28 14:39:52

essayez d'utiliser: avant et: après. Un insert texte après HTML est rendu, les autres insert avant HTML est rendu. Si vous voulez remplacer le texte, Laissez le bouton contenu vide.

Cet exemple définit le texte du bouton en fonction de la taille de la largeur de l'écran.

<meta name="viewport" content="width=device-width, initial-scale=1">

<style>
  button:before {
    content: 'small screen';
  }
  @media screen and (min-width: 480px) {
    button:before {
      content: 'big screen';
    }
  }
</style>
<body>
  <button type="button">xxx</button>
  <button type="button"></button>
</body>

texte du bouton:

1) avec: avant

big screenxxx

grand écran

2) avec: après

écran xxxbig

grand écran

12
répondu live-love 2018-08-26 00:33:51

cela a fonctionné pour moi avec inline text. Testé en FF, Safari, Chrome et Opera

<p>Lorem ipsum dolor sit amet, consectetur <span>Some Text</span> adipiscing elit.</p>


span {
visibility: hidden;
word-spacing:-999px;
letter-spacing: -999px; 
}

span:after {
content: "goodbye";
visibility: visible;
word-spacing:normal;
letter-spacing:normal; 
}
9
répondu Noel Williams 2013-08-02 22:39:08

j'utilise ce truc:

.pvw-title {
    text-indent: -999px;
}
.pvw-title:after {
    text-indent: 0px;
    float: left;
    content: 'My New Content';
}

j'ai même utilisé ceci pour gérer l'internationalisation des pages en changeant simplement une classe de base...

.translate-es .welcome {
    text-indent: -999px;
}
.translate-es .welcome:after {
    text-indent: 0px;
    float: left;
    content: '¡Bienvenidos!';
}
8
répondu Pete OK 2015-07-05 12:16:48

il se peut qu'il ne réponde pas parfaitement à la question, mais il a satisfait mes besoins et peut-être d'autres aussi.

donc si vous voulez juste Afficher des textes ou des images différents, gardez la balise vide et écrivez votre contenu dans les attributs de données multiples comme cela <span data-text1="Hello" data-text2="Bye"></span> . Les afficher avec l'une des pseudo classes :before {content: attr(data-text1)}

Maintenant vous avez un tas de différentes façons de passer entre eux. Je les ai utilisés dans combinaison avec des requêtes Médias pour une approche de conception réactive pour changer les noms de ma navigation aux icônes.

jsfiddle de démonstration et exemples

8
répondu Robbendebiene 2016-08-07 10:26:28

j'ai eu plus de chance de régler le font-size: 0 de l'élément extérieur, et le font-size du sélecteur :after à tout ce dont j'avais besoin.

6
répondu jerome 2017-03-03 16:34:18

en utilisant un pseudo-élément, cette méthode ne nécessite pas de connaissance de l'élément original et ne nécessite pas de marge supplémentaire.

#someElement{
    color: transparent; /*you may need to change this color*/
    position: relative;
}
#someElement:after { /*or use :before if that tickles your fancy*/
    content:"New text";
    color:initial;
    position:absolute;
    top:0;
    left:0;
}
2
répondu Vin 2015-05-28 18:48:45

cette option implémente une case à cocher comme un bouton qui affiche oui ou non selon son état "coché". Ainsi, il démontre une façon de remplacer le texte en utilisant CSS sans avoir à écrire de code.

il se comportera toujours comme une case à cocher en ce qui concerne le retour (ou le non retour) d'une valeur de poteau, mais d'un point de vue d'affichage il ressemble à un bouton à bascule.

les couleurs peuvent ne pas être à votre goût, elles ne sont là que pour illustrer un point.

le HTML est:

<input type="checkbox" class="yesno" id="testcb" /><label for="testcb"><span></span></label>

...et le CSS est:

/* --------------------------------- */
/* Make the checkbox non-displayable */
/* --------------------------------- */
input[type="checkbox"].yesno {
    display:none;
}
/* --------------------------------- */
/* Set the associated label <span>   */
/* the way you want it to look.      */
/* --------------------------------- */
input[type="checkbox"].yesno+label span {
    display:inline-block;
    width:80px;
    height:30px;
    text-align:center;
    vertical-align:middle;
    color:#800000;
    background-color:white;
    border-style:solid;
    border-width:1px;
    border-color:black;
    cursor:pointer;
}
/* --------------------------------- */
/* By default the content after the  */
/* the label <span> is "No"          */
/* --------------------------------- */
input[type="checkbox"].yesno+label span:after {
    content:"No";
}
/* --------------------------------- */
/* When the box is checked the       */
/* content after the label <span>    */
/* is "Yes" (which replaces any      */
/* existing content).                */
/* When the box becomes unchecked the*/
/* content reverts to the way it was.*/
/* --------------------------------- */
input[type="checkbox"].yesno:checked+label span:after {
    content:"Yes";
}
/* --------------------------------- */
/* When the box is checked the       */
/* label <span> looks like this      */
/* (which replaces any existing)     */
/* When the box becomes unchecked the*/
/* layout reverts to the way it was. */
/* --------------------------------- */
input[type="checkbox"].yesno:checked+label span {
    color:green;
    background-color:#C8C8C8;
}

Je l'ai seulement essayé sur Firefox, mais c'est css standard donc il devrait fonctionner ailleurs.

2
répondu Steve Douglas 2015-11-12 15:05:34

ce n'est pas vraiment possible sans astuces. Voici une manière qui fonctionne en remplaçant le texte avec une image de texte.

.pvw-title{
    text-indent:-9999px;
    background-image:url(text_image.png)
}

ce type de chose est généralement fait avec Javascript. Voici comment cela peut être fait avec jQuery:

$('.pvw-title').text('new text');
1
répondu Nathan Manousos 2011-10-25 22:06:48

j'ai eu un problème où je devais remplacer le texte du lien mais ne pouvais pas utiliser javascript ni modifier directement le texte d'un lien hypertexte comme il a été compilé à partir de XML. Aussi, je ne pouvais pas utiliser de pseudo-éléments, ou ils ne semblaient pas fonctionner quand je les avais essayés.

en gros, j'ai mis le texte que je voulais dans une portée et mis l'étiquette d'ancrage en dessous et enveloppé les deux dans un div. J'ai essentiellement déplacé l'étiquette d'ancrage vers le haut via css et ensuite fait la police transparente. Maintenant, quand tu survoles la portée, ça "agit" comme un lien. Une façon vraiment hacky de faire cela, mais c'est comment vous pouvez avoir un lien avec le texte différent...

C'est un violon de comment je suis arrivé à contourner ce numéro

My HTML

<div class="field">
    <span>This is your link text</span><br/>
    <a href="//www.google.com" target="_blank">This is your actual link</a>
</div>

My CSS

 div.field a {
     color:transparent;
     position:absolute;
     top:1%;
 }
 div.field span {
     display:inline-block;
 }

Le CSS devra changer selon vos besoins, mais c'est d'une manière générale de faire ce que vous demandez.

Edit: Quelqu'un peut-il me dire pourquoi cela a été rejeté? Ma solution fonctionne...

1
répondu AlmightyWhy 2016-04-26 00:17:52

contrairement à ce que je vois dans toutes les autres réponses, vous n'ont pas besoin d'utiliser des pseudo-éléments afin de remplacer le contenu d'un équilibre avec une image

Fait
div.pvw-title { /* no :after or :before required*/
content: url("your url here");
}
1
répondu Estecka 2017-07-21 23:43:58

Texte de Remplacement avec des Pseudo-éléments et CSS Visibilité

HTML

<p class="replaced">Original Text</p>

CSS

.replaced {
    visibility: hidden;
    position: relative;
}

.replaced:after {
    visibility: visible;
    position: absolute;
    top: 0;
    left: 0;
    content: "This text replaces the original.";
}
0
répondu Ahsan Aftab 2018-10-05 20:10:17