¿Puedo utilizar el elemento canvas como fondo CSS?Use <canvas> como fondo CSS
Respuesta
Esto ha sido posible en WebKit desde 2008, vea here.
<html>
<head>
<style>
div { background: -webkit-canvas(squares); width:600px; height:600px; border:2px solid black }
</style>
<script type="application/x-javascript">
function draw(w, h) {
var ctx = document.getCSSCanvasContext("2d", "squares", w, h);
ctx.fillStyle = "rgb(200,0,0)";
ctx.fillRect (10, 10, 55, 50);
ctx.fillStyle = "rgba(0, 0, 200, 0.5)";
ctx.fillRect (30, 30, 55, 50);
}
</script>
</head>
<body onload="draw(300, 300)">
<div></div>
</body>
</html>
Actualmente, Firefox 4 contiene una característica, que permite el uso de cualquier elemento (incluyendo lienzo) como fondo de CSS, de esta manera:
<p id="myBackground1" style="background: darkorange; color: white; width: 300px; height: 40px;">
This element will be used as a background.
</p>
<p style="background: -moz-element(#myBackground1); padding: 20px 10px; font-weight: bold;">
This box uses #myBackground1 as its background!
</p>
Ver Mozilla hacks para obtener información específica.
¡Agradable! No tenía idea de que pudieras hacer esto. Hice un jsfiddle desde su código aquí: [http://jsfiddle.net/cRqf6/](http://jsfiddle.net/cRqf6/) –
Sólo he querido mencionar el truco de elemento de moho, pero tu fuiste el primero Por lo tanto, acabo de vivir un ejemplo - http://jsfiddle.net/U72dt/1/ – shabunc
Ver mi respuesta a continuación: una línea de código y cross-compatible en todos los navegadores – frenchie
creo que lo más cerca que podría conseguir es hacer que en un canvas
, llame toDataUrl()
en él para recuperar el contenido como una imagen, y la asignación que resultan a background-image
la propiedad del elemento deseado. Sin embargo, esto solo dará un fondo estático. Sin embargo, si desea poder actualizar aún más el canvas
, deberá ubicar el lienzo detrás de otro elemento, como Johan ya ha sugerido.
He estado triying para lograr esta misma característica últimas semanas, la mejor solución que he encontrado es el mismo propuesto por bcat:
- Render lienzo (visible u oculto)
- Get imagen lona con "canvas.toDataURL"
- Asign esta imagen: datos de la imagen de fondo del elemento (utilizo MooTools)
las malas noticias, como para imágenes estáticas funciona muy bien, pero con animación en Chrome a veces "parpadea", y en Firefox parpadea-un-lote. Tal vez alguien sepa una solución para deshacerse de este "desagradable parpadeo".
Saludos cordiales.
P :.
<!DOCTYPE html>
<html>
<head>
<title>Asign canvas to element background</title>
<script type="text/javascript" src="/js/mootools.1.2.4.js"></script>
<style type="text/css">
* {
outline:0;
padding:0;
margin:0;
border:0;
}
body {
color:#fff;
background:#242424;
}
</style>
<script>
window.addEvent('domready',function() {
//GET BODY
var mibodi = $('mibodi');
var viewportSize = mibodi.getSize();
//GET CANVAS
var micanvas = $('micanvas');
var ctx = micanvas.getContext('2d');
var playAnimation = true;
//GET DIV
var midiv = $('midiv');
//VARIABLES
var rotate_angle = 0;
var rotate_angle_inc = 0.05;
//FUNCIÓN DE INICIALIZACIÓN
function init(){
ctx.clearRect (0, 0, 512, 512); //CLEAR CANVAS
ctx.fillStyle = 'rgba(128,128,128,1)';
ctx.strokeStyle = 'rgba(255,255,255,1)';
if (playAnimation) {
setInterval(draw,100);//
}
} //INIT
//FUNCIÓN DE DIBUJADO
function draw() {
//CLEAR BACKGROUND
ctx.clearRect (0, 0, 512, 512);
//DRAW ROTATING RECTANGLE
ctx.save();
ctx.translate(micanvas.width/2, micanvas.height/2);
ctx.rotate(rotate_angle);
ctx.fillRect(0, 0, 100, 100);
ctx.restore();
//GET CANVAS IMAGE
var dataURL = micanvas.toDataURL("image/png");
//SET IMAGE AS BACKGROUND OF THE ELEMENTS
midiv.setStyle('background-image', 'url(' + dataURL + ')');
mibodi.setStyle('background-image', 'url(' + dataURL + ')');
//ANGLE INCREMENT
rotate_angle = rotate_angle + rotate_angle_inc;
} //DRAW
//BEGIN TO DRAW
init();
});//domeady
</script>
</head>
<body id="mibodi" >
<canvas id="micanvas" width="512" height="512" style="float:left;" style="display:none;">
Este texto se muestra para los navegadores no compatibles con canvas.
<br>
Por favor, utiliza Firefox, Chrome, Safari u Opera.
</canvas>
<div id="midiv" style="width:512px;height:512px;background:#f00;float:left;">
Sample
</div>
</body>
</html>
Sí !!!! Puedes poner un lienzo en el fondo de CSS.
var Canvas = document.createElement("canvas");
... do your canvas drawing....
$('body').css({'background-image':"url(" + Canvas.toDataURL("image/png")+ ")" });
Sé que esto es una pregunta bastante viejo, pero me sentí como publicar mi respuesta para la gente que nos visitaba esta página porque esta es la respuesta correcta, en una sola línea de código, usando la función .toDataURL
. Funciona en todos los navegadores compatibles con canvas.
El único problema con esto es que el lienzo no se puede modificar después de establecerse como fondo. –
Es cierto, pero hay una solución fácil, si es necesario. Simplemente cree una copia del lienzo y almacénelo como global para que cuando aplique .toDataURL() todavía haya un lienzo disponible. En general, no veo cómo otras respuestas propuestas pueden superar esta solución de una sola línea. – frenchie
@frenchie Las otras respuestas superaron a su línea única porque: Usar toDataURL ya fue propuesto en las otras respuestas, 18 meses antes que usted. Además, no responde la pregunta. Es un trabajo alrededor. Su código no pone un lienzo en el fondo de CSS. Pone los datos de imagen momentáneos de un lienzo en fondo CSS. – Robert
Pruebe -moz-element(#id)
para CSS background
en Firefox.
Y -webkit-canvas(name)
para CSS background
en WebKit navegadores basados.
No se puede hacer comentario, así que crearé mi propia respuesta para esto.
Esta respuesta se basa fuera de @livedo, @Eric Rowell, y @shabunc
http://jsfiddle.net/MDooley47/yj26psdb/
window.i = 0;
function draw(w, h) {
window.i+=5;
if (window.webkitURL != null) {
var ctx = document.getCSSCanvasContext("2d", "squares", 100, 100);
ctx.fillStyle = "rgb(200,0,0)";
ctx.fillRect (10, 10, w, h);
ctx.fillStyle = "rgba(0, 0, 200, 0.5)";
ctx.fillRect (30, 30, w, h);
}
else {
var ctxmozc = document.getElementById("squares");
var ctxmoz = ctxmozc.getContext("2d");
ctxmoz.fillStyle = "rgb(200,0,0)";
ctxmoz.fillRect (10, 10, w, h);
ctxmoz.fillStyle = "rgba(0, 0, 200, 0.5)";
ctxmoz.fillRect (30, 30, w, h);
}
}
setInterval(function(){draw(window.i, window.i);}, 500);
div {
background: -webkit-canvas(squares);
background: -moz-element(#squares) repeat-x;
width:575px;
height:475px;
border:2px solid black
}
<body>
<div></div>
<canvas id="squares" name="squaresmoz" style="display: none;" ></canvas>
</body>
Esto está en desuso https://groups.google.com/a /chromium.org/forum/#!topic/blink-dev/WvqvdsmiQzg –
Usted puede emular este comportamiento de forma rápida y sin la caída de rendimiento de toDataURL()
usando z-index
(concedida, es una solución, ya que las imágenes CSS 4/CSS Houdini no han implementado "background: element (#mycanvas) "a partir de 2017))
Trabajando JSComunicado aquí. Yo no escribo esto, todo el crédito va a Derek Leung:
- 1. SVG como fondo CSS
- 2. CSS - Sprites como imágenes de fondo
- 3. HTML5 Canvas como fondo de la imagen CSS?
- 4. gif animado codificado en base64 como fondo css?
- 5. ¿Cómo agregar múltiples gradientes de CSS como un fondo múltiple?
- 6. ¿Cómo tener una imagen dinámica como fondo de CSS?
- 7. CSS validación fondo degradado
- 8. HTML y CSS fondo
- 9. selector de CSS: no <img> como hijo
- 10. Salto de línea (como <br>) usando solamente css
- 11. css dos imágenes de fondo
- 12. jQuery .css Fondo no-repeat
- 13. use holo theme en Android <4.0
- 14. Use <optgroup> con form.fields.queryset?
- 15. Use "nohup" para ejecutar el comando "superior" en el fondo
- 16. Use sed para agregar color de fondo a las pestañas?
- 17. HTML <select> opción seleccionada color de fondo estilo CSS
- 18. Repetición de fondo limitada de CSS (varias imágenes de fondo)
- 19. CSS Path Imagen de fondo Problemas
- 20. Cómo hacer un fondo circular usando css?
- 21. css botón fondo de la pendiente
- 22. precargar imágenes con imágenes de fondo CSS?
- 23. serialize any data type como vector <uint8_t> - use reinterpret_cast?
- 24. JSF <h: outputFormat>: use valores de matriz como parámetros
- 25. Repetición de degradado de fondo CSS Problema
- 26. uso de webcam como fondo HTML
- 27. fondo es tan ancha como visor problema
- 28. CSS "desbordamiento" elimina el "color de fondo"
- 29. C# use System.Type como parámetro genérico
- 30. jQuery, use ~ como parte de id - ¿cómo?
Se puede utilizar un elemento de tela como fondo, pero CSS no tiene nada que ver con eso. – tcooc
¡Sí, puedes! $ ('cuerpo'). css ({'background-image': "url (" + Canvas.toDataURL ("image/png") + ")"}); Vea mi respuesta a continuación: una línea de código y compatible con varios navegadores también. – frenchie
Eso es ** NO ** haciendo del lienzo un fondo. Eso es hacer una copia del contenido del lienzo como una imagen y luego usar la imagen como fondo. – gman