Cascading Style Sheets (CSS) is a style sheet language used for describing the presentation semantics (the look and formatting) of a document written in a markup language. Its most common application is to style web pages written in HTML and XHTML, but the language can also be applied to any kind of XML document, including plain XML, SVG and XUL.
CSS is designed primarily to enable the separation of document content (written in HTML or a similar markup language) from document presentation, including elements such as the layout, colors, and fonts. This separation can improve content accessibility, provide more flexibility and control in the specification of presentation characteristics, enable multiple pages to share formatting, and reduce complexity and repetition in the structural content (such as by allowing for tableless web design).
CSS is designed primarily to enable the separation of document content (written in HTML or a similar markup language) from document presentation, including elements such as the layout, colors, and fonts. This separation can improve content accessibility, provide more flexibility and control in the specification of presentation characteristics, enable multiple pages to share formatting, and reduce complexity and repetition in the structural content (such as by allowing for tableless web design).
CSS can
also allow the same markup page to be presented in different styles for
different rendering methods, such as on-screen, in print, by voice (when read
out by a speech-based browser or screen
reader) and on Braille-based, tactile
devices. It can also be used to allow the web page to display differently
depending on the screen size or device on which it is being viewed. While the
author of a document typically links that document to a CSS style sheet,
readers can use a different style sheet, perhaps one on their own computer, to
override the one the author has specified.
CSS specifies a priority scheme to determine which style rules apply if more
than one rule matches against a particular element. In this so-called cascade,
priorities or weights are calculated and assigned to rules, so that the
results are predictable.
The CSS specifications are maintained by the World Wide Web Consortium
(W3C). Internet media type (MIME
type)
text/css
is
registered for use with CSS by RFC
2318 (March 1998).Syntax
CSS has a simple syntax and uses a number of English keywords to specify the names of various style properties.
A style sheet consists of a list of rules. Each rule or rule-set
consists of one or more selectors and a declaration block. A
declaration-block consists of a list of declarations in braces. Each
declaration itself consists of a property, a colon (
:
), and a value. If there are
multiple declarations in a block, a semi-colon (;
) must be inserted to separate each declaration.
In CSS, selectors are used to declare which of the markup elements a
style applies to, a kind of match expression. Selectors may apply to all
elements of a specific type, or only those elements that match a certain
attribute; elements may be matched depending on how they are placed relative to
each other in the markup code, or on how they are nested within the Document Object Model.
Pseudo-classes are another form of specification used in CSS to
identify markup elements, and in some cases, specific user actions to which a
particular declaration block applies. An often-used example of a pseudo-class
is
:hover
, which applies a
style only when the user 'points to' the visible element, usually by holding
the mouse cursor over it. It is appended to a selector as in a:hover
or #elementid:hover
. Other pseudo-classes and pseudo-elements
are, for example, :first-line
,
:visited
or :before
. A special pseudo-class is :lang(c)
, "c".
A pseudo-class selects entire elements, such as
:link
or :visited
, whereas a pseudo-element makes a
selection that may consist of partial elements, such as :first-line
or :first-letter
.
Selectors may be combined in other ways too, especially in CSS 2.1, to
achieve greater specificity and flexibility.
Here is an example summing up the rules above:
selector [, selector2, ...] [:pseudo-class] {
property: value;
[property2: value2;
...]
}
/* comment */
Use
Prior to CSS, nearly all of the presentational attributes of HTML documents were contained within the HTML markup; all font colors, background styles, element alignments, borders and sizes had to be explicitly described, often repeatedly, within the HTML. CSS allows authors to move much of that information to another file, called a style sheet, resulting in considerably simpler HTML.
Headings (
h1
elements),
sub-headings (h2
),
sub-sub-headings (h3
), etc.,
are defined structurally using HTML. In print and on the screen, choice of font,
size, color and emphasis for these elements is
presentational.
Prior to CSS, document authors who wanted to assign such typographic
characteristics to, say, all
h2
headings had to use the HTML font
and other presentational elements for each occurrence of that heading type. The
additional presentational markup in the HTML made documents more complex, and
generally more difficult to maintain. In CSS, presentation is separated from
structure. In print, CSS can define color, font, text alignment, size, borders,
spacing, layout and many other typographic characteristics. It can do so
independently for on-screen and printed views. CSS also defines non-visual
styles such as the speed and emphasis with which text is read out by aural text
readers. The W3C
now considers the advantages of CSS for defining all aspects of the
presentation of HTML pages to be superior to other methods. It has therefore deprecated
the use of all the original presentational HTML markup.
CSS files are inserted into HTML documents using the following syntax:
<link rel="stylesheet" href="http://example.com/css/style.css" type="text/css" />
Sources
CSS information can be provided by various sources. CSS style information can be either attached as a separate document or embedded in the HTML document. Multiple style sheets can be imported. Different styles can be applied depending on the output device being used; for example, the screen version can be quite different from the printed version, so that authors can tailor the presentation appropriately for each medium.
Priority scheme for CSS sources (from highest to lowest priority):
- Author styles (provided by the web page author), in the form of:
- Inline styles, inside the HTML document, style information on a single element, specified using the "style" attribute
- Embedded style, blocks of CSS information inside the HTML itself
- External style sheets, i.e., a separate CSS file referenced from the document
- User style:
- A local CSS file the user specifies with a browser option, which acts as an override applied to all documents
- User agent style
- Default styles applied by the user agent, i.e., the browser's default settings for element presentation
The style sheet with the highest priority controls the content display.
Declarations not set in the highest priority source are passed on to a source
of lower priority, such as the user agent style. This process is called cascading.
One of the goals of CSS is also to allow users greater control over
presentation. Someone who finds red italic headings difficult to read may apply
a different style sheet. Depending on the browser and the web site, a user may
choose from various style sheets provided by the designers, or may remove all
added styles and view the site using the browser's default styling, or may
override just the red italic heading style without altering other attributes.
File highlightheaders.css
containing:
h1 { color: black; background-color: red !important; }
h2 { color: white; background-color: green !important; }
History
Style sheets have existed in one form or another since the beginnings of SGML in the 1980s. Cascading Style Sheets were developed as a means for creating a consistent approach to providing style information for web documents.
As HTML
grew, it came to encompass a wider variety of stylistic capabilities to meet
the demands of web developers. This evolution
gave the designer more control over site appearance, at the cost of more
complex HTML. Variations in web browser implementations,
such as ViolaWWW
and WorldWideWeb,
made consistent site appearance difficult, and users had less control over how
web content was displayed. Robert
Cailliau wanted to separate the structure from the presentation. The
ideal way would be to give the user different options and transferring three
different kinds of style sheets: one for printing, one for the presentation on
the screen and one for the editor feature.
To improve web presentation capabilities, nine different style sheet
languages were proposed to the World Wide Web Consortium's
(W3C) www-style mailing list. Of the nine proposals, two were chosen as the
foundation for what became CSS: Cascading HTML Style Sheets (CHSS) and
Stream-based Style Sheet Proposal (SSP). CHSS, a language that has some
resemblance to today's CSS, was proposed by Håkon
Wium Lie in October 1994. Bert
Bos was working on a browser called Argo, which used its own style
sheet language called SSP. Lie and Yves Lafon joined Dave
Raggett to expand the Arena browser for supporting
CSS as a testbed
application for the W3C. Lie and Bos worked together to develop the CSS standard
(the 'H' was removed from the name because these style sheets could also be
applied to other markup languages besides HTML).
Unlike existing style languages like DSSSL
and FOSI, CSS
allowed a document's style to be influenced by multiple style sheets. One style
sheet could inherit or "cascade"
from another, permitting a mixture of stylistic preferences controlled equally
by the site designer and user.
Lie's proposal was presented at the "Mosaic and the Web"
conference (later called WWW2) in Chicago,
Illinois in 1994, and again with Bert Bos in 1995. Around this time
the W3C was already being established, and took an interest in the development
of CSS. It organized a workshop toward that end chaired by Steven
Pemberton. This resulted in W3C adding work on CSS to the
deliverables of the HTML editorial review board (ERB). Lie and Bos were the
primary technical staff on this aspect of the project, with additional members. In August 1996 Netscape Communication Corporation
presented an alternative style sheet language called JavaScript Style Sheets
(JSSS). The spec was never finished and is deprecated. By the end of 1996, CSS
was ready to become official, and the CSS level 1 Recommendation was published
in December.
Development of HTML, CSS, and the DOM had all been taking place
in one group, the HTML Editorial Review Board (ERB). Early in 1997, the ERB was
split into three working groups: HTML Working
group, chaired by Dan Connolly of W3C; DOM
Working group, chaired by Lauren Wood of SoftQuad;
and CSS Working group, chaired by Chris Lilley of W3C.
The CSS Working Group began tackling issues that had not been addressed with
CSS level 1, resulting in the creation of CSS level 2 on November 4, 1997. It
was published as a W3C Recommendation on May 12, 1998. CSS level 3, which was
started in 1998, is still under development as of 2009.
In 2005 the CSS Working Groups decided to enforce the requirements for
standards more strictly. This meant that already published standards like
CSS 2.1, CSS 3 Selectors and CSS 3 Text were pulled back from
Candidate Recommendation to Working Draft level.
Variations
CSS has various levels and profiles. Each level of CSS builds upon the last, typically adding new features and typically denoted as CSS 1, CSS 2, CSS 3, and CSS 4. Profiles are typically a subset of one or more levels of CSS built for a particular device or user interface. Currently there are profiles for mobile devices, printers, and television sets. Profiles should not be confused with media types, which were added in CSS 2.
CSS 1
The first CSS specification to become an official W3C Recommendation is CSS
level 1, published in December 1996. Among its capabilities are support for
- Font properties such as typeface and emphasis
- Color of text, backgrounds, and other elements
- Text attributes such as spacing between words, letters, and lines of text
- Alignment of text, images, tables and other elements
- Margin, border, padding, and positioning for most elements
- Unique identification and generic classification of groups of attributes
The W3C no longer maintains the CSS 1 Recommendation.
CSS 2
CSS level 2 specification was developed by the W3C and published as a
Recommendation in May 1998. A superset of CSS 1, CSS 2 includes a
number of new capabilities like absolute, relative, and fixed positioning of
elements and z-index,
the concept of media types, support for aural style sheets and bidirectional
text, and new font properties such as shadows.
The W3C no longer maintains the CSS 2 recommendation.
CSS 2.1
CSS level 2 revision 1, often referred to as "CSS 2.1", fixes
errors in CSS 2, removes poorly-supported or not fully interoperable
features and adds already-implemented browser extensions to the specification.
In order to comply with the W3C Process for standardizing technical
specifications, CSS 2.1 went back and forth between Working Draft status
and Candidate Recommendation status for many years. CSS 2.1 first became a Candidate
Recommendation on February 25, 2004, but it was reverted to a
Working Draft on June 13, 2005 for further review. It returned to Candidate
Recommendation on 19 July 2007 and then updated twice in 2009. However, since
changes and clarifications were made, it again went back to Last Call Working
Draft on 7 December 2010. CSS 2.1 went to Proposed Recommendation on 12 April 2011. After being
reviewed by the W3C Advisory Committee, it was finally published as a W3C
Recommendation on 7 June 2011.
CSS 3
"CSS3" redirects here. For airport code CSS3,
see Montréal/Les Cèdres Airport. Unlike CSS 2, which is a large single specification defining various
features, CSS 3 is divided into several separate documents called
"modules". Each module adds new capabilities or extends features defined
in CSS 2, over preserving backward compatibility. Work on CSS level 3
started around the time of publication of the original CSS 2
recommendation. The earliest CSS 3 drafts were published in June 1999. Due to the modularization, different modules have different stability and
statuses. As of November 2011, there are over fifty CSS modules published from
the CSS Working Group. Three of them―Selectors Level 3,
Namespaces
and Color―
became W3C Recommendations in 2011. Some modules (including Backgrounds and Borders,
Media
Queries, and Multi-column
Layout among others) have Candidate Recommendation (CR)
status and are considered moderately stable. At CR stage,
implementations are advised to drop vendor prefixes.
CSS 4
W3C started
drafting CSS 4 on Sep 29, 2009.
However, it is currently not supported by any web
browser.
One of the new proposed selectors is
:matches()
.
For which:matches(div, p, nav) span{
font-size: 18px;
}
is the same as:
div span, p span, nav span{
font-size: 18px;
}
Another interesting and especially very usable way are reference
combinators. Those allow you to select elements that are referenced by ID
by another element, like an form element. The attendant label reference is the
"for attribute". You can define a reference combinator by the
attribute with forward slashes (/). In case of an input element you wanted to
style different (from grey to blue) when you hover its label, you could use the
selector label:hover /for/ input. </ref>
label:hover /for/ input {
border-color:blue;
}
Limitations
Some noted limitations of the current capabilities of CSS include:
Poor controls for flexible layouts
While new additions to CSS 3
provide a stronger, more robust feature-set for layout, CSS is still at heart a
styling language (for fonts, colours, borders and other decoration), not a
layout language (for blocks with positions, sizes, margins, and so on). These
limitations mean that creating fluid layouts generally requires hand-coding of
CSS, and has held back the development of a standards-based WYSIWYG editor.
Selectors are unable to ascend
CSS offers no way to select a
parent or ancestor of an element that satisfies certain criteria. A more
advanced selector scheme (such as XPath) would enable more sophisticated style sheets. However,
the major reasons for the CSS Working Group rejecting proposals for parent
selectors are related to browser performance and incremental rendering issues.
Vertical control limitations
While horizontal placement of
elements is generally easy to control, vertical placement is frequently
unintuitive, convoluted, or impossible. Simple tasks, such as centering an
element vertically or getting a footer to be placed no higher than bottom of
viewport, either require complicated and unintuitive style rules, or simple but
widely unsupported rules.
Absence of expressions
There is currently no ability to
specify property values as simple expressions (such as
margin-left: 10% – 3em + 4px;
).
This would be useful in a variety of cases, such as calculating the size of
columns subject to a constraint on the sum of all columns. However, a working draft with a calc() value to address
this limitation has been published by the CSS WG. Internet Explorer versions 5
to 7 support a proprietary expression() statement, with similar functionality.
This proprietary expression() statement is no longer supported from Internet
Explorer 8 onwards, except in compatibility modes. This decision was taken for
"standards compliance, browser performance, and security reasons".
Lack of column declaration
While possible in current
CSS 3 (using the
column-count
module), layouts with multiple columns can be complex to implement in
CSS 2.1. With CSS 2.1, the process is often done using floating
elements, which are often rendered differently by different browsers, different
computer screen shapes, and different screen ratios set on standard monitors.
Cannot explicitly declare new scope independently of
position
Scoping rules for properties such
as z-index look for the closest parent element with a position:absolute or
position:relative attribute. This odd coupling has undesired effects. For
example, it is impossible to avoid declaring a new scope when one is forced to
adjust an element's position, preventing one from using the desired scope of a
parent element.
Pseudo-class dynamic behavior not controllable
CSS implements pseudo-classes
that allow a degree of user feedback by conditional application of alternate
styles. One CSS pseudo-class, ":hover", is dynamic (equivalent of
javascript "onmouseover") and has potential for abuse (e.g., implementing
cursor-proximity popups), but CSS has no ability for a client to disable it (no
"disable"-like property) or limit its effects (no
"nochange"-like values for each property).
Advantages
Separation of content from presentation
CSS facilitates publication of
content in multiple presentation formats based on nominal parameters. Nominal
parameters include explicit user preferences, different web browsers, the type
of device being used to view the content (a desktop computer or mobile Internet
device), the geographic location of the user and many other variables.
Site-wide consistency
When CSS is used effectively, in
terms of inheritance and "cascading," a global style sheet can be
used to affect and style elements site-wide. If the situation arises that the
styling of the elements should need to be changed or adjusted, these changes
can be made by editing rules in the global style sheet. Before CSS, this sort
of maintenance was more difficult, expensive and time-consuming.
Bandwidth
A stylesheet, internal or
external, will specify the style once for a range of HTML elements selected by
class
, type or relationship
to others. This is much more efficient than repeating style information inline
for each occurrence of the element. An external stylesheet is usually stored in
the browser
cache, and can therefore be used on multiple pages without being reloaded,
further reducing data transfer over a network.
Page reformatting
With a simple change of one line,
a different style sheet can be used for the same page. This has advantages for
accessibility, as well as providing the ability to tailor a page or site to
different target devices. Furthermore, devices not able to understand the
styling still display the content.
Accessibility
Without CSS, web designers must
typically lay out their pages with techniques that hinder accessibility for
vision-impaired users, like HTML.
CSS frameworks
CSS frameworks are pre-prepared libraries that are meant to allow for easier, more standards-compliant styling of web pages using the Cascading Style Sheets language. Layout-grid-related CSS frameworks include Blueprint, 960 grid, and YUI CSS grids. Like programming and scripting language libraries, CSS frameworks are usually incorporated as external .css sheets referenced in the HTML
<head>
. They provide a number of
ready-made options for designing and laying out the web page. While many of
these frameworks have been published, some authors use them mostly for rapid
prototyping, or for learning from, and prefer to 'handcraft' CSS that is
appropriate to each published site without the design, maintenance and download
overhead of having many unused features in the site's styling.Positioning
CSS 2.1 defines three positioning schemes:
Normal flow
Inline items are laid out
in the same way as the letters in words in text, one after the other across the
available space until there is no more room, then starting a new line below. Block
items stack vertically, like paragraphs and like the items in a bulleted list.
Normal flow also includes relative positioning of block or inline items, and
run-in boxes.
Floats
A floated item is taken out of
the normal flow and shifted to the left or right as far as possible in the
space available. Other content then flows alongside the floated item.
Absolute positioning
An absolutely positioned item has
no place in, and no effect on, the normal flow of other items. It occupies its
assigned position in its container independently of other items.
Position: top, bottom, left, and right
There are four possible values of the
position
property. If an item is positioned in any way other than static
, then the further properties top
, bottom
,
left
, and right
are used to specify offsets and
positions.
Static
The default value places the item
in the normal flow
Relative
The item is placed in the normal
flow, and then shifted or offset from that position. Subsequent flow items
are laid out as if the item had not been moved.
Absolute
Specifies absolute positioning
Fixed
The item is absolutely
positioned in a fixed position on the screen even as the rest of the
document is scrolled
Float and clear
The
float
property may
have one of three values. Absolutely positioned or fixed items
cannot be floated. Other elements normally flow around floated items, unless
they are prevented from doing so by their clear
property.
left
Floats to the left of the
line that it would have appeared in; other items may flow around its right side
right
Floats to the right of the
line that it would have appeared in; other items may flow around its left side
clear
Removes the float property
from an item. It can be
clear:left
;,
clear:right;
or clear:both;
.
0 comments:
Post a Comment