[jQuery] ajouter une image en CSS :before(content)
Résolu
KX
Messages postés
16761
Date d'inscription
Statut
Modérateur
Dernière intervention
-
KX Messages postés 16761 Date d'inscription Statut Modérateur Dernière intervention -
KX Messages postés 16761 Date d'inscription Statut Modérateur Dernière intervention -
Bonjour,
En CSS il est possible d'ajouter du contenu au document avec un :before, par exemple une image en faisant comme ceci :
Ce que je voudrais, c'est faire un script jQuery (que je ne maitrise pas) qui permettrait de générer automatiquement ce ":before" avec une page html qui serait comme ça :
Mon problème est de générer le CSS (ou son équivalent) qui permettrait d'avoir :
PS. quand on fait ":before {content:url(image.png);}" le chemin d'accès est relatif au fichier CSS, pas au fichier HTML. Est-ce qu'il est possible de conserver cette propriété avec le script ? Ou du moins faire un chemin relatif au script par exemple, mais surtout éviter que le chemin d'accès à l'image soit relatif à la page HTML...
Si vous avez une solution pour faire ça (ou même une idée) je serais preneur, merci ;-)
En CSS il est possible d'ajouter du contenu au document avec un :before, par exemple une image en faisant comme ceci :
<html> <head> <style>#img_pro_0:before {content:url(image.png);}</style> </head> <body> <div id="img_pro_0"/> </body> </html>
Ce que je voudrais, c'est faire un script jQuery (que je ne maitrise pas) qui permettrait de générer automatiquement ce ":before" avec une page html qui serait comme ça :
<html> <head> <script type="text/javascript" src="jquery.js"></script> <script> $(function() { $('.image_protegee').each(function (num,img) { $(img).append('<div id="img_pro_'+num+'"/>'); // ... }); }); </script> </head> <body> <div class="image_protegee" url="image.png"/> </body> </html>
Mon problème est de générer le CSS (ou son équivalent) qui permettrait d'avoir :
#img_pro_0:before {content:url(image.png);}à partir de la balise que j'obtiens :
<div class="image_protegee" url="image.png"><div id="img_pro_0"/></div>Évidemment, cela serait fait pour chacune des images 0, 1, 2... que j'aurais déclaré via la classe "image_protegee" comme dans mon exemple.
PS. quand on fait ":before {content:url(image.png);}" le chemin d'accès est relatif au fichier CSS, pas au fichier HTML. Est-ce qu'il est possible de conserver cette propriété avec le script ? Ou du moins faire un chemin relatif au script par exemple, mais surtout éviter que le chemin d'accès à l'image soit relatif à la page HTML...
Si vous avez une solution pour faire ça (ou même une idée) je serais preneur, merci ;-)
A voir également:
- [jQuery] ajouter une image en CSS :before(content)
- Image iso - Guide
- Légender une image - Guide
- Transformer une image en icone - Guide
- Ajouter une signature sur word - Guide
- Ajouter une liste déroulante excel - Guide
1 réponse
Bonsoir,
J'ai un peu réussi à avancer, mais j'ai un petit bug.
Voici comme j'en fait : j'ai rajouté une balise <style> dans le head, et je rajoute ligne par ligne mes :before pour chaque image, il y a peut-être mieux, j'attends vos idées à ce sujet, en attendant voilà ce que ça donne :
Le bug que j'ai c'est au niveau de la hierarchie des balises.
En code HTML au départ je mets par exemple ceci :
J'aurais voulu logiquement obtenir ceci :
Mais en réalité j'obtient ceci, ce qui ne convient pas du tout :
Je ne vois pas où est le problème... Des idées ?
Merci...
J'ai un peu réussi à avancer, mais j'ai un petit bug.
Voici comme j'en fait : j'ai rajouté une balise <style> dans le head, et je rajoute ligne par ligne mes :before pour chaque image, il y a peut-être mieux, j'attends vos idées à ce sujet, en attendant voilà ce que ça donne :
$(function() { $('head').append('<style id="style_img_pro"/>'); $('.image_protegee').each(function(num,img) { $(img).append('<div id="img_pro_'+num+'"/>'); $('#style_img_pro').append('.image_protegee #img_pro_'+num+':before {content:url("'+$(img).attr('url')+'");}'); }); });
Le bug que j'ai c'est au niveau de la hierarchie des balises.
En code HTML au départ je mets par exemple ceci :
<body> <p>Avant</p> <div class="image_protegee" url="image.png"/> <p>Après</p> </body>
J'aurais voulu logiquement obtenir ceci :
<body> <p>Avant</p> <div class="image_protegee" url="image.png"> <div id="img_pro_0"></div> </div> <p>Après</p> </body>
Mais en réalité j'obtient ceci, ce qui ne convient pas du tout :
<body> <p>Avant</p> <div class="image_protegee" url="image.png"> <p>Après</p> <div id="img_pro_0"></div> </div> </body>
Je ne vois pas où est le problème... Des idées ?
Merci...
Au final ça donne donc :
Ce qui génère :
Et affiche (grosso modo) :