Utilizzo di CSS per inserire testo


207

Sono relativamente nuovo al CSS e l'ho usato per cambiare lo stile e la formattazione del testo.

Vorrei ora usarlo per inserire il testo come mostrato di seguito:

<span class="OwnerJoe">reconcile all entries</span>

Che spero di riuscire a mostrare come:

Compito di Joe: riconciliare tutte le voci

Cioè, semplicemente in virtù della classe "Proprietario Joe", voglio che il testo Joe's Task:venga visualizzato.

Potrei farlo con un codice come:

<span class="OwnerJoe">Joe's Task:</span> reconcile all entries.

Ma ciò sembra terribilmente ridondante sia per specificare la classe che il testo.

È possibile fare quello che sto cercando?

EDIT Un'idea è quella di provare a configurarlo come ListItem in <li>cui il "proiettile" è il testo "Joe's Task". Vedo esempi di come impostare vari stili di proiettile e persino immagini per proiettili. È possibile utilizzare un piccolo blocco di testo per il punto elenco?


1
l'idea <li> non è una buona pratica. Se vuoi davvero farlo, cerca invece un linguaggio di modello.
Gary,

1
Sembra come usare il CSS3: prima o: dopo gli pseudo-elementi, dovrai semplicemente spostare la ridondanza sulla terra CSS (perché dovrai aggiungere un'istruzione CSS per OwnerJoe, OwnerJane, ecc.)
Matt Beckman,

2
@Matt Beckman: va bene per me. Posso facilmente definire blocchi CSS per ciascuno dei miei utenti. Ripeterlo più volte nell'HTML sembra eccessivo nel mio caso.
abelenky,

1
Sento che un uso più pratico di questo per un pubblico più ampio sarebbe come label.required:before {content: "* ";}aggiungere un asterisco davanti ai campi obbligatori, forse.
Patrick,

Risposte:


317

Lo è, ma richiede un browser abilitato CSS2 (tutti i principali browser, IE8 +).

.OwnerJoe:before {
  content: "Joe's Task:";
}

Ma preferirei usare Javascript per questo. Con jQuery:

$('.OwnerJoe').each(function() {
  $(this).before($('<span>').text("Joe's Task: "));
});

4
Dovrebbe essere uno spazio dopo i due punti.
sistema PAUSA

7
I test iniziali indicano che la proprietà content funziona bene. Complimenti per aver trovato una risposta quando tutti gli altri dicono che non può essere fatto. :)
abelenky,

8
Per coprire IE più vecchi, puoi includere condizionalmente code.google.com/p/ie7-js che consentirà al tuo CSS di rimanere lo stesso per tutti i browser. È un'alternativa a jQuery più vicina agli standard.
sistema PAUSA

15
Perché preferisci consigliare l'utilizzo di Javascript?
Rikki,

Interessante: sembra funzionare con uno o due due punti, ad esempio .OwnerJoe:beforee.OwnerJoe::before
Mr. Kennedy

40

La risposta che usa jQuery che a tutti sembra piacere ha un grande difetto, che non è scalabile (almeno come è scritto). Penso che Martin Hansen abbia l'idea giusta, ovvero usare HTML5data-* attributi . E puoi anche usare l'apostrofo correttamente:

html:

<div class="task" data-task-owner="Joe">mop kitchen</div>
<div class="task" data-task-owner="Charles" data-apos="1">vacuum hallway</div>

css:

div.task:before { content: attr(data-task-owner)"'s task - " ; }
div.task[data-apos]:before { content: attr(data-task-owner)"' task - " ; }

produzione:

Joe's task - mop kitchen
Charles' task - vacuum hallway

19
Un interessante effetto collaterale dell'uso del contenuto css rispetto a jQuery è che il testo fornito dall'attributo content non è selezionabile, il che potrebbe essere o meno desiderabile ....
Jeff

Se il testo fa parte del layout di pagina e non fa parte del contenuto, forse il CSS è il posto giusto per questo. Ad esempio, se vuoi che la tua pagina si sposti su tutte le pagine siano le parole "Hello World" in viola su uno sfondo verde lime, avrebbe senso. Tutto ciò che serve per cambiare l'intestazione della pagina è modificare un singolo file CSS. Se avessi il testo in HTML, sarebbe necessaria una modifica per ogni singola pagina del tuo sito e forse anche modifiche alle tue webapp.
mutuo

28

Controlla anche la funzione attr () dell'attributo del contenuto CSS. Emette un dato attributo dell'elemento come nodo di testo. Usalo così:

<div class="Owner Joe" />

div:before {
  content: attr(class);
}

O anche con i nuovi attributi di dati personalizzati HTML5:

<div data-employeename="Owner Joe" />

div:before {
  content: attr(data-employeename);
}

2
È un'idea decisamente migliore: odio l'idea di creare una classe CSS per visualizzare contenuti. Potrebbe finire per generare css in modo dinamico su una query sql. Sostituirei il selettore con div[data-employeename]:before.
Johnny5,

6

Basta codificarlo in questo modo:

.OwnerJoe {
  //other things here
  &:before{
    content: "Joe's Task: ";
  }
}

18
Questo non è un CSS valido, ma la sintassi di Sass.
Asfand Qazi
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.