CSI 3140
WWW Structures, Techniques and Standards
Cascading Style Sheets (CSS)
Motivation
HTML markup can be used to represent
Semantics: h1 means that an element is a top-level heading
Presentation: h1 elements look a certain way
It’s advisable to separate semantics from
presentation because:
It’s easier to present documents on multiple platforms
(browser, cell phone, spoken, …)
It’s easier to generate documents with consistent look
Semantic and presentation changes can be made
independently of one another (division of labor)
User control of presentation is facilitated
Style Sheet Languages
Cascading Style Sheets (CSS)
Applies to (X)HTML as well as XML documents in
general
Focus of this chapter
Extensible Stylesheet Language (XSL)
Often used to transform one XML document to
another form, but can also add style
XSL Transformations covered in later chapter
CSS Introduction
A styled HTML document
produced by the style sheet style1.css:
CSS Introduction
link element associates style sheet with doc.
CSS Introduction
type attribute specifies style language used
CSS Introduction
href attribute provides style sheet URL
CSS Introduction
title attribute provides style sheet name
CSS Introduction
Alternative, user selectable style sheets
can be specified
CSS Introduction
CSS Introduction
A styled HTML document
produced by the style sheet style2.css:
CSS Introduction
alternate style sheet
Specified by the rel (relationship) attribute of the
link element that imports this sheet.
preferred style sheet
A style sheet which is referenced by a link
element having a rel with value stylesheet as
well as a title specification
CSS Introduction
Note that alternate, user selectable style is
not widely supported: firefox 3 and IE 8 do,
but IE 6, IE 7 and Chrome don’t.
CSS Features
The key property of style sheet technology:
separate the presentation of information from the
information content and semantic tagging.
CSS Features
Single document can be displayed on multiple
media platforms by tailoring style sheets:
This document will be printed differently than it
is displayed.
Possible Values for media
Attribute
Persistent Style sheet
These style sheets cannot be selected by
the user, but instead will apply regardless of
user actions.
Such style sheets are called persistent and
can be recognized by their lack of a title
attribute specification in the link element
referencing the style sheet.
CSS Syntax
Parts of a style rule (or statement)
CSS Syntax:
Selector Strings
CSS Syntax:
Selector Strings
Elements belonging to a style class:
class selector: begins with a period .
Referencing a style class in HTML:
Elements of a certain type and class:
CSS Syntax:
Selector Strings
Elements belonging to a style class:
Referencing a style class in HTML:
this span belongs to three style classes
Elements of a certain type and class:
CSS Syntax:
Selector Strings
Elements belonging to a style class:
Referencing a style class in HTML:
Elements of a certain type and class:
this rule applies only to span’s belonging to class special
pseudo-classes
In addition to ID and class selectors,
several predefined pseudo-classes are
associated with a (anchor) elements that have
an href attribute (source anchors).
Pseudo-Classes Associated
with a Element Type
descendant selector
A selector may be specialized so that it
holds only within the content of certain
element types.
Eg:
ul span { font-variant:small-caps }
CSS Syntax:
Selector Strings
Source anchor elements:
pseudo-classes
Element types that are descendents:
CSS Syntax:
Selector Strings
Source anchor elements:
Element types that are descendants:
rule applies to li element that is
CSS Syntax:
Selector Strings
Source anchor elements:
Element types that are descendants:
rule applies to li element that is
part of the content of an ol element
CSS Syntax:
Selector Strings
Source anchor elements:
Element types that are descendants:
rule applies to li element that is
part of the content of an ol element
that is part of the content of a ul element
CSS Syntax
Style rules covered thus far follow ruleset
syntax
At-rule is a second type of rule
URL relative to style sheet URL
Reads style rules from specified URL
Must appear at beginning of style sheet
The url() function is used to mark its string
argument as a URL
The @import rule must end with a
semicolon
Style Sheets and HTML
Style sheets referenced by link HTML element are
called external style sheets
Style sheets can be embedded directly in HTML
document using style element
Most HTML elements have style attribute (value
is list of style declarations)
Style Sheets and HTML
Rules of thumb:
Use external style sheets to define site-wide style
Prefer style sheets (either external or embedded)
to style attributes
XML special characters
Must use references in embedded style sheets and
style attribute
Must not use references in external style sheets
HTML 4.01 specification suggests enclosing
the content of a style element within an SGML
comment
Eg:
<style type="text/css">
<!--
h1, h2 { background-color:aqua }
-->
</style>
The use of style sheets is recommended
over the use of style attributes, for a number
of reasons.
ease of coding
it is generally much easier to modify the style of
a document that uses style sheets to define style
than it is to modify one that uses style attributes.
Generally best to keep all style information out
of the body of an HTML document.
CSS Rule Cascade
What if more than one style declaration
applies to a property of an element?
The CSS rule cascade determines which
style rule’s declaration applies
For every property of every element on a
page, the browser must decide on a value to
use for that property
How does it determine this value if multiple
style declarations apply to that property of that
element?
what should the browser do if no
declaration at all directly applies to that
element property?
rule cascading
a multistage sorting process that selects a single
declaration that will supply the property value
choose between multiple declarations that
all apply to a single property of a single
element
Very first step:
deciding which external and embedded style
sheets apply to the document
Eg: Alternate stylesheets.
Step 2:
associating an origin and weight with every
declaration that applies to a given property of a
given element
The origin of a style sheet declaration has
to do with who wrote the declaration:
the person who wrote the HTML document
(author)
the person who is viewing the document (user)
the person who wrote the browser software that
is displaying the document (user agent)
Every author and user style declaration has
one of two weight values: normal and important.
A declaration has important weight if it ends
with an exclamation mark (!) followed by the
string important
p { text-indent:3em; font-size:larger !important
}
After establishing origin and
weight
They are prioritized (from high to low) as
follows:
1. Important declaration with user origin
2. Important declaration with author origin
3. Normal declaration with author origin
4. Normal declaration with user origin
5. Any declaration with user agent origin
The next step is to sort these declarations
according to their specificity.
place each ruleset in one or more bins, each
bin labeled with a class of selectors.
The bins we use for this purpose, from
highest to lowest specificity, are:
1. ID selectors
2. Class and pseudo-class selectors
3. Descendant and type selectors (the more
element type names, the more specific)
4. Universal selectors
@import url("imp2.css");
p { color:green }
and the file imp2.css contains the statement
p { color:blue }
and a document head contains the markup
<title>StyleRuleOrder.html</title>
<style type="text/css">
p { color:red }
</style>
<link rel="stylesheet" type="text/css" href="imp1.css" />
<style type="text/css">
p { color:yellow }
</style>
p { color:red }
p { color:blue }
p { color:green }
p { color:yellow }
and p elements will be displayed with yellow
text.
CSS Rule Cascade
Step 4:
Sort by order specified: if two rules have the same weight,
origin and specificity
the latter specified wins.
Rules in imported style sheets are considered to be before
any rules in the style sheet itself.
CSS Inheritance
What if no style declaration applies to a
property of an element?
Generally, the property value is inherited
from the nearest ancestor element that has a
value for the property
If no ancestor has a value (or the property
does not inherit) then CSS defines an initial
value that is used
CSS Inheritance
CSS Inheritance
Property values:
Specified: value contained in declaration
Absolute: value can be determined without reference to
context (e.g., 2cm)
Relative: value depends on context (e.g., larger)
Computed: absolute representation of relative value
(e.g., larger might be 1.2 x parent font size)
Actual: value actually used by browser (e.g.,
computed value might be rounded)
CSS Inheritance
Most properties inherit computed value
Exception: line-height
A little thought can usually tell you whether
a property inherits or not
Example: height does not inherit
CSS Font Properties
A font is a mapping from character to glyphs
Glyph (visual representation)
character cell
(content area)
CSS Font Properties
A font is a mapping from code points to glyphs
glyphs do not necessary stay inside cells!
CSS Font Properties
A font family is a collection of related fonts
(typically differ in size, weight, etc.)
font-family property can accept a list of
families, including generic font families
first choice font
CSS Font Properties
A font family is a collection of related fonts
(typically differ in size, weight, etc.)
font-family property can accept a list of
families, including generic font families
second choice font
CSS Font Properties
A font family is a collection of related fonts
(typically differ in size, weight, etc.)
font-family property can accept a list of
families, including generic font families
generic
CSS Font Properties
generic
fonts are
system-
specific
CSS Font Properties
Note that most generic font can be easily
set on Firefox and Chrome, but such option
doesn’t seem to be available on IE 7 and 8. IE
will still default to something although maybe
not what you had hoped for!
CSS Font Properties
Many properties, such as font-size, have a value that
is a CSS length
All CSS length values except 0 need units
CSS Font Properties
Computed value
of font-size
property
CSS Font Properties
Reference font defines em and ex units
Normally, reference font is the font of the
element being styled
Exception: Using em/ex to specify value for
font-size
parent element’s font is
reference font
CSS Font Properties
Other ways to specify value for
font-size:
Percentage (of parent font-size)
Absolute size keyword: xx-small, x-small,
small, medium (initial value), large,
x-large, xx-large
User agent specific; should differ by ~ 20%
Relative size keyword: smaller, larger
Relative to parent element’s font
CSS Font Properties
CSS Font Properties
Text is rendered using line boxes
Height of line box given by line-height
Initial value: normal (i.e., cell height; relationship with
em height is font-specific)
Other values (following are equivalent):
CSS Font Properties
When line-height is greater than cell height:
Inheritance of line-height:
Specified value if normal or unit-less number
Computed value otherwise
CSS Font Properties
font shortcut property:
CSS Font Properties
font shortcut property:
Initial values used if no value specified in font
property list (that is, potentially reset)
CSS Font Properties
font shortcut property:
specifying line-height (here, twice cell height)
any order size and family required,
order-dependent
CSS Text Formatting
CSS Text Color
Font color specified by color property
Two primary ways of specifying colors:
Color name: black, gray, silver, white, red, lime,
blue, yellow, aqua, fuchsia, maroon, green, navy,
olive, teal, purple, full list at
http://www.w3.org/TR/SVG11/types.html#Color
Keywords
red/green/blue (RGB) values
CSS Text Color
CSS Text Color
CSS Box Model
Every rendered element occupies a box:
(or outer edge)
(or inner edge)
CSS Box Model
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>
SpanBoxStyle.html
</title>
<link rel="stylesheet" type="text/css" href="span-box-style.css" />
</head>
<body>
<p>
The <span>first span</span> and <span>second span</span>.
</p>
</body>
</html>
CSS Box Model
CSS Box Model
CSS Box Model
CSS Box Model
CSS Box Model
CSS Box Model
CSS Box Model
CSS Box Model
If multiple declarations apply to a property,
the last declaration overrides earlier
specifications
Left border is 30px wide,
inset style, and red
Backgrounds
background-color
Specifies background color for content, padding,
and border areas
Margin area is always transparent
Not inherited; initial value transparent
background-image
Specifies (using url() function) image that will
be tiled over an element
The image found at the specified URL will
be tiled over the padding and content areas of
the element to which this property is applied
Tiling simply means that if an image is too
small to cover the element, either from left to
right or from top to bottom or both, then the
image is repeated as needed.
Backgrounds
<body style="background-image:url('CucumberFlowerPot.png')">
Normal Flow Layout
In normal flow processing, each displayed
element has a corresponding rectangular box
The browser generates a box corresponding to this
element, which is called the initial containing
block.
if the browser’s horizontal and vertical scrollbars
are not active,
then the box coincides with the browser’s client area,
and therefore has the same dimensions.
if either scrollbar is active,
then the outer edges of the initial containing block are
located at the edges of the underlying area over which
the browser can be scrolled.
It is as if the document is drawn on an
imaginary canvas.
The browser client area acts as a viewport
through which all or part of the canvas is
viewed.
The initial containing block’s height is
the total height of this canvas,
or the height of the browser’s client area if that is
greater than the canvas height.
normal flow processing
if one HTML element is part of the content
of a second HTML element,
then the box corresponding to the first element
will be contained within the content area of the
box for the second element.
Eg:
the body element is contained within the html
element,
the box corresponding to the body element is placed
within the initial containing block box
Boxes of child elements are contained in boxes
of parent
Sibling block elements are laid out one on top of
the other
Sibling inline elements are one after the other
Normal Flow Layout
(body)
(html)
Normal Flow Layout
Block
elements
only
Normal Flow Layout
html
body
div d1
div d2
div d3
div d4
Top edges of
block boxes are
in document order
Normal Flow Layout
What is a “block element”?
Element with value block specified for its
display property
User agent style sheet (not CSS) specifies default
values; typical block elements include html, body,
p, pre, div, form, ol, ul, dl, hr, h1 through h6
Most other elements except li and table-related have
inline specified for display
CSS defines a number of other possible
values for the display property
Eg:
list-item
used as the display value for li elements
table-row
value for tr elements
inline.
inline HTML elements
inline HTML elements are those that do not
interrupt the flow of a document by starting a
new line as block elements do
Eg:
span and strong.
Margin Collapse
When two consecutive block boxes are
rendered , a special rule called margin collapse
is used to determine the vertical separation
between the boxes.
m1
m2
m1+m2
max(m1,m2)
Normal Flow Layout
When blocks stack, adjacent margins are
collapsed to the size of the larger margin
Normal Flow Layout
Initial value of width property is auto, which
for block boxes means to make the content area as
wide as possible within margin/padding constraints:
Width of block boxes
increases as browser
client area is widened
Normal Flow Layout
Can also specify CSS length or percentage
(of parent’s content width) for width
property
By default, width of right margin is
adjusted to accommodate a change to
width
Normal Flow Layout
Can also specify CSS length or percentage
(of parent’s content width) for width
property
Centering can be achieved by setting
both margins to auto
Normal Flow Layout
Boxes corresponding to character cells and
inline elements are laid out side by side in line
boxes that are stacked one on top of the other
Heights
based on
content
Character cells aligned by baseline
Normal Flow Layout
Padding/borders/margins affect width but
not height of inline boxes
Normal Flow Layout
Specify value for vertical-align to position
an inline element within line box:
initial
value of
vertical-
align
Beyond Normal Flow
CSS allows for boxes to be positioned
outside the normal flow:
Relative positioning
span’s shifted backwards relative to normal flow
Beyond Normal Flow
CSS allows for boxes to be positioned
outside the normal flow:
Float positioning
span taken out of normal
flow and “floated” to the
left of its line box
Beyond Normal Flow
CSS allows for boxes to be positioned
outside the normal flow:
Absolute positioning
span’s removed from
normal flow and
positioned relative
to another box
Beyond Normal Flow
Properties used to specify positioning:
position: static (initial value), relative, or
absolute
Element is positioned if this property not static
Properties left, right, top, bottom apply to positioned
elements
Primary values are auto (initial value) or CSS length
float: none, left, or right
Applies to elements with static and relative positioning
only
Beyond Normal Flow
Relative positioning
Specifying positive value for right property of
relatively positioned box moves it to left
<span style="background-color:red">
</span><span class="right">Red</span>
span
containing
text moves
left
Beyond Normal Flow
Relative positioning
Specifying negative value for left property
also moves box to left
<span style="background-color:red">
</span><span class="right">Red</span>
same
effect as
before
Beyond Normal Flow
Float positioning
Specify value for float property
Beyond Normal Flow
Float positioning
Specify value for float property
Floated element becomes a CSS block
element (e.g., can set height and width)
Beyond Normal Flow
Absolute positioning
Specify location for corner of box relative to
positioned containing block
p elements are positioned (but don’t move!)
margin area
padding area
containing This second paragraph has a
block note.
Beyond Normal Flow
Absolute positioning
Specify location for edges of box relative to
positioned containing block
Beyond Normal Flow
Absolute positioning
10em padding top
edge
padding left
edge
Beyond Normal Flow
Absolute positioning
8em
Beyond Normal Flow
Absolutely positioned box does not affect
positioning of other boxes!
Second absolutely
positioned box
obscures first
CSS Position-Related Properties
z-index: drawing order for overlaid
boxes (largest number drawn last)
CSS Position-Related Properties
display: value none means that element
and its descendants are not rendered and do
not affect normal flow
visibility: value hidden (initial
value is visible) means that element and its
descendants are not rendered but still do affect
normal flow