Tuesday, January 11, 2011

HTML 5 and CSS 3: Example

1. HTML 5


HTML 5 is the next major version of HTML. It introduces a bunch of new elements that will make our pages more semantic. This will make it a lot easier for search engines and screenreaders to navigate our pages, and improve the web experience for everyone. In addition, HTML 5 will also include fancy APIs for drawing graphics on screen, storing data offline, dragging and dropping, and a lot more. Let’s get started marking up the blog page.


2. Basic Structure


Before we begin marking up the page we should get the overall structure straight:



In HTML 5 there are specific tags meant for marking up the header, navigation, sidebar and footer. First, take a look at the markup and I’ll explain afterwards:


It still looks like HTML markup, but there are a few things to note:
  • In HTML 5, there is only one doctype. It is declared in the beginning of the page by <!doctype html>. It simply tells the browser that it’s dealing with an HTML-document.
  • The new tag header is wrapped around introductory elements, such as the page title or a logo. It could also contain a table of contents or a search form. Every header typically contains a heading tag from <h1> to <h6>. In this case the header is used to introduce the whole page, but we’ll use it to introduce a section of the page a little later.
  • The nav-tag is used to contain navigational elements, such as the main navigation on a site or more specialized navigation like next/previous-links.
  • The section-tag is used to denote a section in the document. It can contain all kinds of markup and multiple sections can be nested inside each other.
  • aside is used to wrap around content related to the main content of the page that could still stand on it’s own and make sense. In this case we’re using it for the sidebar.
  • The footer-tag should contain additional information about the main content, such as info about who wrote it, copyright information, links to related documents and so on.

Instead of using divs to contain different sections of the page we are now using appropriate, semantic tags. They will make it a lot easier for search engines and screen readers to figure out what’s what in a page.


3. Marking Up the Navigation


The navigation is marked up exactly like we would do it in HTML 4 or XHTML, using an unordered list. The key is that this list is placed inside the nav-tags.

  1. <nav>  
  2.     <ul>  
  3.         <li><a href="#">Blog</a></li>  
  4.         <li><a href="#">About</a></li>  
  5.         <li><a href="#">Archives</a></li>  
  6.         <li><a href="#">Contact</a></li>  
  7.         <li class="subscribe"><a href="#">Subscribe via. RSS</a></li>  
  8.     </ul>  
  9. </nav> 


4. Marking Up the Introduction


We have already defined a new section in the document using the section tag. Now we just need some content.
  1. <section id="intro">  
  2.     <header>  
  3.         <h2>Do you love flowers as much as we do?</h2>  
  4.     </header>  
  5.     <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut.</p>  
  6. </section> 



5. Marking Up the Main Content Area


Our main content area consists of three sections: the blog post, the comments and the comment form. Using our knowledge about the new structural tags in HTML 5, it should be easy to mark it up.
Marking up the Blog Post

  1. <section>  
  2.     <article class="blogPost">  
  3.         <header>  
  4.             <h2>This is the title of a blog post</h2>  
  5.             <p>Posted on <time datetime="2009-06-29T23:31:45+01:00">June 29th 2009</time> by <a href="#">Mads Kjaer</a> - <a href="#comments">3 comments</a></p>  
  6.         </header>  
  7.         <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin euismod tellus eu orci imperdiet nec rutrum lacus blandit. Cras enim nibh, sodales ultricies elementum vel, fermentum id tellus. Proin metus odio, ultricies eu pharetra dictum, laoreet id odio...</p>  
  8.     </article>  
  9. </section> 

We start a new section and wrap the whole blog post in an article-tag. The article tag is used to denote an independent entry in a blog, discussion, encyclopedia, etc. and is ideal to use here. Since we are viewing the details of a single post we only have one article, but on the front page of the blog we would wrap each post in an article-tag.

The header element is used to present the header and metadata about the blog post. We tell the user when the post was written, who wrote it and how many comments it has. Note that the timestamp is wrapped in a -tag. This tag is also new to HTML 5 and is used to mark up a specific place in time. The contents of the datetime attribute should be:



1. The year followed by a figure dash (a minus sign to you non-typography nerds)
2. The month followed by a figure dash
3. The date
4. A capital T to denote that we are going to specify the local time
5. The local time in the format hh:mm:ss
6. The time zone relative to GMT. I’m in Denmark which is 1 hour after GMT, so I write +01. If you were in Colorado you would be 7 hours behind GMT, and you would write -07.

Marking up the Comments

  1. <section id="comments">  
  2.     <header>  
  3.         <h3>Comments</h3>  
  4.     </header>  
  5.     <article>  
  6.         <header>  
  7.             <a href="#">George Washington</a> on <time datetime="2009-06-29T23:35:20+01:00">June 29th 2009 at 23:35</time>  
  8.         </header>  
  9.         <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut.</p>  
  10.     </article>  
  11.     <article>  
  12.         <header>  
  13.             <a href="#">Benjamin Franklin</a> on <time datetime="2009-06-29T23:40:09+01:00">June 29th 2009 at 23:40</time>  
  14.         </header>  
  15.         <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut.</p>  
  16.     </article>  
  17. </section> 


Marking up the comments is pretty straight-forward. No new tags or attributes are used.


Marking up the Comment Form

Several enhancements to forms have been introduced in HTML 5. You longer have to do client-side validation of required fields, emails, etc. The browser takes care of this for you.


  1. <form action="#" method="post">  
  2.     <h3>Post a comment</h3>  
  3.     <p>  
  4.         <label for="name">Name</label>  
  5.         <input name="name" id="name" type="text" required />  
  6.     </p>  
  7.     <p>  
  8.         <label for="email">E-mail</label>  
  9.         <input name="email" id="email" type="email" required />  
  10.     </p>  
  11.     <p>  
  12.         <label for="website">Website</label>  
  13.         <input name="website" id="website" type="url" />  
  14.     </p>  
  15.     <p>  
  16.         <label for="comment">Comment</label>  
  17.         <textarea name="comment" id="comment" required></textarea>  
  18.     </p>  
  19.     <p><input type="submit" value="Post comment" /></p>  
  20. </form> 

There are new two new types of inputs, email and url. Email specifies that the user should enter a valid E-mail, and url that the user should enter a valid website address. If you write required as an attribute, the user cannot submit an empty field. “Required” is a boolean attribute, new to HTML 5. It just means that the attribute is to be declared without a value.

Marking up the Sidebar and Footer


The markup of the sidebar and footer is extremely simple. A few sections with some content inside the appropriate aside- and footer-tags.

You can view the final, unstyled markup here. Now for the styling.


6. Styling with CSS 3


CSS 3 builds upon the principles about styles, selectors and the cascade that we know so well from earlier versions of CSS. It adds loads of new features, including new selectors, pseudo-classes and properties. Using these new features it becomes a lot easier to set up your layout. Let’s dive in.

Basic Setup

To start off with we are going to define some basic rules concerning typography, background color of the page, etc. You’ll recognize all of this from CSS 2.1

1. /* Makeshift CSS Reset */
2. {
3. margin: 0;
4. padding: 0;
5. }
6.
7. /* Tell the browser to render HTML 5 elements as block */
8. header, footer, aside, nav, article {
9. display: block;
10. }
11.
12. body {
13. margin: 0 auto;
14. width: 940px;
15. font: 13px/22px Helvetica, Arial, sans-serif;
16. background: #f0f0f0;
17. }
18.
19. h2 {
20. font-size: 28px;
21. line-height: 44px;
22. padding: 22px 0;
23. }
24.
25. h3 {
26. font-size: 18px;
27. line-height: 22px;
28. padding: 11px 0;
29. }
30.
31. p {
32. padding-bottom: 22px;
33. }

First we reset margin- and padding-styles with a simple rule. In a production environment I would use a more complete CSS Reset such as Eric Meyer’s (for CSS 2.1) but for the scope of the tutorial this will do.

We then tell the browser to render all the new HTML 5 elements as block. The browsers are fine with elements they don’t recognize (this is why HTML 5 is somewhat backwards compatible), but they don’t know how those elements should be rendered by default. We have to tell them this until the standard is implemented across the board.

Also note how I’ve chosen to size the fonts in pixels instead of ems or %. This is to maintain the progressive nature of the tutorial. When the major browsers one day are completely finished implementing HTML 5 and CSS 3 we will all have access to page zooming instead of just text resizing. This eliminates the need to define sizes in relative units, as the browser will scale the page anyway.

See what the page looks like with the basic styling applied. Now we can move on to styling the rest of the page. No additional styles are required for the header, so we’ll go straight to the navigation.


7. Styling the Navigation


It is important to note that the width of the body has been defined as 940px and that it has been centered. Our navigation bar needs to span the whole width of the window, so we’ll have to apply some additional styles:

1. nav {
2. position: absolute;
3. left: 0;
4. width: 100%;
5. background: url("nav_background");
6. }

We position the nav-element absolutely, align it to the left of the window and make it span the whole width. We’ll center the nested list to display it within the boundaries of the layout:

1. nav ul {
2. margin: 0 auto;
3. width: 940px;
4. list-style: none;
5. }

Now we’ll define some additional styles to make the navigation items look prettier and align them to the grid the layout is based on. I’ve also included a style for highlighting the page the user is on, and some custom styling for the subscription-link.

1. nav ul li {
2. float: left;
3. }
4.
5. nav ul li a {
6. display: block;
7. margin-right: 20px;
8. width: 140px;
9. font-size: 14px;
10. line-height: 44px;
11. text-align: center;
12. text-decoration: none;
13. color: #777;
14. }
15.
16. nav ul li a:hover {
17. color: #fff;
18. }
19.
20. nav ul li.selected a {
21. color: #fff;
22. }
23.
24. nav ul li.subscribe a {
25. margin-left: 22px;
26. padding-left: 33px;
27. text-align: left;
28. background: url("rss.png") left center no-repeat;
29. }


8. Styling the Introduction


The markup for the introduction is pretty simple: A section with a heading and a paragraph of text. However, we’ll use some new CSS 3 tricks to make it look more appealing.

1. #intro {
2. margin-top: 66px;
3. padding: 44px;
4. background: #467612 url("intro_background.png") repeat-x;
5. background-size: 100%;
6. border-radius: 22px;
7. }
We are using two new properties. The first one is background-size, which allows you to scale the background-image. In our case, we scale it to 100% on both axes. If the box expands as we add more content to it, the gradient background will scale as well. This is something that was not possible in CSS 2.1 without non-semantic markup and miscellaneous browser issues.



The second new property is border-radius, which applies rounded corners to the element. The radius of our rounded corners are 22px in every corner. You could specify different values for each corner or choose to only round individual corners.



Unfortunately, neither of the properties are fully implemented into the major browsers. However, we can get some support by using vendor-specific attributes. Background-size is supported by newer versions of Safari, Opera and Konqueror. Border-radius is supported by newer versions of Safari and Firefox.

1. #intro {
2. ...
3. /* Background-size not implemented yet */
4. -webkit-background-size: 100%;
5. -o-background-size: 100%;
6. -khtml-background-size: 100%;
7.
8. /* Border-radius not implemented yet */
9. -moz-border-radius: 22px;
10. -webkit-border-radius: 22px;
11. }

Since we have a background-color defined, there will be no major problems in browsers that don’t support background-size, such as Firefox. Now we just need to style the heading and the text.

# #intro h2, #intro p {
# width: 336px;
# }
#
# #intro h2 {
# padding: 0 0 22px 0;
# font-weight: normal
# color: #fff;
# }
#
# #intro p {
# padding: 0;
# color: #d9f499;
# }

The flower image can be added easily by giving #intro a second background image, something that CSS 3 supports.

1. #intro {
2. ...
3. background: #467612 url("intro_background.png") top left (287px 100%) repeat-x,
4. url("intro_flower.png") top rightright (653px 100%) no-repeat;
5. ...
6. }

We give the two background images explicit dimensions to ensure that they don’t overlap, and we’re set. Note the shorthand notation of background-size.



Unfortunately, no browser reliably supports this yet, so we’ll have to do it the old-fashioned way: by including an inline image and positioning it using CSS. See the final example to see how it was done.



9. Styling the Content Area and Sidebar


The content area and sidebar are going to be aligned beside each other. Traditionally you would do this by using floats, but in CSS 3 we are going to use tables!

“What?! Tables?” you might ask and look confused. You probably learned years ago that using tables for web layout is a big no-no, and it still is. You should never use the table-element to mark up a layout. However, in CSS 3 we can make elements behave like tables without it ever showing in the markup! To start off with, we’re going to need some divs to group the sections in a little more logical manner.
  1. <div id="content">  
  2.     <div id="mainContent">  
  3.         <section>  
  4.             <!-- Blog post -->  
  5.         </section>  
  6.         <section id="comments">  
  7.             <!-- Comments -->  
  8.         </section>  
  9.         <form>  
  10.             <!-- Comment form -->  
  11.         </form>  
  12.     </div>  
  13.     <aside>  
  14.         <!-- Sidebar -->  
  15.     </aside>  
  16. </div> 

Everything still makes sense semantically, but now we can style it. We want the #content div to behave like a table, with #mainContent and aside as table-cells. With CSS 3, this is very easy:



1. #content {
2. display: table;
3. }
4.
5. #mainContent {
6. display: table-cell;
7. width: 620px;
8. padding-right: 22px;
9. }
10.
11. aside {
12. display: table-cell;
13. width: 300px;
14. }

That’s all! No more floating, faux column background images, clearing or collapsing margins. We’ve made the elements behave like a table, and this makes it much easier for us to do layout.


10. Styling the Blog Post


The styling of the post header is rather trivial so I’ll skip to the fun part: the multi-column layout.

Multiple columns

Multiple columns of text was previously impossible without manually splitting the text, but with CSS 3 it’s a piece of cake, although we have to add a div around the multiple paragraphs for this to work with current browsers.
  1. <div>  
  2.     <p>Lorem ipsum dolor sit amet...</p>  
  3.     <p>Pellentesque ut sapien arcu...</p>  
  4.     <p>Vivamus vitae nulla dolor...</p>  
  5.     ...  
  6. </div> 

Now we can add two simple properties and call it a day.

  1. .blogPost div {  
  2.     column-count: 2;  
  3.     column-gap: 22px;  
We want 2 columns and a gap of 22px between the columns. The additional div is needed because there is currently no supported way of making an element span more than one column. In the future, however, you’ll be able to specify the column-span property, and we could just write:

  1. .blogPost {  
  2.     column-count: 2;  
  3.     column-gap: 22px;  
  4. }  
  5.   
  6.     .blogPost header {  
  7.         column-span: all;  
  8.     } 

Of course the column-count and column-gap properties are only supported by some browsers, Safari and Firefox. We have to use the vendor-specific properties for now.

1. .blogPost div {
2. /* Column-count not implemented yet */
3. -moz-column-count: 2;
4. -webkit-column-count: 2;
5.
6. /* Column-gap not implemented yet */
7. -moz-column-gap: 22px;
8. -webkit-column-gap: 22px;
9. }

Box shadow

If you look closely at the image in the blog post you’ll see a drop-shadow. We are able to generate this using CSS 3 and the box-shadow property.

1. .blogPost img {
2. margin: 22px 0;
3. box-shadow: 3px 3px 7px #777;
4. }



The first “3px” tells the browser where we want the shadow to stop horizontally. The second “3px” tells it where we want the shadow to stop vertically. The last “7px” is how blurred the border should be. If you set it to 0 it will be completely solid. Last but not least we define the base color of the shadow. This color is of course faded, depending on how much you blur the shadow.

It probably comes as no surprise that this property is not implemented in all browsers yet. In fact, it only works in Safari, and you have to use the vendor-specific property.

view plaincopy to clipboardprint?

1. .blogPost img {
2. margin: 22px 0;
3. -webkit-box-shadow: 3px 3px 7px #777;
4. }



11. Zebra-striping the Comments


Zebra-striping, or highlighting every second element in a series, has traditionally involved selecting all the elements via javascript, then looping through them and highlighting all the odd elements. CSS 3 introduces the pseudo-class “nth-child”, which makes it ridiculously simple to do this without javascript. We’ll use it to zebra-stripe the comments.
view plaincopy to clipboardprint?

1. section#comments article:nth-child(2n+1) {
2. padding: 21px;
3. background: #E3E3E3;
4. border: 1px solid #d7d7d7;
5.
6. /* Border-radius not implemented yet */
7. -moz-border-radius: 11px;
8. -webkit-border-radius: 11px;
9. }

section#comments article:nth-child(2n+1) {
padding: 21px;
background: #E3E3E3;
border: 1px solid #d7d7d7;

/* Border-radius not implemented yet */
-moz-border-radius: 11px;
-webkit-border-radius: 11px;
}

The weird value “2n+1″ is actually pretty simple if you understand what it stands for:

* 2n selects every second item. If you wrote 3n it would select every third item, 4n every fourth item, and so on.
* The +1 tells the browser to start at element 1. If you are familiar with programming you probably know that all arrays start at 0, and this is also true here. This means that element 1 is actually the second element in the series.

Alternatively, you could simply write:
view plaincopy to clipboardprint?

1. section#comments article:nth-child(odd) { ... }

section#comments article:nth-child(odd) { ... }

Since the standard includes the two most used values as shorthand, odd and even. The rest of the comment styling should be simple to understand with your new knowledge.

Styling the Comment Form, Footer and Sidebar

A couple of CSS 3 techniques are reused in the styling of the comment form, footer and sidebar. In the comment form and the footer I’ve used the same type of table layout technique used in the main layout. In the sidebar border-radius is used to add rounded corners to the different sections.



12. The Final Design


See the final design with all styling applied.
Compatibility

The page renders correctly in Safari 4 and newer webkit-based browsers, as it is the only rendering engine that supports all of the CSS 3 techniques we have used. Firefox 3 has some problems applying rounded corners to our flower image and it doesn’t support background-size, but besides that the layout works. I’ve chosen to ignore Internet Explorer as it requires a bit of hacking to get HTML 5 to work. You could also define some more rules and get everything working across major browsers, but all of this is outside the scope of the tutorial.
Conclusion

When HTML 5 and CSS 3 are one day implemented in all browsers it will be a lot easier to build websites. We’ll finally be able to stop using floats for layout (which they were never meant to be used for), and we will spend considerably less time writing javascript to scale our background images or zebra-stripe our tables. Hopefully we will use all this extra time to study some long-neglected areas of web design, like front end optimization and proper information architecture.

* Follow us on Twitter, or subscribe to the NETTUTS RSS Feed for more daily web development tuts and articles.

Thursday, January 6, 2011

Drupal 7 vs Drupal 6

Drupal 7 Alpha 1 has just been released. Although it's not the definite version, Alpha means that it is stable enough to be tested by the public. And since I'm the public, I downloaded, installed and looked at Drupal 7. These are my first impressions, together with a couple of screenshots.

The download and the installation of the files is very similar as with Drupal 6. The same directories (sites, modules, themes,...) appear, you upload them with an ftp-client, you have to make a settings.php-file and a database. But a quick look into the directories themes and modules reveals some changes in the core already: 7 more modules, and the themes Stark and Seven.

Although I'm a big fan of Drupal, I regret that the basic installation (and upgrade), although logic, still requires (too much) knowledge about file-transfers, mysql, apache-servers, 7-Zip etc. But there is some good news about this release here: once Drupal is running, it's very easy to install new themes and modules (see further).

Installation of Drupal 7
When you start the installation of Drupal itself, you see the look of the new administration-theme: gray, black, white and a touch of blue - simple. The installation is very similar to Drupal 6, the differences are in the installation-profile (standard or minimal) and the choice in database-type (mySQL or SQLite).
The welcome-screen

Ah... Garland! The good-old Drupal-theme. With the big difference that Garland became a lot more flexible than before, and that Seven became the default administration-theme. The original Drupal 6-text has been moved to the help-section where it belongs, and people get the simple message that No front page content has been created yet. A good thing, 20% of the searches pointing to my website involves how to get rid of the welcome-page. People know now. By putting Add new content so prominently it shows what it is (mostly), a Content Management System. But I should replace Change the default front page with help with Drupal, since no content has been created.

The big changes are the 2 menu-bars at the top. The black one is quite similar to the one produced by the Administration-menu module and the gray menu-bar is for shortcuts, a place to put links to the tasks you perform the most.

The administration-bar


Gone are the confusing Content management, Site building, User management and Site configuration. Instead a much more logical structure. It didn't take me more than one hour to adapt and for the record, I used half of that time to find content-types; it's not under Content, as I expected, but under Structure, just like Blocks and Taxonomy. But in the end, I liked what I saw.

Completely new is Dashboard, a place where you can drag and drop the different blocks, and see them without the necessity to put them on the site itself. It's a great place to test them out. You don't need to assign a user-role and to put them in a region. Just drag them into Dashboard.

Content: still the (artificial) difference between a Page and a Story. Instead it's called Article and Basic page now. I'm sure that I'll get searches like what is the difference between Article and Basic page. I understand the idea behind it, but it's not really necessary for me. What I also miss is an integrated text-editor, but ok, an extra module will do the trick... Great is that you can add and manage different kind of fields to the content, like you did with CCK. Fields can be added to users & taxonomy too.

Structure is about Blocks, Menus, Content-types and Taxonomy, Appearance is the new word for Themes. Several new functions extend the theme 'Garland': it's possible to apply different colors, for example, and to choose between a fixed or flexible lay-out.

Users became People (nice). Really great is the creation of another role, the Administrator. Clever! The 1st-user (the god-role) is not necessarily the administrator of a site (the site can be created by the 1st-user for somebody else).

Something else. Think about what you have to do to add new modules in D6.

1. Find, Download them from drupal.org and Unzip
2. Upload the unzipped file to your site.
3. Administer>>Site building>>Modules, and enable
4. Administer>>User management>>Permissions and set the permissions
5. Administer>>Site configuration>>by Module and configure the module. and sometimes
6. Help

That's all over now, in D7 everything is located under Modules. Above the list a new link: Install new module. That brings you to this screen


Beautiful!!! Download, Unzip and upload in one go! No fiddling with files anymore, and it's the same system to upload new themes. I don't know if it works for FCKeditor, a more complex module (I couldn't try because it's not available for D7 yet), but it is a great solution for most other modules.

After the upload (and running the update.script) you go to the Modules-list to do the rest. Here a picture of a detail of the modules-list.



Conclusion

Some features I didn't examine yet, like the new way of dealing with private files, the implementation of pictures and Test stalled when I tried to run it. But I saw already enough changes to be impressed with the improved functionallity of Drupal 7. Nevertheless, I (personally) hope that in later stage we'll see an easier installation and the implementation of a text-editor.

Things I liked the most:

* the User-interface, which is state of the art. Only after working with D7, I realise how 'messy' D6 actually is. In D7, logic prevails.
* The default implementation of CCK
* The way how one can install modules and themes with D7 is a giant leap forward.

If you want to download Drupal 7 Alpha 1 or read more about this release, go to Drupal.org.

Upgrading from Drupal 6 to 7

Upgrading your Drupal installation
Upgrade vs. Update
Before you continue reading we need to define the difference beween upgrading and updating:
* Upgrading refers to moving from one major release to another. E.g. you are moving from
Drupal 6 to Drupal 7.
* Updating typically refers to bringing your site up to the latest minor version of Drupal
e.g. like updating from Drupal 6.12 to Drupal 6.14.
For information on updating your Drupal site see: http://drupal.org/node/390448

Upgrading your Drupal installation
The process of upgrading to the latest version of Drupal can vary in difficulty depending on the complexity of your current installation. This guide aims to help you plan for and complete a successful upgrade regardless of the size or complexity of your current site.

Any Drupal upgrade has four general steps: Planning; Preparing your current site for upgrade; Upgrading and Testing.

Before you begin reading this guide please make note of the following.

Upgrading Between Versions
You can only upgrade from one version to the next version. For example you are trying to move from Drupal 5 to Drupal 7 you first need to upgrade to Drupal 6 before you upgrade to Drupal 7.

Back Up Your Existing Site
Regularly backing up your site is considered a best practice. A full backup of your site database, core Drupal files, non-core files (e.g. contributed modules, and file upload folders) is strongly recommended before starting any site upgrade.

You may also wish to familiarize yourself with restoring your site from a backup prior to starting your upgrade. If something should go wrong during your upgrade and you need to restore your site from backup, it is best to be prepared so you can restore your site quickly. See [link] for more information on how to back up and restore your site.

Drupal 7 new features

Easier installation
The installation process has been simplified. Drupal supports most web servers (Apache is recommended), PHP 5.2.4+, and most databases (MySQL 5.0.15+ is recommended).

Improved administration panels
The administrative interface has been overhauled to make it slicker and simpler. A new configurable shortcut bar provides quick access to the most important tasks:

More flexible

Drupal 7 allows you to define your own content structure and add custom fields to pages, users, comments and other types of content. More than 800 modules are known to be compatible with the new version.

Speed and scalability
Drupal is fast and can handle huge amounts of traffic with better caching and improved JavaScript and CSS optimization.

Accessibility

Accessibility is better and Drupal now offers semantic web support with RDFa.

It’s still open source
Drupal remains a capable CMS which can be downloaded, adapted and used by anyone for free.