Can I put an HTML button inside the canvas?

82,628

Solution 1

Given that the canvas element has a transparent content model, it may contain fallback elements which are displayed in the event that the canvas element is unsupported. They will not be displayed if the canvas is supported.

You can position HTML elements relative to the canvas' parent to have the buttons "hovering" over the canvas. A menu element could be an appropriately semantic element to render a list of controls, depending on the context:

HTML:
<div id="container">
  <canvas id="viewport">
  </canvas>
  <menu id="controls">
  </menu>
</div>
CSS:
#container
{
  height: 400px;
  position: relative;
  width: 400px;
}
#viewport
{
  height: 100%;
  width: 100%;
}
#controls
{
  bottom: 0;
  left: 0;
  position: absolute;
  width: 100%;
}

Solution 2

You can put the button on top of the canvas by giving the canvas a z-index which is lower than the z-index of the button:

<canvas style="z-index:1"></canvas>
<input type="button" style="z-index:2; position:absolute; top:x; left:y" value="test"/>

where x and y are numbers.

Solution 3

I don't believe you can 'put' HTML content inside a canvas tag. Whatever you put in there will actually be displayed if the browser doesn't support <canvas>.

You can, however, position your buttons absolutely over top of a canvas or render areas in your canvas that 'look' like buttons and handle the events yourself (a lot of work).

Solution 4

HTML inside canvas is not possible, but maybe you could position your elements absolutely so that they are "floating" over the canvas, but not inside it.

Solution 5

You can use my DropdownMenu for put an HTML button or menu inside the canvas.

Example of code:

<div class="container" id="containerDSE">
    <canvas id="canvas"></canvas>
</div>
<script>
var elContainer = document.getElementById( "containerDSE" ),
elCanvas = elContainer.querySelector( 'canvas' );

dropdownMenu.create( [

    {

        name: 'Button',
        onclick: function ( event ) {

            var message = 'Button onclick';
            //console.log( message );
            alert( message )

        },

    },

], {

    elParent: elContainer,
    canvas: elCanvas,
    decorations: 'Transparent',

} );
</script>

Example of using.

Share:
82,628

Related videos on Youtube

CyanPrime
Author by

CyanPrime

Updated on July 03, 2020

Comments

  • CyanPrime
    CyanPrime almost 4 years

    I want to make the buttons for the game I'm making as real HTML buttons, but they need to be inside the canvas.

    How would I go about doing this?

  • kangax
    kangax over 13 years
    You mean whatever you put inside canvas element (not tag) ;)
  • skorulis
    skorulis almost 13 years
    I found that this worked in chrome, but for firefox I had to give the canvas a negative z-index.
  • Martin Pecka
    Martin Pecka over 10 years
    Using menu is not necessary. You can display almost any HTML element over canvas this way.
  • zzzzBov
    zzzzBov over 10 years
    @peci1, I chose <menu> for this case because it was semantic, not because it does anything special with regard to <canvas>.
  • Devang Hingu
    Devang Hingu almost 3 years
    Hey you added button inside HTML not in canvas.
  • Abhinav P B
    Abhinav P B over 2 years
    But when i put the canvas in full-screen, the buttons disappears. Is there any way to overcome this?