Comment créer une toile transparente en HTML5?


123

Comment rendre une toile transparente? J'en ai besoin parce que je veux mettre deux toiles l'une sur l'autre.

Réponses:


194

Les toiles sont transparentes par défaut.

Essayez de définir une image d'arrière-plan de page, puis placez une toile dessus. Si rien n'est dessiné sur le canevas, vous pouvez voir entièrement l'arrière-plan de la page.

Pensez à une toile comme à la peinture sur une plaque de verre.


6
La toile a un fond noir sur mobile, donc la superposition de toiles ne fonctionne pas là-bas. (Au moins sur Chrome pour Android)
nicholeous

11
Voilà pour les normes, comme d'habitude.
Triynko

6
Je pense que ces réponses manquent le point. Semblable à la question ci-dessus, je veux avoir deux toiles en couches: celle du bas a une image statique, mais celle du haut aura des sprites animés. Cette couche supérieure doit avoir un arrière-plan transparent, mais doit également être «effacée» et redessinée avec chaque image d'animation. Oui, il commence transparent par défaut, mais comment le réinitialiser sur transparent et le début de chaque nouvelle image d'animation?
J Sprague

3
Voici comment effacer un canevas à tout moment: stackoverflow.com/questions/2142535/…
Omiod

Puisque vous avez tellement de votes positifs Pouvez-vous au moins répondre à la question aussi? Comment rendre une toile non transparente transparente?
DDD

48

Je crois que vous essayez de faire exactement ce que je viens d'essayer de faire: je veux deux toiles empilées ... celle du bas a une image statique et celle du haut contient des sprites animés. En raison de l'animation, vous devez effacer l'arrière-plan du calque supérieur pour le rendre transparent au début du rendu de chaque nouvelle image. J'ai finalement trouvé la réponse: il n'utilise pas globalAlpha, et il n'utilise pas de couleur rgba (). La réponse simple et efficace est:

context.clearRect(0,0,width,height);

45

Si vous voulez qu'un particulier <canvas id="canvasID">soit toujours transparent, il vous suffit de définir

#canvasID{
    opacity:0.5;
}

Au lieu de cela, si vous voulez que certains éléments particuliers à l'intérieur de la zone de dessin soient transparents, vous devez définir la transparence lorsque vous dessinez, c'est-à-dire

context.fillStyle = "rgba(0, 0, 200, 0.5)";

Ah, je cherchais la transparence fillStyle. Merci!
Workman

3
FYI: les opacitymodifications n'auront aucun effet s'il y a un fond de remplissage dans le canevas.
Adam Eberlin

3

Réglez simplement l'arrière-plan de la toile sur transparent.

#canvasID{
    background:transparent;
}

1
Cette réponse ne fonctionne pas dans toutes les situations, context.clearRect (0, 0, largeur, hauteur) est la solution qui a fonctionné pour moi
Dmitriy

2

Peignez vos deux toiles sur une troisième toile.

J'ai eu ce même problème et aucune des solutions ici n'a résolu mon problème. J'avais une toile opaque avec une autre toile transparente au-dessus. La toile opaque était complètement invisible mais l'arrière-plan du corps de la page était visible. Les dessins de la toile transparente sur le dessus étaient visibles alors que la toile opaque en dessous ne l'était pas.


0

Je ne peux pas commenter la dernière réponse mais le correctif est relativement simple. Définissez simplement la couleur d'arrière-plan de votre toile opaque:

#canvas1 { background-color: black; } //opaque canvas
#canvas2 { ... } //transparent canvas

Je ne suis pas sûr mais il semble que la couleur d'arrière-plan est héritée comme transparente du corps.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.