The Ultimate Guide To Master HTML - CSS
The Ultimate Guide To Master HTML - CSS
Noob to Pro.
ABOUT THE BOOK
This book will teach you all you need to know about HTML and CSS in order to land
your first job as a freelancer or as a Fresher in any tech business.
Some of these techniques may be familiar to you, which is fantastic! However, if you
want to try something different, I'd like to make the process as simple as possible for
you. You can start reading any chapter you like because this book includes unique
chapters that allow you to read what you want without having to read the book in
order.
NOTE: Do not speed through this book in the hopes of learning everything in one
sitting. Please take one step at a time when reading this book because it has several
different approaches to learning CSS. My advice is to study one chapter and then
begin practicing by making projects.
Dedicated to all new developers looking for their first job, as well as to my
whole Twitter family
Table of Contents
Chapter 2 - Styling
your Webpage
HTML stands for Hyper Text Markup Language, which is the most widely used language
on Web to develop web pages. HTML was created by Berners-Lee in late 1991 but "HTML
2.0" was the first standard HTML specification which was published in 1995. HTML 4.01
was a major version of HTML and it was published in late 1999. Though HTML 4.01
version is widely used but currently we are having HTML-5 version which is an extension
to HTML 4.01.
Originally, HTML was developed with the intent of defining the structure of documents
like headings, paragraphs, lists, and so forth to facilitate the sharing of scientific
information between researchers. Now, HTML is being widely used to format web pages
with the help of different tags available in HTML language.
Hypertext refers to the way in which Web pages (HTML documents) are linked
together. Thus, the link available on a webpage is called Hypertext.
As its name suggests, HTML is a Markup Language which means you use HTML to
simply "mark-up" a text document with tags that tell a Web browser how to structure
it to display.
3 / 85
THE ULTIMATE GUIDE TO MASTER HTML AND CSS
BY ABEL
4 / 85
<!DOCTYPE html>
<html>
<head>
<title>My First HTML Page</title>
</head>
<body>
<h1>My First Web Page</h1>
</body>
</html>
(i)
If you want to run your application on the Internet and share the URL with your partner
follow these steps
Go to Netlify Drop
5 / 85
Drop the folder that contains your HTML and CSS file (if you have one) on that page where it says
Drag and drop your site folder here
And Voila! It should create a unique URL that you can simply share with your partner
No, browser will not be able to identify that it’s a HTML document and HTML 5 tags will
not function properly.
Modern browsers are clever enough to render the HTML content, but it may not be
optimized correctly.
By Traversy Media
https://www.youtube.com/watch?
v=UB1O30fR-EE
https://www.youtube.com/watch?
v=qz0aGYrrlhU
You can also check out these Youtube Courses which can help those
who like learning from videos
6 / 85
THE ULTIMATE GUIDE TO MASTER HTML AND CSS
BY ABEL
DOM
Document object model
NOTE: If we put something after </body> end tag, then that is automatically moved inside
the body, at the end, as the HTML spec requires that all content must be inside <body>.
7 / 85
NOTE: Modern browsers are smart. If the browser encounters malformed HTML, it
automatically corrects it when making the DOM. For ex: browser will auto insert <html> tag at
the top is not provided.
Section
Group content with related single theme
Like a subsection of long article
Normally has heading and footer
<section>
</section>
8 / 85
THE ULTIMATE GUIDE TO MASTER HTML AND CSS
BY ABEL
Article
<article>
<h2>Subtitle</h2>
<p>My long paragraph</p>
</article>
Div
Does not convey any meaning
Its often called element of last resort
Use it when no other element is
suitable
<div>
<h2>Subtitle</h2>
<p>My long paragraph</p>
</div>
9 / 85
THE ULTIMATE GUIDE TO MASTER HTML AND CSS
BY ABEL
HEAD TAG
LINK TAG
TITLE TAG
ARTICLE TAG
<article class="review">
<p>I love this tool.</p>
<footer>
<p> Posted on <time datetime="2016-05-16 19:00">May 16</time>
by Matt.
</p>
</footer>
</article>
H1 TO H6 TAG
Headings
Heading tags are part of semantic HTML
They are used to define headings
They go from h1 to h6
Size is largest for h1 by default and smallest for h6 by default
11 / 85
Paragraph
p element is used for writing a paragraph of texts in HTML
You can include p inside other elements like , div, section, article
TIP: don't add extra white spaces - the browser will remove any extra spaces and extra lines
when the page is displayed. Use other HTML and CSS properties to add white spaces as per
your requirements.
<div>
<p style="font-size:12px;">This is a paragraph.</p>
</div>
<a href="https://www.google.com">Google</a>
12 / 85
Images
HTML allows you to add images on your website
src attribute is where you specify the location of your
image
1. It can be an image from the internet
2. Or from your local machine
<img src="https://via.placeholder.com/150">
Image Sizes
You can size your image using width and height property or the style property
height="150">
<img src="https://via.placeholder.com/150" alt="placeholder"
style="width:150px; height:150px;">
Image as links
You can make image clickable using anchor tags around them
This can be used to navigate to another place by clicking on the
image
<a href="https://www.google.com">
<img src="https://via.placeholder.com/150" alt="placeholder" width="150"
height="150">
</a>
13 / 85
Chapter 2 - Styling your Webpage
CSS Introduction
What is CSS?
Advantages of CSS
CSS saves time − You can write CSS once and then reuse same sheet in
multiple HTML pages. You can define a style for each HTML element and
apply it to as many Web pages as you want.
Pages load faster − If you are using CSS, you do not need to write HTML tag
attributes every time. Just write one CSS rule of a tag and apply it to all the
occurrences of that tag. So less code means faster download times.
Easy maintenance − To make a global change, simply change the style, and
all elements in all the web pages will be updated automatically.
Superior styles to HTML − CSS has a much wider array of attributes than
HTML, so you can give a far better look to your HTML page in comparison to
HTML attributes.
Global web standards − Now HTML attributes are being deprecated and it is
being recommended to use CSS. So its a good idea to start using CSS in all
the HTML pages to make them compatible to future browsers.
14 / 85
THE ULTIMATE GUIDE TO MASTER HTML AND CSS
BY ABEL
Create style.css file inside app folder that you created above when
creating your first HTML page
Your styles will go in this style.css file
You have to use the link tag to include your style file inside your HTML file
<head>
<meta charset="utf-8" />
<title>Valentine Gift</title>
15 / 85
Now let's create the body of your Valentine's Day card
Replace the body tag in your index.html file to match the following code
You are adding card DIV which will be the container of your greeting card. We will add
the styles later.
Inside the card DIV add two H1 tags
These are your heading messages
H1 are the biggest headings available
You can also change the font-size as per your need
We also assigned appropriate classes to our HTML so that we can style them later
You will learn about classes later
<body>
<div class="card">
<h1 class="quote">You're the CSS to my HTML</h1>
<h1 class="message">Happy Valentine's Day</h1>
</div>
</body>
16 / 85
.card {
17 / 85
THE ULTIMATE GUIDE TO MASTER HTML AND CSS
BY ABEL
Selectors
In layman terms selectors are used to grab a DOM element to apply styles to it
There are different types of selectors you will learn below
.class
.myClass {
background-color: yellow;
}
18 / 85
THE ULTIMATE GUIDE TO MASTER HTML AND CSS
BY ABEL
child .class
You can target child element using a class hierarchy
// syntax
.parent .child {
background-color: yellow;
}
You have to write parent class name followed by a space, and then followed by the
child's class name
Below example will add background-color: yellow to the paragraph
<div class="parent">
<p class="child">This is a paragraph</p>
</div>
.parent .child {
background-color: yellow;
}
19 / 85
THE ULTIMATE GUIDE TO MASTER HTML AND CSS
BY ABEL
#id
Style the element with given id attribute
In below example myParagraph is the id of the paragraph
We select the elements by adding # followed by the id attribute of the
element
#myParagraph {
background-color: yellow;
}
element tag
You can directly select an element by its tag name and apply the styles
In this case you don't have to mention id or the class - simply write the element name in your
styles and add properties to it
Below example will grab all the p elements and apply the style to it
<p>This is a paragraph</p>
p{
background-color: yellow;
20 / 85
}
Mix n match
Above mentioned selectors are basic and most common ways to select elements and
apply the styles
You can also mix and match any of the above selectors to apply the styles
Id and Class
#myParagraph.myClass {
background-color: yellow;
}
21 / 85
p.myClass {
background-color: yellow;
}
22 / 85
Advanced Selectors
adjacent selector
<ul></ul>
<p></p>
ul + p {
color: red;
}
attributes selector
Will only select the anchor tags that have a title attribute
a[title] {
color: green;
}
23 / 85
Will style all anchor tags which link to http://google.com
a[href="http:/?google.com"] {
color: #1f6053; /* google green */
}
Star designates that the proceeding value must appear somewhere in the attribute's value
This covers google.com.
a[href*="in"] {
color: #1f6053; /* google green */
}
[title~="cat"] {
border: 5px solid yellow;
}
selected
<img src="cat2.gif" title="catssss" width="224" height="162"> // NOT
selected
<img src="dog.gif" title="dog" width="200" height="358"> // NOT selected
24 / 85
[title*="cat"] {
border: 5px solid yellow;
}
selected
<img src="cat2.gif" title="catssss" width="224" height="162"> // selected
[title|="cat"] {
border: 5px solid yellow;
}
selected
<img src="cat2.gif" title="cat" width="224" height="162"> // selected
[title^="ca"] {
border: 5px solid yellow;
}
selected
<img src="cat2.gif" title="cat" width="224" height="162"> // selected
25 / 85
Attribute "ends with" value
The value DOEST NOT have to be a whole word
[title$="at"] {
border: 5px solid yellow;
}
NOT selected
<img src="cat2.gif" title="cat" width="224" height="162"> // selected
26 / 85
Backgrounds
background-color
background-image
background-position
background-size
background-repeat
background-origin
background-clip
background-attachment
body {
background: lightblue url("myImage.png") no-repeat center;
}
27 / 85
Colors
h1 {
color: red;
}
h1.myClass {
color: #02af00;
}
h1#myId {
color: rgb(111,111,111);
}
Borders
border-width
border-style (required)
border-color
In below example
28 / 85
5px
is the border width
solid is the border style
Other examples are dotted, double, dashed
red is the border-color
You can specify colors by its name, it's hex value or its RGB value
h1 {
border: 5px solid red;
}
Shapes
In the above illustration we have a square on the left and circle on the right
29 / 85
If you provide border-radius of 50% it will turn your square into a circle
.square {
border-radius: none;
}
.circle {
border-radius: 50%;
}
Shorthand
30 / 85
<div class="card one">
<h1 class="">One</h1>
</div>
<div class="card two">
<h1 class="">Two</h1>
</div>
<div class="card three">
<h1 class="">Three</h1>
</div>
<div class="card four">
31 / 85
<h1 class="">Four</h1>
</div>
// all 4 corners
.one {
border-radius: 50%;
}
.three {
border-radius: 10% 20% 30%;
}
.four {
border-radius: 10% 20% 30% 40%;
}
.card {
border: 10px solid #E53038;
height: 100px;
width: 100px;
padding: 20px;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
margin-bottom: 20px;
}
32 / 85
Circle and leaf
Circle
.circle {
border-radius: 50%;
}
Leaf
.leaf {
border-radius: 5px 20px 5px;
}
33 / 85
THE ULTIMATE GUIDE TO MASTER HTML AND CSS
} BY ABEL
https://www.youtube.com/watch?v=UB1O30fR-EE
https://www.youtube.com/watch?v=yfoY53QXEnI
34 / 85
THE ULTIMATE GUIDE TO MASTER HTML AND CSS
BY ABEL
Box model
div {
width: 320px;
padding: 10px;
35 / 85
border: 5px solid gray;
margin: 0;
}
320px (width)
Total element width = width + left padding + right padding + left border +
Total element height = height + top padding + bottom padding + top border
36 / 85
Margins
Margins are used to create space around elements - outside its border
<div>
<p class="myParagraph">My Paragraph</p>
</div>
// styles
.myParagraph {
margin: 20px;
}
margin: 20px; gives the p element margin of 20px around it from all the sides
You can also give margin to the elements on any particular side if
you'd want
margin-top
margin-right
margin-bottom
margin-left
37 / 85
Margin Shorthands
This shortcut can be used to give margin on all the sides
p{
margin: 20px;
}
p{
margin: 20px 40px;
}
p{
margin: 20px 40px 50px;
}
38 / 85
Auto Margin
auto value of margin sets the element horizontally center within its container
Below div will take 200px width and remaining space will be split equally between left and right
margin
div {
width: 200px
margin: auto;
}
Paddings
Paddings are used to generate space around the given element's content -
inside its border
<div class="myDiv">
<p>My Paragraph</p>
</div>
// styles
.myDiv {
padding: 20px;
}
39 / 85
Padding On Individual Sides
You can also give padding to the elements on any particular side if you'd want
padding-top
padding-right
padding-bottom
padding-left
Padding Shorthands
div {
padding: 20px;
}
div {
padding: 20px 40px;
}
40 / 85
The below example give padding
20px top
And give padding 40px left and right
div {
padding: 20px 40px 50px;
}
41 / 85
Display
Block
Inline
42 / 85
Inline-block
None
Visibility Hidden
div {
visibility: hidden;
}
43 / 85
Flex
Flex property gives ability to alter its item's width/height to best fill the available space
It is used to accommodate all kind of display devices and screen sizes
Fills available space
Or shrink to prevent over flow
44 / 85
Positions
Static
45 / 85
Relative
The element is relative to itself
Check out the example below
<div class=myDiv""></div>
.myDiv{
position: relative;
top: 10px;
left: 10px;
}
Now, it will slide down and to the left by 10px from where it would
normally be
Please refer the illustration above
Without that "top" property - it would have just followed position:
static
Absolute
<div class=myDiv""></div>
.myDiv{
position: absolute;
top: 10px;
46 / 85
left: 10px;
}
The above div will slide down and to the left by 10px from its parent
Assuming the parent is either absolute or relative positioned
Fixed
<div class=myDiv""></div>
.myDiv{
position: fixed;
}
47 / 85
Centering:
<div class="card">
<h2 class="">long paragraph</h2>
<p class="">headline</p>
</div>
P { text-align: center }
H2 { text-align: center }
48 / 85
<div class="card">
<p class="blocktext">
headline
</p>
<img src="https://via.placeholder.com/150" />
</div>
P.blocktext {
margin-left: auto;
margin-right: auto;
width: 50px;
}
IMG {
display: block;
margin-left: auto;
margin-right: auto;
}
.card {
border: 10px solid green;
height: 200px;
width: 200px;
padding: 20px;
}
49 / 85
Centering Vertically
<div class="container">
<p>This paragraph…</p>
</div>
div.container {
height: 10em;
position: relative;
border: 2px solid blue;
}
div.container p {
margin: 0;
position: absolute;
50 / 85
top: 50%; - 50% here means 50% of the height of the container
transform: translate(0, -50%);
this will move the element up by half its own height.
50% in translate(0, -50%) refers to the height of the element itself
51 / 85
CSS Float
<p>
my long text here...
<img class="myImage1" src="myImage1.jpg" alt="myImage1">
</p>
<p>
my long text here...
<img class="myImage2" src="myImage2.jpg" alt="myImage2">
</p>
.myImage1 {
float: left;
52 / 85
}
.myImage2 {
float: right;
}
Please refer the above code and the illustration to get better visualization
We have de ned two p tags and an img tag inside each paragraph elements
We then set float: left; on myImage1
This pushes the image to the left and text to the right
And set float: right; on myImage2
This pushes the image to the right and text to the left
Clearing Floats
Problem1:
============
| LHS | RHS|
| |=====
| |
=======
53 / 85
problem2 :
parent collapses when children are oated
===========
parent
===========
============
| LHS | RHS|
| | |
============
<div class="parent">
<div class="lhs" >
// float left
</div>
<div class="rhs">
// float left
</div>
</div>
// Fix:
==================
parent
============
| LHS | RHS|
| | |
============
===================
<div class="parent">
<div class="lhs" >
// float left
</div>
<div class="rhs">
// float left
</div>
<div style="clear:both"></div>
</div>
54 / 85
Methods to clear float:
clear
takes in 3 values. left, right or both
used for problem 1
overflow:hidden
great for ensuring parent does not collapse
55 / 85
THE ULTIMATE GUIDE TO MASTER HTML AND CSS
BY ABEL
Semantic HTML?
It is a coding style
Semantic elements == elements with a meaning
Good for SEO
Good for accessibility
Especially for visually impaired people
Which rely on browser speech, screen readers to interpret page content clearly
<b></b> for bold, and <i></i> for italic should not be used
They are just formatting
They do not provide indication of meaning and structure
Use <strong></strong> and <em></em>
Provide meaning ---> emphasis for example
Non-semantic elements: <div> and <span> - Tells nothing about its content
Semantic elements: <form>, <table>, and <article> - Clearly defnes its content
HTML
HTML 5
57 / 85
Below are new semantic elements
<summary>
- <header>, <footer>, <hgroup>, <nav>, <progress>, <section>, <time>
58 / 85
What is HTML5 Web Storage?
localStorage:
// Store
localStorage.setItem("lastname", "Smith");
// Retrieve
document.getElementById("result").innerHTML =
localStorage.getItem("lastname");
59 / 85
sessionStorage:
Stores the data for only one session
if (sessionStorage.clickcount) {
sessionStorage.clickcount = Number(sessionStorage.clickcount) + 1;
} else {
sessionStorage.clickcount = 1;
}
"+
sessionStorage.clickcount + " time(s) in this session.";
60 / 85
THE ULTIMATE GUIDE TO MASTER HTML AND CSS
BY ABEL
Flexbox
It provides effcient way to lay out, align and distribute space among items in a container
The main idea - give the container the ability to alter its items' width/height (and order) to best ll
the available space
display: flex
de nes a ex container
flex-direction: row | row-reverse | column | column-reverse;
establishes main axis
de nes the direction of children placement
flex-wrap: nowrap | wrap | wrap-reverse;
allow items to wrap or nowrap as needed
justify-content
de nes the alignment along the main axis
61 / 85
Flex box item properties
Flexbox Examples
This is the boilerplate code we will use to demonstrate how flex box works
<div class="flex-container">
<div class="flex-item">1</div>
<div class="flex-item">2</div>
<div class="flex-item">3</div>
<div class="flex-item">4</div>
<div class="flex-item">5</div>
<div class="flex-item">6</div>
</div>
.flex-container {
display: flex;
62 / 85
padding: 20px;
margin: 0;
list-style: none;
background: orange;
}
.flex-item {
background: tomato;
padding: 5px;
width: 200px;
height: 150px;
margin-top: 10px;
line-height: 150px;
color: white;
font-weight: bold;
font-size: 3em;
text-align: center;
}
.flex-container {
display: flex;
flex-direction: column;
}
63 / 85
.flex-container {
display: flex;
flex-direction: column-reverse;
}
.flex-container {
display: flex;
flex-direction: row;
justify-content: center;
}
64 / 85
.flex-container {
display: flex;
flex-direction: row;
justify-content: space-between;
}
<div class="flex-container">
<div class="flex-item second">1</div>
<div class="flex-item first">2</div>
<div class="flex-item third">3</div>
</div>
.first {
order: 1;
}
.second {
order: 2;
}
.third {
order: 3;
}
65 / 85
<div class="flex-container">
<div class="flex-item second">1</div>
<div class="flex-item first">2</div>
<div class="flex-item third">3</div>
</div>
.first {
flex-grow: 1;
}
.second {
flex-grow: 2;
}
.third {
flex-grow: 3;
}
<div class="flex-container">
<div class="flex-item second">1</div>
<div class="flex-item first">2</div>
<div class="flex-item third">3</div>
</div>
.first {
flex-basis: 500px;
}
66 / 85
CSS Cheat Sheet for Flexbox and Grid
67 / 85
Media queries
Media queries allow you to target any platform you desire and write specific styles for that
platform
This is how you write responsive styles
Different styles for desktops vs tablets vs mobiles
Simple example below
// If the browser window is smaller than 500px, the background color will
change to lightblue:
/* Landscape tablets */
@media only screen and (min-width: 768px) {
/* Laptops/desktops */
@media only screen and (min-width: 992px) {
.mobile-styles {
width: 100%;
}
69 / 85
/* Style For desktop: */
.desktop-styles {
width: 100%;
}
}
70 / 85
Let's talk about the sizes - px vs em vs rem
If you’re setting all of your font-sizes, element sizes and spacing in pixels, you’re not treating the
end user with respect.
Users will have to zoom in and out with ctrl plus +/- depending on the device they are on
REMs are a way of setting font-sizes based on the font-size of the root HTML element
Allows you to quickly scale an entire project by changing the root font-size
Both pixels and REMs for media queries fail in various browsers when using browser zoom, and
EMs are the best option we have.
More on rem vs em
71 / 85
em is relative to the font size of its direct or nearest parent
em are encouraged to be used for media queries
Cheat Sheet :
For tablet
@media only screen and (min-width: 768px) and (max-
width: 979px) {
//CSS Code
}
72 / 85
CSS Grids
Flexbox
Flexbox is 1 dimension
Its either columns OR rows
Complext 2-dimensional layouts not possible
Grids
Example
73 / 85
Second column -> 30% of the space
grid-template-columns: 70% 30%; defines these two column
<div class="wrapper">
// first row
<div>70%</div>
<div>30%</div>
.wrapper {
display: grid;
Example #2 - Gaps
grid-gap - used to give margin between rows and columns using single
command
74 / 85
.wrapper {
display: grid;
grid-template-columns: 40% 30% 30%; // 3 columns in 1 row
grid-column-gap: 1em; // margin between columns
grid-row-gap: 1em; // margin between row
grid-gap; 1em; // row and column both!!!
}
Example #3 - Fractions
3 DIVS
Total space will be divided by 4
ex: 80 / 4 = 20px
1st and 3rd DIV will take 20px space
2nd DIV will take 40px space
75 / 85
Example #4 - Fractions Contd.
You can use repeat() function instead of manually repeating the column sizes
.wrapper {
display: grid;
// 3 columns in 1 row
// divide into fractions...
grid-template-columns: 1fr 2fr 1fr;
76 / 85
}
Nested grids
<div class="wrapper">
<div class="nested">
<div></div>
<div></div>
<div></div>
</div>
</div>
77 / 85
Start-End points of Grid
We can also specify start and end points of the grid columns and rows
.box1 {
grid-column: 1/3; // box1 spans from 1 to 3 columns on browser window
grid-row: 1/3; // box1 spans from 1 to 3 rows on browser window
}
.box2 {
grid-column: 3; // box2 spans takes spaces 3 and 4
grid-row: 1/3; // same as box1
}
.box3 {
grid-column: 2/4; // box3 will take space 2 to 4
grid-row: 3; // it will take row space 3
}
78 / 85
THE ULTIMATE GUIDE TO MASTER HTML AND CSS
BY ABEL
FOUC
1.
2.
79 / 85
<html>
<head>
<!— Other stuff like title and meta tags go here -->
<style type="text/css">
.hidden {display:none;}
</style>
<script type="text/javascript" src="/scripts/jquery.js"></script>
<script type="text/javascript">
$('html').addClass('hidden');
$(document).ready(function() { // EDIT: From Adam Zerner's
comment below: Rather use load: $(window).on('load', function () {...});
$('html').show(); // EDIT: Can also use
$('html').removeClass('hidden');
});
</script>
</head>
<body>
<!— Body Content -->
</body>
</html>
80 / 85
BEM naming convention
<ul class="nav">
81 / 85
<li class="nav__item">Home</li>
<li class="nav__item nav__item—-active">About</li> // active modifier
applied
</ul>
// basic example
.global {
width: 980px;
margin: 0 auto;
padding-left: 20px;
padding-right: 20px;
}
.header {
height: 260px;
}
.main {
background-color: gray;
}
.footer {
height: 100px;
background-color: blue;
}
82 / 85
<header>
<div class="header global">
// your code
</div>
</header>
<footer>
<div class="footer global">
// your code
</div>
</footer>
83 / 85
Normalizing CSS
Reset CSS
This approach says that we don’t need the browsers’ default styles at all
We’ll define in the project according to our needs
CSS Reset resets all of the styles that come with the browser’s user agent
Grab sample CSS reset here
The problem with CSS Resets is that they are ugly and hard to debug
Solution - use Normalize CSS with little bit of CSS Reset
Unlike an ordinary CSS reset, target specific HTML tags’ styles rather than making a big list
of tags.
Make it less aggressive and a lot more readable
84 / 85
Testing Strategies
Do cross-browser testing
Manually test Chrome, firefox
Then manually test IE, Edge
Then use tools like ..for compatibilities
browsershots.org
IEtest
Conditional CSS
<!—[If IE]>
<link type="text/css" href="IEHacks.css" />
<![endif]-->
<!—[if !IE]>
<link type="text/css" href="NonIEHacks.css" />
<![endif]-->