The three main technologies we will use to build web apps are HTML, CSS, and JavaScript. We’ll quickly cover each to make sure we’re all on the same page before plowing into the fancy stuff.
When you are browsing the web, the pages you are viewing are just text documents sitting on someone else’s computer. The text in a typical web page is wrapped in HTML tags, which tell your browser about the structure of the document. With this information, the browser can decide how to display the information in a way that makes sense.
Consider the web page snippet shown in Example 1-1. On the first line, the string Hi there!
is wrapped in a
pair of h1
tags. Notice that the
open tag and the close tag are
slightly different: the close tag has a slash (/) as the second
character, while the open tag does not have a slash.
Wrapping text in h1
tags tells the browser that the words
enclosed are a heading, which will cause it to be displayed in large
bold text on its own line. There are also h2
, h3
,
h4
, h5
, and h6
heading tags. The lower the number, the more important the header, so
text wrapped in an h6
tag will be
smaller (i.e., less important-looking) than text wrapped in an h3
tag.
After the h1
tag in Example 1-1, there are two lines wrapped in p
tags. These are called paragraph tags. Browsers will display each
paragraph on its own line. If the paragraph is long enough to exceed the
width of the browser window, the text will bump down and continue on the
next line. In either case, a blank line will be inserted after the
paragraph to separate it from the next item on the page.
You can also put HTML tags inside other HTML
tags. Example 1-2 shows an unordered list
(ul
) tag that contains three list items (li
).
In a browser, this appears as a bulleted list with each item on its own
line. When you have a tag or tags inside another tag, the inner tags are
called child elements, or children, of the parent
tag. So in this example, the li
tags are children of the
ul
parent.
The tags covered so far are all
block tags. The defining characteristic of block
tags is that they are displayed on a line of their own, with no elements
to the left or right of them. That is why the heading, paragraphs, and
list items progress down the page instead of across it. The opposite of
a block tag is an inline tag, which, as the name
implies, can appear in a line. The emphasis tag (em
) is an
example of an inline tag, and it looks like this:
<p>I <em>really</em> hope you like it.</p>
The granddaddy of the inline tags—and
arguably the coolest feature of HTML—is the a
tag. The “a”
stands for anchor, but at times I’ll also refer to it as a link or
hyperlink. Text wrapped in an anchor tag is clickable, such that
clicking on it causes the browser to load a new HTML page.
To tell the browser which new page to load,
we have to add what’s called an attribute to the
tag. Attributes are named values that you insert into an open tag. In an
anchor tag, you use the href
attribute to specify the
location of the target page. Here’s a link to Google’s home page:
<a href="http://www.google.com/">Google</a>
That might look like a bit of a jumble if you
are not used to reading HTML, but you should be able to pick out the URL
for the Google home page. You’ll be seeing a lot of a
tags
and href
attributes throughout the book, so take a minute
to get your head around this if it doesn’t make sense at first
glance.
Note
There are a couple of things to keep in mind regarding attributes. Different HTML tags allow different attributes. You can add multiple attributes to an open tag by separating them with spaces. You never add attributes to a closing tag. There are hundreds of possible combinations of attributes and tags, but don’t sweat it—we only have to worry about a dozen or so in this entire book.
The HTML snippet that we’ve been looking at
would normally reside in the body
section of a complete
HTML document. An HTML document is made up of two sections: the head and
the body. The body is where you put all the content that you want users
to see. The head contains information about the page, most of which is
invisible to the user.
The body and head are always wrapped in an
html
element. Example 1-3 shows the
snippet in the context of a proper HTML document. For now the
head
section contains a title
element, which
tells the browser what text to display in the title bar of the
window.
Normally, when you are using your web browser you are viewing pages that are hosted on the Internet. However, browsers are perfectly good at displaying HTML documents that are on your local machine as well. To show you what I mean, I invite you to crack open a text editor and enter the code in Example 1-3.
When you are finished entering the code from Example 1-3, save it to your desktop as test.html and then open it with Chrome by either dragging the file onto the Chrome application icon or opening Chrome and selecting File→Open File. Double-clicking test.html will work as well, but it could open in your text editor or another browser, depending on your settings.
Note
Even if it’s not your favorite browser, you should use Chrome when testing your Android web apps on a desktop web browser, because Chrome is the closest desktop browser to Android’s mobile browser. Chrome is available for Mac and Windows from http://google.com/chrome.
As you’ve seen, browsers render certain HTML elements with distinct styles (for example, headings are large and bold, paragraphs are followed by a blank line, and so forth). These styles are very basic and are primarily intended to help the reader understand the structure and meaning of the document.
To go beyond this simple structure-based rendering, you use Cascading Style Sheets (CSS). CSS is a stylesheet language that you use to define the visual presentation of an HTML document. You can use CSS to define simple things like the text color, size, and style (bold, italic, etc.), or complex things like page layout, gradients, opacity, and much more.
Example 1-4 shows a CSS
rule that instructs the browser to display any text in the body element
using the color red. In this example, body
is the
selector (this specifies what is affected by the
rule) and the curly braces enclose the
declaration (the rule itself). The declaration
includes a set of properties and their
values. In this example, color
is
the property, and red
is the value of the
color
property.
Property names are predefined in the CSS specification, which means that you can’t just make them up. Each property expects an appropriate value, and there can be lots of appropriate values and value formats for a given property.
For example, you can specify colors with
predefined keywords like red
, or by using HTML color code
notation, which uses a hexadecimal notation: a hash/pound sign (#
) followed by three pairs of hexadecimal
digits (0
–F
) representing (from left to right) red,
green, and blue values (red is represented as #FF0000
). Properties that expect measurements
can accept values like 10px
, 75%
, and
1em
. Example 1-5 shows some
common declarations. The color code shown for
background-color
corresponds to the CSS “gray.”
Selectors come in a variety of flavors. If
you want all of your hyperlinks (the a
element) to display
in italics, add the following to your stylesheet:
a { font-style: italic; }
If you want to be more specific and only
italicize the hyperlinks that are contained somewhere within an
h1
tag, add the following to your stylesheet:
h1 a { font-style: italic; }
You can also define your own custom selectors
by adding id
and/or class
attributes to your
HTML tags. Consider the following HTML snippet:
<h1 class="loud">Hi there!</h1> <p id="highlight"> Thanks for visiting my web page.</p> <p>I hope you like it.</p> <ul> <li class="loud">Pizza</li> <li>Beer</li> <li>Dogs</li> </ul>
If we add (more on this in a moment)
.loud { font-style: italic; }
to the CSS for this HTML,
Hi there!
and Pizza
will show up italicized
because they both have the loud
class. The dot in front of
the .loud
selector is important—it’s how the CSS knows to
look for HTML tags with a class of loud
. If you omit the
dot, the CSS will look for a loud tag, which doesn’t exist in this
snippet (or in HTML at all, for that matter).
Applying CSS by id
is similar.
To add a yellow background fill to the highlight
paragraph
tag, use the following rule:
#highlight { background-color: yellow; }
Here, the #
symbol tells the CSS to look for an HTML tag
with the ID highlight
.
To recap, you can opt to select elements by
tag name (e.g., body
, h1
, p
), by
class name (e.g., .loud
, .subtle
,
.error
), or by ID (e.g., #highlight
,
#login
, #promo
). And, you can get more
specific by chaining selectors together (e.g., h1 a
,
body ul .loud
).
Note
There are differences between
class
and id
. Use class
attributes when you have more than one item on the page with the same
class
value. Conversely, id
values have to
be unique to a page.
When I first learned this, I figured I’d just always use class attributes so I wouldn’t have to worry about whether I was duping an ID value. However, selecting elements by ID is much faster than by class, so you can hurt your performance by overusing class selectors.
So now you understand the basics of CSS,
but how do you apply a stylesheet to an HTML page? Quite simple,
actually! First, you save the CSS somewhere on your server (usually in
the same directory as your HTML file, though you can put it in a
subdirectory). Next, link to the stylesheet in the head of the HTML
document, as shown in Example 1-6. The
href
attribute in this example is a relative path,
meaning it points to a text file named screen.css in the same directory as the
HTML page. You can also specify absolute links, such as the
following:
http://example.com/screen.css
Note
If you are saving your HTML files on your local machine, you’ll want to keep things simple: put the CSS file in the same directory as the HTML file and use a relative path, as shown in Example 1-6.
Example 1-6. Linking to a CSS stylesheet
<html> <head> <title>My Awesome Page</title> <link rel="stylesheet" href="screen.css" type="text/css" /> </head> <body> <h1 class="loud">Hi there!</h1> <p id="highlight"> Thanks for visiting my web page.</p> <p>I hope you like it.</p> <ul> <li class="loud">Pizza</li> <li>Beer</li> <li>Dogs</li> </ul> </body> </html>
Example 1-7 shows the contents of screen.css. You should save this file in the same location as the HTML file.
Note
It’s worth pointing out that you can link to stylesheets that are hosted on domains other than the one hosting the HTML document. However, it’s considered very rude to link to someone else’s stylesheets without permission, so please only link to your own.
For a quick and thorough crash course in CSS, I highly recommend CSS Pocket Reference: Visual Presentation for the Web by Eric Meyer (O’Reilly). Meyer is the last word when it comes to CSS, and this particular book is short enough to read during the typical morning carpool (unless you are the person driving, in which case it could take considerably longer—did I say “crash” course?).
At this point you know how to structure a document with HTML and how to modify its visual presentation with CSS. Now I’ll show you how JavaScript can make the web do stuff.
JavaScript is a scripting language that you can add to an HTML page to make it more interactive and convenient for the user. For example, you can write some JavaScript that will inspect the values typed in a form to make sure they are valid. Or, you can have JavaScript show or hide elements of a page depending on where the user clicks. JavaScript can even contact the web server to execute database changes without refreshing the current web page.
Like any modern scripting language,
JavaScript has variables, arrays, objects, and all the typical control
structures (e.g., if
, while
, for
). Example 1-8
shows a snippet of JavaScript that illustrates many core concepts of the
language (don’t try putting this in your HTML file yet; I’ll show you
how to combine HTML and JavaScript in a moment).
Here’s an explanation of what’s happening here:
Define an array (a list of values) named
foods
that contains three elements.Open a typical
for
loop that initializes a variable namedi
to 0 and specifies an exit criteria—in this case, exit wheni
is greater than the length of thefoods
array, and incrementi
by 1 each time through the loop (i++
is shorthand for “add 1 to the current value ofi
”).A garden variety
if
that checks to see if the current element of the array is equal toApples
.Displayed if the current element of the array is equal to
Apples
.Displayed if the current element of the array is not equal to
Apples
.
Here are some points about JavaScript’s syntax that are worth noting:
Array elements can be accessed with square bracket notation (
[]
)The single equals sign (
=
) is the assignment operator (assigns a value to a variable)The double equals sign (
==
) is the equivalence logical operator (compares two values and evaluates to true if they are equivalent)The plus sign (
+
) is the string concatenation operator (combines two strings together)
For our purposes, the most important feature
of JavaScript is that it can interact with the elements of an HTML page
(the cool kids call this “manipulating the DOM”). Example 1-9 shows a simple bit of JavaScript that
changes some text on the page when the user clicks on the
h1
. Create a new file in your text editor, save it as
onclick.html, and open the document
in your browser. Click the text labeled “Click me!” and watch it
change.
Note
DOM stands for Document Object Model and in this context it represents the browser’s understanding of an HTML page. You can read more about the DOM here: http://en.wikipedia.org/wiki/Document_Object_Model.
This line defines a single JavaScript function named
sayHello()
inside the script block.The
sayHello()
function contains a single statement that tells the browser to look through the document for an element that has the IDfoo
, and set its inner HTML contents toHi there!
The effect of this in the browser is that the text “Click me!” will be replaced with “Hi there!” when the user clicks theh1
element.The
onclick
attribute of theh1
element tells the browser to do something when the user clicks theh1
element, namely, to run thesayHello()
function.
Back in the bad old days of web development, different browsers had different support for JavaScript. This meant that your code might run in Safari 2 but not in Internet Explorer 6. You had to take great pains to test each browser (and even different versions of the same browser) to make sure your code would work for everyone. As the number of browsers and browser versions grew, it became impossible to test and maintain your JavaScript code for every environment. At that time, web programming with JavaScript was hell.
Enter jQuery. jQuery is a relatively small JavaScript library that allows you to write your JavaScript code in a way that will work the same in a wide variety of browsers. What’s more, it greatly simplifies a number of common web development tasks. For these reasons, I use jQuery in most of my web development work, and I’ll be using it for the JavaScript examples in this book. Example 1-10 is a jQuery rewrite of Example 1-9. Create a new file in your text editor, copy this listing into it, and save it as jquerytest.html. Next, download jquery.js into the same directory. Then open the file in your web browser and try it out.
Note
jQuery downloads, documentation, and tutorials are available at http://jquery.com. To use jQuery as shown in Example 1-9, you will need to download it from there, rename the file you downloaded (such as jquery-1.4.2.min.js) to jquery.js, and put a copy of it in the same directory as your HTML document.
This line includes the jquery.js library. It uses a relative path, meaning the file exists in the same directory as the page that is using it (this example won’t function correctly unless the jQuery library, jquery.js, is there). However, you can include it directly from a variety of places where it’s available.
Notice the reduction in the amount of code we need to write to replace the text in the
h1
element. This might not seem like a big deal in such a trivial example, but I can assure you that it’s a lifesaver in complex solutions.
We’ll be seeing plenty of real-world jQuery examples later on, so I’m going to leave it at that for the moment.
Get Building Android Apps with HTML, CSS, and JavaScript, 2nd Edition now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.