HTML5 Migration
Migration from HTML4 to HTML5
This chapter is entirely about how to migrate from a typical HTML4 page to a typical HTML5 page.
This chapter demonstrates how to convert an HTML4 page into an HTML5 page, without destroying anything of the original content or structure.
|  | You can migrate to HTML5 from HTML4 or XHTML, using the same recipe.. | 
|---|
| Typical HTML4 | Typical HTML5 | 
|---|---|
| <div id="header"> | <header> | 
| <div id="menu"> | <nav> | 
| <div id="content"> | <section> | 
| <div id="post"> | <article> | 
| <div id="footer"> | <footer> | 
A Typical HTML4 Page
Example
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
 "http://www.w3.org/TR/html4/loose.dtd">
<html lang="en">
<head>
<meta 
 http-equiv="Content-Type" content="text/html;charset=utf-8">
 <title>HTML4</title>
<style>
  body 
 {font-family:Verdana,sans-serif;font-size:0.8em;}
  
 div#header,div#footer,div#content,div#post 
  {border:1px solid 
 grey;margin:5px;margin-bottom:15px;padding:8px;background-color:white;}
  
 div#header,div#footer {color:white;background-color:#444;margin-bottom:5px;}
  
 div#content {background-color:#ddd;}
  div#menu ul 
 {margin:0;padding:0;}
  div#menu ul li {display:inline; margin:5px;}
 </style>
</head>
<body>
<div id="header">
  <h1>Monday 
 Times</h1>
</div>
<div id="menu">
  <ul>
    
 <li>News</li>
    <li>Sports</li>
    
 <li>Weather</li>
  </ul>
</div>
<div id="content">
 <h2>News Section</h2>
<div id="post">
  <h2>News Article</h2>
  
 <p>Ipsum lurum hurum turum ipsum lurum hurum turum ipsum lurum hurum turum 
 ipsum 
  lurum hurum turum.</p>
  <p>Ipsum lurum hurum turum 
 ipsum lurum hurum turum ipsum lurum hurum turum ipsum 
  lurum hurum 
 turum.</p>
</div>
<div id="post">
  <h2>News 
 Article</h2>
  <p>Ipsum lurum hurum turum ipsum lurum hurum turum ipsum 
 lurum hurum turum ipsum 
  lurum hurum turum.</p>
  <p>Ipsum 
 lurum hurum turum ipsum lurum hurum turum ipsum lurum hurum turum ipsum 
  
 lurum hurum turum.</p>
</div>
</div>
<div id="footer">
  
 <p>&copy; 2014 Monday Times. All rights reserved.</p>
</div>
 </body>
</html>
Try it Yourself »
Change to HTML5 Doctype
Change the doctype, from the HTML4 doctype:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
"http://www.w3.org/TR/html4/loose.dtd">
to the HTML5 doctype:
Change to HTML5 Encoding
Change the encoding information, from HTML4:
	<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
to HTML5:
Add The Shiv
HTML5 semantic elements are supported in all modern browsers.
In addition, you can "teach" older browsers how to handle "unknown elements".
Add the shiv for Internet Explorer support:
Example
	<!--[if lt IE 9]>
	 
	<script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
	<![endif]-->
Try it Yourself »
|  | Read about the shiv in HTML5 Browser Support. | 
|---|
Add CSS for HTML5 Semantic Elements
Look at your existing CSS styles:
	div#header,div#footer,div#content,div#post {
    border:1px solid 
 grey;margin:5px;margin-bottom:15px;padding:8px;background-color:white;
}
div#header,div#footer {
    color:white;background-color:#444;margin-bottom:5px;
}
div#content {
    background-color:#ddd;
}
div#menu ul 
 {
    margin:0;padding:0;
}
div#menu ul li {
    display:inline; margin:5px;
}
Duplicate with equal CSS styles for HTML5 semantic elements:
Example
	header,footer,section,article {
    border:1px solid 
 grey;margin:5px;margin-bottom:15px;padding:8px;background-color:white;
}
header,footer {
    color:white;background-color:#444;margin-bottom:5px;
}
    section {
    background-color:#ddd;
}
nav ul  
 {
    margin:0;padding:0;
}
nav ul li {
    display:inline; margin:5px;
}
Try it Yourself »
Change to HTML5 <header> and <footer>
Change the <div> elements with id="header" and id="footer":
	<div 
	id="header">
  <h1>Monday Times</h1>
</div>
	.
.
.
<div 
	id="footer">
  <p>&copy; 2014 W3Schools. All rights reserved.</p>
	</div>
to HTML5 semantic <header> and <footer> elements:
Example
	<header>
  <h1>Monday Times</h1>
</header>
.
.
.
	<footer>
  <p>© 2014 W3Schools. All rights 
	reserved.</p>
</footer>
Try it Yourself »
Change to HTML5 <nav>
Change the <div> element with id="menu":
	<div id="menu">
	 
	<ul>
    <li>News</li>
	   
	<li>Sports</li>
    <li>Weather</li>
  </ul>
</div>
to an HTML5 semantic <nav> element:
Change to HTML5 <section>
Change the <div> element with id="content":
	<div id="content">
.
.
.
</div>
to an HTML5 semantic <section> element:
Change to HTML5 <article>
Change all <div> element with class="post":
	<div class="post">
  
    <h2>News Article</h2>
  <p>Ipsum lurum hurum turum ipsum lurum hurum 
    turum ipsum lurum hurum turum ipsum 
  lurum hurum turum.</p>
</div>
to HTML5 semantic <article> elements:
Example
	<article>
  <h2>News Article</h2>
  <p>Ipsum 
    lurum hurum turum ipsum lurum hurum turum ipsum lurum hurum turum ipsum 
  
    lurum hurum turum.</p>
</article>
Try it Yourself »
Remove these "no longer needed" <style> elements:
Example
	div#header,div#footer,div#content,div#post {
    border:1px solid 
 grey;margin:5px;margin-bottom:15px;padding:8px;background-color:white;
}
div#header,div#footer {
    color:white;background-color:#444;margin-bottom:5px;
}
div#content {
    background-color:#ddd;
}
div#menu ul 
 {
    margin:0;padding:0;
}
div#menu ul li {
    display:inline; margin:5px;
}
Try it Yourself »
A Typical HTML5 Page
Finally you can remove the <head> tags. They are not needed in HTML5:
Example
 <!DOCTYPE html>
<html lang="en">
<title>HTML5</title>
 <meta charset="utf-8">
<!--[if lt IE 9]>
<script src="http://html5shiv.googlecode.com/svn/trunk/html5.js">
 </script>
<![endif]-->
<style>
body {
    
 font-family:Verdana,sans-serif;font-size:0.8em;
}
 header,footer,section,article {
    border:1px solid grey;
    
 margin:5px;margin-bottom:15px;padding:8px;
    background-color:white;
}
 header,footer {
    color:white;background-color:#444;margin-bottom:5px;
}
 section {
    background-color:#ddd;
}
nav ul {
    margin:0;padding:0;
 }
nav ul li {
    display:inline; margin:5px;
}
</style>
<body>
<header>
  <h1>Monday Times</h1>
</header>
<nav>
  <ul>
    
 <li>News</li>
    <li>Sports</li>
    <li>Weather</li>
  </ul>
</nav>
 <section>
<h2>News Section</h2>
<article>
  <h2>News 
 Article</h2>
  <p>Ipsum lurum hurum turum ipsum lurum hurum turum ipsum lurum 
 hurum turum ipsum 
  lurum hurum turum.</p>
  <p>Ipsum lurum hurum turum 
 ipsum lurum hurum turum ipsum lurum hurum turum ipsum 
  lurum hurum turum.</p>
  
 <p>Ipsum lurum hurum turum ipsum lurum hurum turum ipsum lurum hurum turum 
 ipsum 
  lurum hurum turum.</p>
</article>
<article>
<h2>News 
 Article</h2>
  <p>Ipsum lurum hurum turum ipsum lurum hurum turum ipsum lurum 
 hurum turum ipsum 
  lurum hurum turum.</p>
  <p>Ipsum lurum hurum turum 
 ipsum lurum hurum turum ipsum lurum hurum turum ipsum 
  lurum hurum turum.</p>
  
 <p>Ipsum lurum hurum turum ipsum lurum hurum turum ipsum lurum hurum turum 
 ipsum 
  lurum hurum turum.</p>
</article>
</section>
<footer>
  
 <p>&copy; 2014 Monday Times. All rights reserved.</p>
</footer>
</body>
</html>
Try it Yourself »
The Difference Between <article> <section> and <div>
There is a confusing (lack of) difference in the HTML5 standard, between <article> <section> and <div>.
In the HTML5 standard, the <section> element is defined as a block of related elements.
The <article> element is defined as a complete, self-contained block of related elements.
The <div> element is defined as a block of children elements.
How to interpret that?
In the example above, we have used <section> as a container for related <articles>.
But, we could have used <article> as a container for articles as well.
Here are some different examples:
<article> in <article>:
		<article>
	<h2>Famous 
	Cities</h2>
<article>
<h2>London</h2>
<p>London is the capital 
	city of England. It is the most populous city in the United Kingdom,
with 
	a metropolitan area of over 13 million inhabitants.</p>
</article>
	
<article>
<h2>Paris</h2>
<p>Paris is the capital and most populous 
	city of France.</p>
</article>
<article>
<h2>Tokyo</h2>
	<p>Tokyo is the capital of Japan, the center of the Greater Tokyo Area,
	and the most populous metropolitan area in the world.</p>
</article>
	
</article>
Try it Yourself »
<div> in <article>:
	<article>
<h2>Famous 
	Cities</h2>
<div class="city">
<h2>London</h2>
<p>London is the capital 
	city of England. It is the most populous city in the United Kingdom,
with 
	a metropolitan area of over 13 million inhabitants.</p>
</div>
	
<div class="city">
<h2>Paris</h2>
<p>Paris is the capital and most populous 
	city of France.</p>
</div>
<div class="city">
<h2>Tokyo</h2>
	<p>Tokyo is the capital of Japan, the center of the Greater Tokyo Area,
	and the most populous metropolitan area in the world.</p>
</div>
	</article>
Try it Yourself »
<div> in <section> in <article>:
	<article>
<section>
<h2>Famous Cities</h2>
<div 
	class="city">
	<h2>London</h2>
<p>London is the capital city of England. It is the most 
	populous city in the United Kingdom,
with a metropolitan area of over 13 
	million inhabitants.</p>
</div>
<div class="city">
	<h2>Paris</h2>
<p>Paris is the capital and most populous city of 
	France.</p>
</div>
<div class="city">
<h2>Tokyo</h2>
	<p>Tokyo is the capital of Japan, the center of the Greater Tokyo Area,
	and the most populous metropolitan area in the world.</p>
</div>
	</section>
<section>
<h2>Famous Countries</h2>
<div 
	class="country">
<h2>England</h2>
<p>London is the capital city of 
	England. It is the most populous city in the United Kingdom,
with a 
	metropolitan area of over 13 million inhabitants.</p>
</div>
<div 
	class="country">
<h2>France</h2>
<p>Paris is the capital and most 
	populous city of France.</p>
</div>
<div class="country">
	<h2>Japan</h2>
<p>Tokyo is the capital of Japan, the center of the 
	Greater Tokyo Area,
and the most populous metropolitan area in the 
	world.</p>
</div>
</section>
</article>
Try it Yourself »

