È possibile impostare l'equivalente di un attributo src di un tag img in CSS?


533

È possibile impostare il srcvalore dell'attributo in CSS? Al momento, quello che sto facendo è:

<img src="pathTo/myImage.jpg"/>

e voglio che sia qualcosa del genere

<img class="myClass" />
.myClass {
    some-src-property: url("pathTo/myImage.jpg");

Voglio farlo senza usare le proprietà backgroundo background-image:nei CSS.


1
Ciò apparentemente sarà possibile in CSS3: w3.org/TR/css3-values/#attribute
graphicdivine

7
Ora è possibile Testato su Chrome / Safari / Opera: stackoverflow.com/a/11484688/632951
Pacerier

2
Ma FireFox 30.0, Internet Explorer 11.0 non supporta
Laxmikant Dange

Questa soluzione CSS funzionava solo per me (in tutti i browser): stackoverflow.com/a/19114098/448816 , con l'eccezione che dovevo aggiungere: 'background-size: 100%;'.
mikhail-t,

(2020) Puoi farlo con JS getPropertyValue("--src")vedi: jsfiddle.net/CustomElementsExamples/vjfpu3a2
Danny '365CSI' Engelman

Risposte:


882

Usa content:url("image.jpg").

Soluzione di lavoro completa ( Live Demo):

<!doctype html>

<style>
.MyClass123{
	content:url("http://imgur.com/SZ8Cm.jpg");
}
</style>

<img class="MyClass123"/>

Testato e funzionante:

  • Chrome 14.0.835.163
  • Safari 4.0.5
  • Opera 10.6

Testato e non funzionante:

  • FireFox 40.0.2 (osservando gli Strumenti di rete per sviluppatori, puoi vedere che l'URL viene caricato, ma l'immagine non viene visualizzata)
  • Internet Explorer 11.0.9600.17905 (l'URL non si carica mai)

7
@gotqn, finora solo Chrome Safari Opera.
Pacerier,

36
@EricG, diverse applicazioni hanno requisiti diversi. Se non soddisfa i tuoi requisiti, non utilizzarlo. Se lo fa, usalo.
Pacerier,

4
Non funziona IE10 è un non-andare. Lasciamo IE7 (non parliamo di IE6). Anche IE8, se necessario. Ma IE9 - IE10 ... no.
Rolf,

11
Vale la pena di aggiungere che anche nei browser che supportano l'assegnazione contenta img, cambia il suo comportamento. L'immagine inizia a ignorare gli attributi di dimensione e in Chrome / Safari perde le opzioni del menu contestuale come 'Salva immagine'. Questo perché l'assegnazione di un contentefficace converte imgda elemento sostituito vuoto a qualcosa di simile <span><img></span>.
Ilya Streltsyn,

3
senza un adeguato supporto del browser non vedo questa come una risposta valida, scusate.
emachine,

183

C'è una soluzione che ho scoperto oggi (funziona in IE6 +, FF, Opera, Chrome):

<img src='willbehidden.png' 
 style="width:0px; height:0px; padding: 8px; background: url(newimage.png);">

Come funziona:

  • L'immagine è ridotta fino a quando non è più visibile per larghezza e altezza.
  • Quindi, è necessario "ripristinare" la dimensione dell'immagine con il riempimento. Questo dà un'immagine 16x16. Ovviamente puoi usare padding-left / padding-top per creare immagini rettangolari.
  • Infine, la nuova immagine viene messa lì usando lo sfondo.
  • Se la nuova immagine di sfondo è troppo grande o troppo piccola, ti consiglio di usare background-sizead esempio: background-size:cover;che adatta la tua immagine allo spazio assegnato.

Funziona anche con le immagini di input-input, rimangono cliccabili.

Guarda la demo dal vivo: http://www.audenaerde.org/csstricks.html#imagereplacecss

Godere!


6
@RobAnu: Funziona abbastanza bene - jsfiddle
TimPietrusky

9
Ti devo consegnare che è affascinante e intelligente, ma un DIV vuoto è più diretto.
Volomike,

11
In questo caso lo è. Tuttavia, in alcuni casi non è possibile controllare l'HTML e si desidera manipolare l'IMG. Lì funzionerà anche questa soluzione
RobAu l'

2
Se l'immagine ha un srcattributo, questa è la tecnica di cui hai bisogno. +1 - mi ha aiutato molto
James Long il

3
Non classificare su questa risposta, che potrebbe essere la soluzione per alcune applicazioni, ma questo metodo ha una limitazione. Non hai alcun controllo sulle dimensioni del rendering del file immagine. Nell'uso normale, è possibile controllare l'altezza-larghezza di un'immagine, se il file è specificato nell'origine. Ma questo non è sostanzialmente diverso da un div con un'immagine di sfondo, dove se il tuo div è più grande dell'immagine, sei sfortunato.
TARKUS,

114

Una raccolta di possibili metodi per impostare immagini da CSS


Lo :afterpseudo-elemento CSS2 o la sintassi più recente::after di CSS3 insieme alla content:proprietà:

Prima raccomandazione W3C: fogli di stile a cascata, livello 2 Specifica CSS2 12 maggio 1998
Ultima raccomandazione W3C: selettori Livello 3 Raccomandazione W3C 29 settembre 2011

Questo metodo aggiunge il contenuto subito dopo il contenuto dell'albero dei documenti di un elemento.

Nota: alcuni browser eseguono il rendering sperimentale della contentproprietà direttamente su alcuni selettori di elementi ignorando anche l'ultima raccomandazione W3C che definisce:

Si applica a: :beforee :afterpseudo-elementi

Sintassi CSS2 (compatibile con forward):

.myClass:after {
  content: url("somepicture.jpg");
}

Selettore CSS3:

.myClass::after {
  content: url("somepicture.jpg");
}

Rendering predefinito: Dimensione originale (non dipende dalla dichiarazione di dimensione esplicita)

Questa specifica non definisce completamente l'interazione di: before e: after con elementi sostituiti (come IMG in HTML). Questo sarà definito in modo più dettagliato in una specifica futura.

ma anche al momento della stesura di questo documento, il comportamento con un <IMG>tag non è ancora definito e sebbene possa essere utilizzato in un modo compromesso e non conforme agli standard , l' uso <img>non è raccomandato !

Ottimo metodo candidato, vedi conclusioni ...



CSS1 's background-image:proprietà:

Prima raccomandazione W3C: fogli di stile a cascata, livello 1 17 dic 1996

Questa proprietà imposta l'immagine di sfondo di un elemento. Quando si imposta un'immagine di sfondo, si dovrebbe anche impostare un colore di sfondo che verrà utilizzato quando l'immagine non è disponibile. Quando l'immagine è disponibile, è sovrapposta al colore di sfondo.

Questa proprietà è in circolazione dall'inizio del CSS e tuttavia merita una menzione gloriosa.

Rendering predefinito: Dimensione originale (non può essere ridimensionato, posizionato solo)

Tuttavia ,

La background-size:proprietà CSS3 è migliorata su di essa consentendo più opzioni di ridimensionamento:

Ultimo stato del W3C: raccomandazione Candidate Background e bordi CSS Modulo livello 3 9 settembre 2014

[length> | <percentage> | auto ]{1,2} | cover | contain

Ma anche con questa proprietà, dipende dalla dimensione del contenitore.

Ancora un buon metodo candidato, vedi conclusioni ...



CSS2 's list-style:proprietà insieme condisplay: list-item :

Prima raccomandazione del W3C: fogli di stile a cascata, specifica CSS2 di livello 2 12 maggio 1998

list-style-image: proprietà imposta l'immagine che verrà utilizzata come marcatore dell'elemento dell'elenco (punto elenco)

Le proprietà dell'elenco descrivono la formattazione visiva di base degli elenchi: consentono ai fogli di stile di specificare il tipo di marcatore ( immagine , glifo o numero)

display: list-item- Questo valore fa sì che un elemento (ad es. <li>In HTML) generi una casella di blocco principale e una casella di marcatura.

.myClass {
    display: list-item;
    list-style-position: inside;
    list-style-image: url("someimage.jpg");
}

CSS abbreviato: ( <list-style-type> <list-style-position> <list-style-image>)

.myClass {
    display: list-item;
    list-style: square inside url("someimage.jpg");
}

Rendering predefinito: Dimensione originale (non dipende dalla dichiarazione di dimensione esplicita)

restrizioni:

  • L'ereditarietà trasferirà i valori di tipo elenco da elementi OL e UL a elementi LI. Questo è il modo consigliato per specificare le informazioni sullo stile dell'elenco.

  • Non consentono agli autori di specificare uno stile distinto (colori, caratteri, allineamento , ecc.) Per l'indicatore dell'elenco o di regolarne la posizione

Questo metodo non è adatto anche per il <img>tag poiché la conversione non può essere effettuata tra tipi di elementi, ed ecco l' hack limitato e non conforme che non funziona su Chrome.

Buon metodo candidato, vedi conclusioni ...



CSS3 's border-image:proprietà raccomandazione :

Ultimo stato del W3C: raccomandazione Candidate Background e bordi CSS Modulo livello 3 9 settembre 2014

Un fondo di tipo metodo che si basa sulla specifica formati in modo piuttosto particolare (non definito per questo caso d'uso) e proprietà dei bordi fallback finora (es. border: solid):

Si noti che, anche se non causano mai un meccanismo di scorrimento, le immagini iniziali possono comunque essere ritagliate da un antenato o dal viewport.

Questo esempio illustra l'immagine composta solo come decorazione dell'angolo in basso a destra :

.myClass {
    border: solid;
    border-width: 0 480px 320px 0;
    border-image: url("http://i.imgur.com/uKnMvyp.jpg") 0 100% 100% 0;
}

Si applica a: Tutti gli elementi, tranne gli elementi della tabella interna quando border-collapse: collapse

Ancora non si può cambiare un <img>tag 's src(ma qui è un hack ), invece siamo in grado di decorare:

Buon metodo candidato da considerare dopo la propagazione degli standard.



CSS3 's element()notazione di bozza di lavoro merita una menzione anche:

Nota: la element()funzione riproduce solo l' aspetto dell'elemento di riferimento, non il contenuto effettivo e la sua struttura.

<div id="img1"></div>

<img id="pic1" src="http://i.imgur.com/uKnMvyp.jpg" class="hide" alt="wolf">
<img id="pic2" src="http://i.imgur.com/TOUfCfL.jpg" class="hide" alt="cat">

Useremo i contenuti renderizzati di una delle due immagini nascoste per cambiare lo sfondo dell'immagine in #img1base al Selettore ID tramite CSS:

#img1 {
    width: 480px; 
    height: 320px; 
    background: -moz-element(#pic1) no-repeat;
    background-size: 100% 100%;
}

.hide {display: none}

Note: È sperimentale e funziona solo con il -mozprefisso in Firefox e solo su backgroundo background-imageproprietà, necessita anche di dimensioni specificate.


conclusioni

  1. Qualsiasi contenuto semantico o informazioni strutturali va in HTML.
  2. Lo stile e le informazioni di presentazione vanno in CSS.
  3. Ai fini SEO, non nasconderti immagini significative nei CSS.
  4. La grafica di sfondo è generalmente disabilitata durante la stampa.
  5. I tag personalizzati possono essere usati e disegnati dai CSS, ma le versioni primitive di Internet Explorer non capiscono] ( IE non ha lo stile dei tag HTML5 (con shiv) ) senza Javascript o guida CSS .
  6. Le SPA (applicazioni a pagina singola), in base alla progettazione, di solito incorporano immagini in background

Detto questo, esploriamo i tag HTML adatti alla visualizzazione delle immagini:

Il <li> elemento [HTML4.01 +]

Caso d'uso perfetto del list-style-imagecondisplay: list-item metodo .

L' <li>elemento, può essere vuoto, consente il contenuto del flusso ed è persino consentito omettere il </li>tag di fine.

Limitazioni: difficile da definire ( width:o float:potrebbe aiutare)

L' <figure>elemento [HTML5 +]

L'elemento figure rappresenta un contenuto di flusso, facoltativamente con una didascalia, che è autonomo (come una frase completa) e viene generalmente indicato come una singola unità dal flusso principale del documento.

L'elemento è valido senza contenuto, ma si consiglia di contenere a <figcaption>.

L'elemento può quindi essere utilizzato per annotare illustrazioni, diagrammi, foto , elenchi di codici, ecc.

Rendering predefinito: l'elemento è allineato a destra, con imbottitura sia a destra che a sinistra!

L' <object>elemento [HTML4 +]

Per includere immagini, gli autori possono utilizzare l'elemento OBJECT o l'elemento IMG.

L' dataattributo è obbligatorio e può avere un tipo MIME valido come valore!

<object data="data:x-image/x,"></object>

Nota: un trucco per utilizzare il <object>tag da CSS sarebbe quello di impostare un MimeType personalizzato valido x-image/xseguito da nessun dato (il valore non ha dati dopo la virgola richiesta, )

Rendering predefinito: 300 x 150px, ma le dimensioni possono essere specificate in HTML o CSS.

Il <SVG> tag

Ha bisogno di un browser compatibile con SVG e ha un <image>elemento per le immagini raster

L' <canvas>elemento [HTML5 +].

L' widthattributo predefinito è 300 e l' heightattributo predefinito 150 .

Il <input> elemento contype="image"

limitazioni:

... l'elemento dovrebbe apparire come un pulsante per indicare che l'elemento è un pulsante.

che Chrome segue e rende un quadrato vuoto 4x4px quando non c'è testo

Soluzione parziale, impostare value=" ":

<input type="image" id="img1" value=" ">

Fai anche attenzione al prossimo <picture>elemento in HTML5.1 , attualmente una bozza funzionante .



Ottima risposta ma mostra il completo fallimento del web come piattaforma per fornire primitive di base.
serraosays

26

ho usato la soluzione div vuota, con questo CSS:

#throbber {
    background-image: url(/Content/pictures/ajax-loader.gif);
    background-repeat: no-repeat;
    width: 48px;
    height: 48px;
    min-width: 48px;
    min-height: 48px;
}

HTML:

<div id="throbber"></div>

Cosa succede se desidero visualizzarlo in linea? Aggiungendo "display: inline" la mia dimensione div è 0x0 ...
elsurudo

1
@elsurudo Usa display: inline-block se vuoi impostare una larghezza e un'altezza su un elemento inline
Erin Drummond,

1
La risposta migliore non funziona con Firefox, quindi mi piace di più la tua risposta! Ed è chiaro e non ha hack CSS.
Sergey Bogdanov,

Se è necessario visualizzare più di un'immagine, tenere presente che il campo ID è tecnicamente considerato univoco, quindi è l'ideale utilizzare un selettore di classe CSS anziché l'ID.
mix3d

Le immagini di questo tipo non verranno stampate correttamente se la grafica di sfondo è disattivata nelle impostazioni di stampa.
posfan12

14

Ho trovato un modo migliore rispetto alle soluzioni proposte, ma utilizza effettivamente l'immagine di sfondo. Metodo conforme (non confermato per IE6) Crediti: http://www.kryogenix.org/code/browser/lir/

<img src="pathTo/myImage.jpg"/>

Il CSS:

img[src*="pathTo/myImage.jpg"] {

    background-image: url("mynewimg.jpg"); /* lets say 20x20 */
    width: 20px;

    display:inline-block;
    padding: 20px 0 0 0;
    height: 0px !important;

    /* for IE 5.5's bad box model */
    height /**/:20px;
}

La vecchia immagine non è visibile e la nuova è vista come previsto.


La seguente soluzione pulita funziona solo con webkit

img[src*="pathTo/myImage.jpg"] {

    /* note :) */
    content:'';
    display:inline-block;

    width: 20px;
    height: 20px;
    background-image: url("mynewimg.jpg"); /* lets say 20x20 */

}

Questo è un trucco accurato, ma è davvero conforme agli standard? La pagina W3C dice che la contentproprietà si applica solo alle classi pseudo :beforee :after. Inoltre, se devi supportare IE7 o versioni precedenti, penso che il contentsupporto sia inesistente. Comunque, molto allettante.
Jatrim,

Hai ragione, ho appena trovato un metodo più conforme. Aggiornamento del mio post! Ora votami;) Haha.
EricG,

L'approccio aggiornato è decisamente migliore di quello che si basa sul contenuto. Grazie per aver incluso il link originale. È stato perspicace. Noterai che la risposta di @ RobAu è in realtà molto simile alla tua versione aggiornata.
Jatrim,

1
@jatrim La contentproprietà si applica a tutti gli elementi. http://www.w3.org/TR/css3-content/#content
XP1

13

Hanno ragione. L'IMG è un elemento di contenuto e CSS riguarda il design. Ma che ne dici di utilizzare alcuni elementi o proprietà del contenuto a scopo di progettazione? Ho IMG nelle mie pagine Web che deve cambiare se cambio stile (CSS).

Bene, questa è una soluzione per definire la presentazione IMG (non proprio l'immagine) in stile CSS.

  1. crea una gif o png trasparente 1x1.
  2. Assegna correttamente "src" di IMG a quell'immagine.
  3. Definire la presentazione finale con "immagine di sfondo" in stile CSS.

Esso funziona magicamente :)


5
-1 Anche se la tua risposta non è male, menziona specificamente che non vuole usarebackground*
fresskoma

1
questo è un trucco ... secondo me i trucchi verranno cambiati dai browser ... e un giorno al mattino vedrai un inferno nel tuo sito web: D :)))
Mahdi Jazini

11

Ecco un'ottima soluzione -> http://css-tricks.com/replace-the-image-in-an-img-with-css/

Pro (s) e Con (s):
(+) funziona con il vettore immagine con larghezza / altezza relativa (cosa che la risposta di RobAu non gestisce) (+) è cross-browser (funziona anche con IE8 +) (+) usa solo CSS. Quindi non è necessario modificare img src (o se non si ha accesso / non si desidera modificare l'attributo img src già esistente). (-) scusate, usa l'attributo css di sfondo :)



Ora, questa è la soluzione corretta, funziona per me in tutti i browser, grazie !! Vale anche la pena ricordare che ho dovuto aggiungere: dimensione sfondo: 100%; alla classe CSS nella soluzione sopra per mostrare correttamente l'immagine sostitutiva.
mikhail-t,

9

Puoi definire 2 immagini nel tuo codice HTML e utilizzare display: none;per decidere quale sarà visibile.


Stavo cercando in lungo e in largo una soluzione che fosse Web Responsive ma mantenesse anche la SEO. Volevo utilizzare le query multimediali nei CSS per cambiare la mia immagine a seconda del dispositivo utilizzato, ma volevo mantenere il mio contenuto in HTML. Dichiarare le fonti nei CSS era una strada che non volevo prendere, quindi background-imagenon era un'opzione. Volevo imgtag per scopi SEO. La tua risposta è così semplice, elegante e risolve tutti i miei ostacoli! Bravo! Inoltre l'utente non deve scaricare entrambe le immagini. Inoltre, posso aggiungere un numero qualsiasi di immagini.
Xavier,

Ogni risposta che ho letto finora mi costringerebbe a dichiarare le mie fonti nel mio foglio di stile, o utilizzare CSS in linea nel mio markup. Nessuno dei quali mi ha fatto piacere. Codice disordinato!
Xavier,

7

No, non puoi impostare l'attributo src dell'immagine tramite CSS. Il più vicino che puoi ottenere è, come dici tu, backgroundo background-image. Non consiglierei di farlo comunque, poiché sarebbe in qualche modo illogico.

Tuttavia, è disponibile una soluzione CSS3, se i browser di destinazione sono in grado di utilizzarla. Utilizzare content:url come descritto nella risposta di Pacerier . Puoi trovare altre soluzioni cross-browser nelle altre risposte di seguito.


1
perché il voto negativo? questa risposta è più accurata della risposta accettata.
harsimranb,

1
La migliore risposta finora: NO, non puoi farlo con i CSS.
Milche Patern,

4

Metti diverse immagini in un contenitore "di controllo" e cambia invece la classe del contenitore. In CSS, aggiungi regole per gestire la visibilità delle immagini in base alla classe del contenitore. Ciò produrrà lo stesso effetto della modifica della img srcproprietà di una singola immagine.

HTML:

<span id="light" class="red">
    <img class="red" src="red.png" />
    <img class="yellow" src="yellow.png" />
    <img class="green" src="green.png" />
</span>

CSS:

#light         { ... }
#light         *        { display: none; }     // all images are hidden
#light.red     .red     { display: inline; }   // show red image when #light is red
#light.yellow  .yellow  { display: inline; }   // .. or yellow
#light.green   .green   { display: inline; }   // .. or green

Nota che precaricherà tutte le immagini, come con i CSS backround-image, ma diversamente dalle modifiche img srctramite JS.


3

Modo alternativo

.myClass {
background: url('/img/loading_big.gif');
}
<div class="myClass"></div>

3

Alcuni dati che lascerei in HTML, ma è meglio definire l' src nei CSS:

<img alt="Test Alt text" title="Title text" class="logo">

.logo {
    content:url('../images/logo.png');
}

2

Per quanto ne so, NON PUOI. CSS riguarda lo stile e l'immagine src è contenuto.


3
Al giorno d'oggi, abbastanza spesso le immagini sono lì solo per dare uno stile alla pagina.
Lorenzo Polidori,

2
L'implicazione è che potrebbe esserci una differenza tra le immagini utilizzate come bordi, sfondi ecc. E quelle che fanno effettivamente parte del contenuto della pagina. diagrammi, foto di articoli, ecc.
Rhys van der Waerden

1
PUOI, e ci sono casi validi e comuni in cui vorresti.
ryan0

2

Ribadire una soluzione precedente e sottolineare la pura implementazione CSS qui è la mia risposta.

Una soluzione Pure CSS è necessaria nei casi in cui si sta acquistando contenuto da un altro sito e quindi non si ha alcun controllo sull'HTML che viene consegnato. Nel mio caso sto cercando di rimuovere il marchio del contenuto di origine concesso in licenza in modo che la licencee non debba fare pubblicità per l'azienda da cui sta acquistando il contenuto. Pertanto, sto rimuovendo il loro logo mantenendo tutto il resto. Devo notare che ciò rientra nel contratto del mio cliente.

{ /* image size is 204x30 */
     width:0;
     height:0;
     padding-left:102px;
     padding-right:102px;
     padding-top:15px;
     padding-bottom:15px;
     background-image:url(http://sthstest/Style%20Library/StThomas/images/rhn_nav_logo2.gif);
}

2

So che questa è una domanda molto vecchia, tuttavia nessuna risposta fornisce il ragionamento adeguato per cui questo non può mai essere fatto. Mentre puoi "fare" quello che stai cercando, non puoi farlo in modo valido. Per avere un tag img valido è necessario avere gli attributi src e alt.

Quindi, qualsiasi delle risposte che danno modo di farlo con un tag img che non usa l'attributo src sta promuovendo l'uso di codice non valido.

In breve: ciò che stai cercando non può essere fatto legalmente all'interno della struttura della sintassi.

Fonte: W3 Validator


2

Oppure potresti fare questo che ho trovato sull'interweb.

https://robau.wordpress.com/2012/04/20/override-image-src-in-css/

<img src="linkToImage.jpg" class="egg">
.egg {
  width: 100%;
  height: 0;
  padding: 0 0 200px 0;
  background-image: url(linkToImage.jpg);
  background-size: cover;
}

Nascondere così efficacemente l'immagine e riempire lo sfondo. Oh che trucco, ma se vuoi un tag IMG con testo alternativo e uno sfondo che può essere ridimensionato senza usare JavaScript?

In un progetto a cui sto lavorando ora ho creato un modello di ramoscello a blocchi di eroi

<div class="hero">
  <img class="image" src="{{ bgImageSrc }}"
       alt="{{ altText }}" style="background-image: url({{ bgImageSrc }});">
</div>

1

Se non si desidera impostare una proprietà di sfondo, non è possibile impostare l'attributo src di un'immagine utilizzando solo CSS.

In alternativa puoi usare JavaScript per fare una cosa del genere.



1

Puoi convertirlo con JS:

$('.image-class').each(function(){
    var processing = $(this).attr('src');
    $(this).parent().css({'background-image':'url('+processing+')'});
    $(this).hide();
});

0

Se stai cercando di aggiungere un'immagine in un pulsante in modo dinamico in base al contesto del tuo progetto, puoi usare il? prendere per fare riferimento alla fonte in base a un risultato. Qui sto usando mvvm design per consentire al mio valore Model.Phases [0] di determinare se voglio che il mio pulsante sia popolato con le immagini di una lampadina accese o spente in base al valore della fase luminosa.

Non sono sicuro se questo aiuta. Sto usando JqueryUI, Blueprint e CSS. La definizione della classe dovrebbe consentire di modellare il pulsante in base a ciò che desideri.

    <button>                           
  <img class="@(Model.Phases[0] ? "light-on": "light-off")" src="@(Model.Phases[0] ? "~/Images/LightBulbOn.png" : "~/Images/LightBulbOff.png")"/>                             
  <img class="@(Model.Phases[0] ? "light-on": "light-off")" src="@(Model.Phases[0] ? "~/Images/LightBulbOn.png" : "~/Images/LightBulbOff.png")"/>   
  <img class="@(Model.Phases[0] ? "light-on": "light-off")" src="@(Model.Phases[0] ? "~/Images/LightBulbOn.png" : "~/Images/LightBulbOff.png")"/>     


0

Aggiungo questo: l'immagine di sfondo potrebbe anche essere posizionata con background-position: x y;(x orizzontale y verticale). (..) Il mio caso, CSS:

(..) 
#header {
  height: 100px; 
  background-image: url(http://.../head6.jpg); 
  background-position: center; 
  background-repeat: no-repeat; 
  background-color: grey; 
  (..)
} 
(...)

0

Codice HTMl:

<!DOCTYPE html>
<html>
     <head>
         <link type="text/css" rel="stylesheet" href="css destination" />
     </head>
     <body>
<!-- click-able pic with link -->
           <a href="site you want"> 
<!-- Take the off if you don't want click-able link -->
                <h1 id(or class)="nameOfClassorid">
                     <span>Text that is not important</span>
                </h1>
           </a>
      </body>
 </html>

Codice CSS:

span {
     display: none;
}
h1 id or class {
     height: of pic;
     width: of pic;
/* Only flaw (so far) read bottom */
     background-image:url(/* "image destination" */);
}
h1 id or class:hover {
/* Now the awesome part */
     background-image:url(/* 'new background!!!' */);
}

Ho studiato html dopo la scuola per alcuni giorni e volevo sapere come farlo. Scopri lo sfondo e poi metti 2 e 2 insieme. Funziona al 100%, ho verificato, altrimenti assicurati di compilare le cose necessarie !!! Dobbiamo specificare l'altezza, perché senza di essa non ci sarebbe nulla !!! Lascio questa shell di base che puoi aggiungere.

Esempio:

 <!DOCTYPE html>
 <html>
     <head>
         <link type="text/css" rel="stylesheet" href="style.css" />
     </head>
     <body>
           <a href="http:localhost"> 
                <h1>
                     <span>Text that is not important</span>
                </h1>
           </a>
     </body>
 </html>
span {
     display: none;
}
h1 {
     height: 100px;
     width: 100px;
     background-image:url("http://linuxlog.org/wp-content/uploads/2011/01/Ubuntu-Desktop-@-2011-01-11-191526-300x225.png");
}

h1:hover {
     height: 300px;
     width: 300px;
     background-image:url("http://cdn.css-tricks.com/images/ads/wufoo-600x600-red.png");
}

PS Sì, sono un utente Linux;)


0

Qualsiasi metodo basato backgroundo background-imagerischia di fallire quando l'utente stampa il documento con "stampa colori e immagini di sfondo " disabilitato. Che è purtroppo il tipico default del browser.

L'unico metodo compatibile con la stampa e compatibile con più browser qui è quello proposto da Bronx.


0

Caricamento di IMG src dalla definizione CSS, utilizzando le moderne proprietà CSS

<style>
  body {
    --imgid: 1025; /* optional default img */
  }

  .shoes {
    --imgid: 21;
  }

  .bridge {
    --imgid: 84;
  }

  img {
    --src: "//i.picsum.photos/id/"var(--imgid)"/180/180.jpg"
  }

</style>
<script>
  function loadIMG(img) {
    img.src = getComputedStyle(img)	// compute style for img
      .getPropertyValue("--src")		// get css property
      .replace(/[" ]/g, "");				// strip quotes and space
  }

</script>
<img src onerror=loadIMG(this) class=bridge>
<img src onerror=loadIMG(this) class=shoes>
<img src onerror=loadIMG(this)>

  • la srcdefinizione vuota su un <IMG> attiva il gestore onerror: funzione loadIMG
  • La funzione loadIMG calcola il valore CSS
  • spoglia tutti i personaggi illegali
  • imposta IMG.src
  • quando il CSS cambia, l'immagine NON viene aggiornata! Devi chiamare di nuovo loadIMG

JSFiddle: https://jsfiddle.net/CustomElementsExamples/vjfpu3a2/


Risposte SO correlate: WCPROPS



-2

Usa HTML5 :)

<picture>
    <source srcset="smaller.jpg" media="(max-width: 768px)">
    <source srcset="default.jpg">
    <img srcset="default.jpg" alt="My default image">
</picture>

L'OP sta specificamente cercando di ripulire il markup HTML con una soluzione CSS. Questa risposta ingombrerebbe ulteriormente il markup.
webaholik,
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.