HTML and CSS Reference
In-Depth Information
TextMetrics
object gives you the exact width in pixels of the text when rendered on the
canvas. This can be very useful when attempting to center text.
Centering text using width
For the Text Arranger application, we will use the
TextMetrics
object to center the text
the user has entered in the
textBox
form control on the canvas. First, we retrieve an
instance of
TextMetrics
by passing the
message
variable (which holds the text we are
going to display) to the
measureText()
method of the 2D context, and storing it in a
variable named
metrics
:
var metrics = context.measureText(message);
Then, from the
width
property of
metrics
, we get the
width
of the text in pixels and
store it in a variable named
textWidth
:
var textWidth = metrics.width;
Next, we calculate the center of the screen by taking the
width
of the canvas and dividing
it in half (
theCanvas.width/2
). From that, we subtract half the
width
of the text
(
textWidth/2
). We do this because text on the canvas is vertically aligned to the left
when it is displayed without any alignment designation (more on this a bit later). So,
to center the text, we need to move it half its own width to the left, and place the center
of the text in the absolute center of the canvas. We will update this in the next section
when we allow the user to select the text's vertical alignment:
var xPosition = (theCanvas.width/2) - (textWidth/2);
What about the height of the text?
So, what about finding the height of the text so you can break text that is longer than
the width of the canvas into multiple lines, or center it on the screen? Well, this poses
a problem. The
TextMetrics
object does not contain a height property. The text font
size does not give the full picture either, as it does not take into account font glyphs
that drop below the baseline of the font. While the font size will help you estimate how
to center a font vertically on the screen, it does not offer much if you need to break text
onto two or more lines. This is because the spacing would also need to be taken into
account, which could be very tricky.
For our demonstration, instead of trying to use the font size to vertically center the text
on the canvas, we will create the
yPosition
variable for the text by simply placing it at
one-half the height of the canvas. The default
baseline
for a font is
middle
, so this works
great for centering on the screen. We will talk more about
baseline
in the next section:
var yPosition = (theCanvas.height/2);
In the chat example in
Chapter 11
, we will show you an example of
breaking up text onto multiple lines.