Andrea De Lorenzo, University of Trieste
Day | Time | Room |
---|---|---|
Monday | 09:30am - 11:00am | Aula V - Building G |
Tuesday | 03:00pm - 04:30pm | Aula 4D - Building H2 bis |
Wednesday | 01:00pm - 02:30pm | Aula 4D - Building H2 bis |
Telegram Channel
Some Numbers:
Principles, methods, and techniques of web programming
Practical Course, a lot of technologies:
In practice: how to create a web application
We will only use products available online, for free:
Programming Books:
Design Books:
Some details:
WARNING!!
The technologies we will see:
Final goal: teach how to fish, rather than give the fish.
Always evaluate:
Language used to describe the content and the structure of the information in a web document
It does not describe the presentation of the information!
web page = web document
much more complicated, actually
Important enhancements:
<!DOCTYPE html>
)
<article>
,
<section>
,
<nav>
,
<aside>
<audio>
,
<video>
Official reference on the differences
To ensure backward compatibility, some things may be allowed for HTML interpreters but not for authors
<!DOCTYPE html>
<html>
<head>
<title>Hello HTML</title>
</head>
<body>
<p>
Hello <a href="http://www.units.it">UniTs</a>!<br/>
We are learning!
</p>
</body>
</html>
<title>Hello HTML</title>
→
element
<title>
→ start tag
Hello HTML
→ content</title>
→ end tag
<a href="http://www.units.it">UniTs</a>
href="http://www.units.it"
→ attribute
href
→ attribute namehttp://www.units.it
→ attribute value
<img src="white-dog.png"/>
<br/>
<input type="checkbox" checked/>
<!--...-->
:
<!--nobody can see this-->
<head>
→ head, additional information about the document
<body>
→ informational content of the document
<title>
→ document title<meta name="..." content="...">
name="author"
→ document author
name="description"
→ document description
name="keywords"
→ document keywords ("...,...,..."
)
Browser: HTML → DOM tree → screen rendering
Tree representation of the document, in memory
Alternatives to the screen:
Different levels of correctness:
Elements can be nested but not overlapped
<p>Example <strong>correct</strong></p>
→ correct
<p>Example <strong>correct</p></strong>
→ invalid
Attribute values must be in quotes if they contain spaces
<img src="white-dog.png" alt="White dog"/>
→ correct
<img src=white-dog.png alt="White dog"/>
→ correct
<img src="white-dog.png" alt=White dog/>
→ invalid
To avoid mistakes, always use quotes!
Special characters with a name:
↓
→
down arrow (↓)
ℚ
→ rationals
(ℚ)
Rules:
&s
if s is
the name of one of the characters
There are many more!
What to do?
The specification = THE manual = the bible:
HTML5 W3C Recommendation,
https://html.spec.whatwg.org/multipage/
What does it contain?
Also as an introduction to HTML
Example: start tag? end tag? />
?
The start and end tags of certain normal elements can be omitted, as described later
complicated, better to always include the end tag
Another example: <em>
em
element
… the teacher is familiar with the W3C Validator
Style → de gustibus?
Usability
they are not only about HTML (HTML ≠ representation)
<!-- -->
→ defines a comment<!DOCTYPE>
→ defines the document type
<a>
→ defines a hyperlink<abbr>
→ defines an abbreviation<address>
→ defines an address element
Complete list:
Tag | Description |
---|---|
<!--...--> | Defines a comment |
<!DOCTYPE> | Defines the document type |
<a> | Defines a hyperlink |
<abbr> | Defines an abbreviation or an acronym |
<acronym> |
Not supported in HTML5. Use
<abbr>
instead. Defines an acronym |
<address> | Defines contact information for the author/owner of a document |
<applet> |
Not supported in HTML5. Use
<embed> or
<object>
instead. Defines an embedded applet |
<area> | Defines an area inside an image-map |
<article> | Defines an article |
<aside> | Defines content aside from the page content |
<audio> | Defines sound content |
<b> | Defines bold text |
<base> | Specifies the base URL/target for all relative URLs in a document |
<basefont> |
Not supported in HTML5. Use CSS instead. Specifies a default color, size, and font for all text in a document |
<bdi> | Isolates a part of text that might be formatted in a different direction from other text outside it |
<bdo> | Overrides the current text direction |
<big> |
Not supported in HTML5. Use CSS instead. Defines big text |
<blockquote> | Defines a section that is quoted from another source |
<body> | Defines the document's body |
<br> | Defines a single line break |
<button> | Defines a clickable button |
<canvas> | Used to draw graphics, on the fly, via scripting (usually JavaScript) |
<caption> | Defines a table caption |
<center> |
Not supported in HTML5. Use CSS instead. Defines centered text |
<cite> | Defines the title of a work |
<code> | Defines a piece of computer code |
<col> | Specifies column properties for each column within a <colgroup> element |
article
→ a piece of independent content;
if nested, the inner one is related to the outer one (e.g., a blog post and its comments).
section
→ a grouping of content that is part
of a broader piece of content, typically with a heading
nav
→ a section with navigation linksaside
→ a piece of content complementary to its context (e.g., notes, Twitter messages, etc.)
h1
, ..., h6
→ headings
(⚠ do not use for subtitles or taglines!)
header
→ introductory content (e.g., title and navigation)
footer
→ information related to the section
(e.g., author, additional links, copyright, etc.)
address
→ contact information (⚠ not for generic addresses)
h1
larger than that of
h2
?
section
elements larger than
that after an article
?
address
tag rendered?Wrong, you shouldn’t be asking yourself that!
Language used to describe the content and structure of the information in a web document
Not the representation!
<h2>My memoirs</h2>
<p>
I don’t remember them anymore...
</p>
p
→ paragraphhr
→ topic change (not needed between
sections)
pre
→ preformatted textblockquote
→ external quotationmain
→ main content of the page, not
repeated across the site. ⚠ only one per page!
<h3>Ingredients</h3> <ul> <li>Sicilian pesto</li> <li>fusilli</li> <li>grated cheese</li> </ul> <h3>Preparation</h3> <ol> <li>cook the pasta</li> <li>add the pesto</li> <li>garnish with cheese to taste</li> </ol>
ul
→ unordered listol
→ ordered listli
→ list item⚠ must not be placed inside paragraphs!
CR+LF
≠ new linebr
→ line break, part of the content
br
elements must be used only for line breaks that are actually part of the content, as in poems or addresses.
must be used
? → semantic correctness (HTML)
em
→ the content of the element deserves emphasis
strong
→ the content is importantmark
→ highlighted text for reference (e.g., searched text)
s
→ the content is no longer accurate or relevant
sub
and sup
→ subscript and
superscript text
i
→ different reading (e.g., another language, technical term, etc.)
u
→ text with non-textual annotation (e.g., intentionally incorrect)
Authors are encouraged to avoid using the u element where it could be confused for a hyperlink.
b
→ draw attention
The b element should be used as a last resort when no other element is more appropriate.
code
→ the content is a piece of source code
samp
→ output produced by the codevar
→ a variablekbd
→ keyboard input... sort ofsamp
→ the key was pressed by the user and displayed on screen
samp
tag → a menu was selected
kbd
→ key combination
kbd
Please press
Ctrl + Shift + R
to reload a page.
Please press Ctrl + Shift + R to reload a page.
samp
in kbd
To create a new file, choose the menu option
File⇒New Document
.
Don't forget to click the OK button
to confirm once you've entered the name of the new file.
To create a new file, choose the menu option File⇒New Document.
Don't forget to click the OK button to confirm once you've entered the name of the new file.
I go to the <a href="http://www.units.it">university</a>
a
→ link (anchor) to another document
href=""
→ location of the other document
href="udine.html"
href="http://www.units.it"
href="#people"
href="mailto:andrea.delorenzo@units.it"
link
is something else
<img src="white-dog.jpg" alt="The white dog"/>
src
→ location of the image resourcealt
→ fallback content:
content that is to be used when the external resource cannot be used
alt
Is alt
mandatory?
Except where otherwise specified, the
alt
attribute must be specified and its value must not be empty; the value must be an appropriate replacement for the image.One way to think of alternative text is to think about how you would read the page containing the image to someone over the phone, without mentioning that there is an image present.
In some cases, the icon is supplemental to a text label conveying the same meaning. In those cases, the
alt
attribute must be present but must be empty.[...] In such cases, the
alt
attribute may be omitted, but one of the following conditions must be met [...]
“Almost” mandatory to include it, but it can be alt=""
<table>
<caption>Line 36 Timetable</caption>
<thead>
<tr><th>Hour</th><th>Minute</th></tr>
</thead>
<tbody>
<tr><td>8</td><td>00 15 30 45</td></tr>
<tr><td>9</td><td>15 45</td></tr>
</tbody>
</table>
caption
→ title, headingthead
; tfoot
→ column labels; totals, etc. (header, footer)
tbody
→ body (with the values)tr
→ row (table row)td, th
→ cell (table data/header cell)
Do not use them for formatting!
Tables must not be used as layout aids. Historically, some Web authors have misused tables in HTML as a way to control their page layout. This usage is non-conforming, because tools attempting to extract tabular data from such documents would obtain very confusing results. In particular, users of accessibility tools like screen readers are likely to find it very difficult to navigate pages with tables used for layout.
There are a variety of alternatives to using HTML tables for layout, primarily using CSS positioning and the CSS table model.
div
and span
The
div
element has no special meaning at all. It represents its children. It can be used with theclass
,lang
, andtitle
attributes to mark up semantics common to a group of consecutive elements.
→ BLOCK level
The
span
element doesn't mean anything on its own, but can be useful when used together with the global attributes, e.g.class
,lang
, ordir
. It represents its children.
→ inside a text line
div
: example<article lang="en-US"> <h1>My use of language and my cats</h1> <p>My cat's behavior hasn't changed much since her absence, except that she plays her new physique to the neighbors regularly, in an attempt to get pets.</p> <div lang="en-GB"> <p>My other cat, coloured black and white, is a sweetie. He followed us to the pool today, walking down the pavement with us. Yesterday he apparently visited our neighbours. I wonder if he recognises that their flat is a mirror image of ours.</p> <p>Hm, I just noticed that in the last paragraph I used British English. But I'm supposed to write in American English. So I shouldn't say "pavement" or "flat" or "colour"...</p> </div> <p>I should say "sidewalk" and "apartment" and "color"!</p> </article>
span
: example<code class="lang-c"><span class="keyword">for</span> (<span class="ident">j</span> = 0; <span class="ident">j</span> < 256; <span class="ident">j</span>++) { <span class="ident">i_t3</span> = (<span class="ident">i_t3</span> & 0x1ffff) | (<span class="ident">j</span> << 17); <span class="ident">i_t6</span> = (((((((<span class="ident">i_t3</span> >> 3) ^ <span class="ident">i_t3</span>) >> 1) ^ <span class="ident">i_t3</span>) >> 8) ^ <span class="ident">i_t3</span>) >> 5) & 0xff; <span class="keyword">if</span> (<span class="ident">i_t6</span> == <span class="ident">i_t1</span>) <span class="keyword">break</span>; }</code>
for (j = 0; j < 256; j++) {
i_t3 = (i_t3 & 0x1ffff) | (j << 17);
i_t6 = (((((((i_t3 >> 3) ^ i_t3) >> 1) ^ i_t3) >> 8) ^ i_t3) >> 5) & 0xff;
if (i_t6 == i_t1)
break;
}
id
Attributeid
→ unique identifier
<section id="abstract">
It can be used for:
<a href="#abstract">
Identifiers are opaque strings. Particular meanings should not be derived from the value of the id attribute.
title
Attributetitle
→ descriptive indication
<a href="udine.html" title="Info page of the neighboring city">Udine</a>
<abbr title="Cascading Style Sheet">CSS</abbr>
Advisory information for the element, such as would be appropriate for a tooltip.
lang
and translate
Attributeslang
→ main language of the content
<p lang="it">English is difficult to pronounce:
for example the word <span lang="en-UK">Wednesday</span>.</p>
<p lang="de"><span lang="en-UK">Wednesday</span>
ist ein schwieriges Wort auszusprechen.</p>
translate
→ whether or not this content should be localized
Enumerated values:
yes
no
Example: code fragments, keyboard input, menus, etc.
class
attribute
Value: a set of space-separated names:
<span class="content keyword">if</span>
Authors are encouraged to use values that describe the nature of the content, rather than values that describe the desired presentation of the content
semantic correctness (HTML)
data-*
Attribute
<section data-dog-weight="12.8kg" data-dog-speed="75%">
<h1>White dog</h1>
<p>The white dog is stocky but fast.</p>
</section>
data-
is the name of the
custom attribute
dir
and style
Attributesdir
→ text direction
style
→ appearance of the element, we’ll see later
<header> | |
<nav> | |
<section> | <aside> |
<article> | |
<footer> |
article
inside section
or the other way around?The article
element specifies independent, self-contained content.
The section
element defines a section in a document.
Can we use the definition to decide how to nest these elements? No.
In some HTML pages a section
will contain an article
,
and in others an article
will contain a section
.
Write a (HTML-only) document about your city or neighborhood.
Content (items):
We will assess the syntactic, semantic, and stylistic correctness of the HTML document.
Rules:
aside
, i
, em
,
strong
, nav
, lang
,
li
Choose whichever you like, I suggest:
Recommended extensions:
Recommended packages:
Features:
Fewer plugins than VS Code or Sublime, but designed for speed and teamwork.
Language used to describe the content and the structure of the information in a web document
The browser renders the document:
how does it draw it on the screen?
How?
HTML
<!DOCTYPE html>
<html>
<head>
<title>Sample page</title>
</head>
<body>
<h1>Sample page</h1>
<p>This is a <a href="demo.html">simple</a> sample.</p>
<!-- this is a comment -->
</body>
</html>
DOM tree:
html
html
head
#text
: ⏎␣␣title
#text
: Sample page#text
: ⏎␣#text
: ⏎␣body
#text
: ⏎␣␣h1
#text
: Sample page#text
: ⏎␣␣p
#text
: This is a a
href
="demo.html
" #text
: simple#text
: sample.#text
: ⏎␣␣#comment
: this is a comment #text
: ⏎␣⏎Let’s consider the subtree of the node body
(some #text
omitted):
body
is the parent of the node h1
p
, #comment
, ... are sibling of the node h1
h1
, p
, ... are children of the node body
a
, h1
, p
, ... are descendant of the node body
body
, p
, h1
, a
are elements#text
are text (they have no children!)For each node of the DOM tree:
reading the document: "drawn" → "spoken", "where" → "when"
Imagine you are the browser, or that you have to write the browser program’s code...
Goal: DOM tree → boxes tree
Main transformation rules:
An element is drawn if and only if all the following conditions are valid:
Premise: types of boxes
What they can contain:
strong
element)Roughly speaking:
consecutive block-level boxes are placed one below the other inside the parent block-level box
They try to fill all the available horizontal space
consecutive inline-level boxes are placed side by side inside the parent line-level box
They only occupy the strictly necessary space
"consecutive" → follows the order of the DOM tree
Non-exhaustive list:
p
table
nav
div
form
main
, article
, section
h1
, h2
, ...Non-exhaustive list:
a
span
em
strong
input
, button
, textarea
img
And which elements generate Line Boxes?
They are generated automatically!
The rectangular area that contains the boxes that form a line is called a line box.
When several inline-level boxes cannot fit horizontally within a single line box, they are distributed among two or more vertically-stacked line boxes. Thus, a paragraph is a vertical stack of line boxes.
When an inline box exceeds the width of a line box, it is split into several boxes and these boxes are distributed across several line boxes. If an inline box cannot be split (e.g., if the inline box contains a single character, or language specific word breaking rules disallow a break within the inline box, or if the inline box is affected by a white-space value of nowrap or pre), then the inline box overflows the line box.
We’re missing something:
"box type", "margin", ... → style properties of boxes
A document that specifies which values to assign to which elements’ properties
A document that specifies which values to assign to which elements’ properties
"the element of type p
must correspond to a block-level box with a 1cm margin"
But the browser still displays my page, even though I haven’t provided any CSS!
↓
implicit rules
The CSS rules given in these subsections are, except where otherwise specified, expected to be used as part of the user-agent level style sheet defaults for all documents that contain HTML elements.
In the specification, a CSS follows
You don't need to be a programmer or a CS major to understand the CSS specifications. You don't need to be over 18 or have a Bachelor's degree. You just need to be very pedantic, very persistent, and very thorough.
Less simple compared to HTML: the specification is modular
As the popularity of CSS grows, so does interest in making additions to the specification. Rather than attempting to shove dozens of updates into a single monolithic specification, it will be much easier and more efficient to be able to update individual pieces of the specification. Modules will enable CSS to be updated in a more timely and precise fashion, thus allowing for a more flexible and timely evolution of the specification as a whole.
For resource constrained devices, it may be impractical to support all of CSS. For example, an aural browser may be concerned only with aural styles, whereas a visual browser may care nothing for aural styles. In such cases, a user agent may implement a subset of CSS. Subsets of CSS are limited to combining selected CSS modules, and once a module has been chosen, all of its features must be supported.
An ordered list of rules
does not apply only to HTML documents
selector { property-name: property-value; property-name: property-value; ... } selector { /* comment */ property-name: property-value; property-name: property-value; ... } /* comment */
The specification defines:
@
:
@charset
@import
@namespace
@media
@viewport
But we’ll talk about them later...
Attention: if the syntax of a rule is incorrect, the browser must ignore the entire rule!
"must ignore" = "the specification recommends that the browser ignore it" → the browser may not ignore...
different from what happens with HTML
Three levels of correctness:
there is a CSS validator
Who defines the style?
Where do I specify that I want to use certain rules for a given HTML document d? Three methods:
<link rel="stylesheet" type="text/css" href="...">
style
element:
<style>...</style>
style
attribute of the element I want to style (the selector is not needed!):<p style="...">
@import
The @import
rule allows you to import other style sheets into a CSS code
@charset
is allowedExample: importing a Google Web Font
<link href="https://fonts.googleapis.com/css?family=Roboto" rel="stylesheet" >
font-family: 'Roboto', sans-serif;
All methods can be used together → they are all applied!
<link ...>
)
link
is also used for other purposes
If a property P is not defined for an element E, the element inherits the value of P from its parent (parent of E)
Inheritance → cascading style sheet
How do I compute the value of each property?
Six values for each property...
Examples:
Declared | Inherited | Specified | Computed | Used | Actual |
---|---|---|---|---|---|
text-align: left | left | left | left | left | left |
width: (none) | (none) | auto | auto | 120px | 120px |
font-size: 1.2em | 1.2em | 1.2em | 14.1px | 14.1px | 14px |
width: 80% | 80% | 80% | 80% | 354.2px | 354px |
em
is the font size →
2em
= 2 times the font size.
What if multiple rules are in conflict?
style="..."
, most important)<style>
)<link>
)!important
CSS attempts to create a balance of power between author and user style sheets. By default, rules in an author’s style sheet override those in a user’s style sheet.
!important
changes the priority:
Example:
{ background-color: lightgrey !important; }
!important
!important
solves the problem!important
.button {
background-color: #8c8c8c;
color: white;
padding: 5px;
border: 1px solid black;
}
#myDiv a {
color: red;
background-color: yellow;
}
.button {
background-color: #8c8c8c !important;
color: white !important;
padding: 5px !important;
border: 1px solid black !important;
}
#myDiv a {
color: red;
background-color: yellow;
}