HTML 5 and CSS 3 Notes
HTML 5 and CSS 3 Notes
com
What is the relationship between SGML , HTML , XML and HTML ?
SGML (Standard generalized markup language) is a standard which tells how to specify document markup. Its only a Meta language which describes how a document markup should be. HTML is a markup language which is described using SGML. So by SGML they created DTD which the HTML refers and needs to adhere to the same. So you will always find DOCTYPE attribute at the top of HTML page which defines which DTD is used for parsing purpose.
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
Now parsing SGML was a pain so they created XML to make things better. XML uses SGML. For example in SGML you have to start and end tags but in XML you can have closing tags which close automatically (</customer>). XHTML was created from XML which was used in HTML 4.0. So for example in SGML derived HTML </br> is not valid but in XHTML its valid. You can refer XML DTD as shown in the below code snippet.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
In short SGML is the parent of every one. Older HTML utilizes SGML and HTML 4.0 uses XHTML which derived from XML.
What is HTML 5?
HTML 5 is a new standard for HTML whose main target is to deliver everything without need to any additional plugins like flash, Silverlight etc. It has everything from animations, videos, rich GUI etc. HTML5 is cooperation output between World Wide Web Consortium (W3C) and the Web Hypertext Application Technology Working Group (WHATWG).
How is the page structure of HTML 5 different from HTML 4 or previous HTML?
A typical web page has headers, footers, navigation, central area and side bars. Now if we want to represent the same in HTML 4 with proper names to the HTML section we would probably use a DIV tag. But in HTML 5 they have made it more clear by creating element names for those sections which makes your HTML more readable.
Below are more details of the HTML 5 elements which form the page structure. <header>: Represents header data of HTML. <footer>: Footer section of the page. <nav>: Navigation elements in the page. <article>: Self-contained content. <section>: Used inside article to define sections or group content in to sections. <aside>: Represent side bar contents of a page.
Below is the HTML code for DataList feature:<input list="Country"> <datalist id="Country"> <option value="India"> <option value="Italy"> <option value="Iran">
If you want to create a HTML text with email validation we can set the type as email.
<input type="email" name="email">
For URL validation set the type as url as shown in the below HTML code.
For URL validation set the type as url as shown in the below HTML code. If you want to display textbox with number range you can set type to number.
<input type="number" name="quantity" min="1" max="5">
If you want to display a range control you can use type as range.
<input type="range" min="0" max="10" step="2" value="6">
Output element is needed when you need calculation from two inputs to be summarized in to a label. For instance you have two textboxes ( see the below figure) and you want to add numbers from these textboxes and send them to a label.
Below goes the code of how to use output element with HTML 5.
<form onsubmit="return false" oninput="o.value = parseInt(a.value) + parseInt(b.value)"> <input name="a" type="number"> + <input name="b" type="number"> = <output name="o"></output> </form>
You can also replace parseInt with valueAsNumber for simplicity. You can also use for in the output element for more readability.
<output name="o" for="a b"></output>
What is SVG?
SVG stands for scalable vector graphics. Its a text based graphic language which draws images using text, lines, dots etc. This makes it lightweight and renders faster.
Below is how the code of HTML 5. You can see the SVG tag which encloses the polygon tag for displaying the star image.
<svg id="svgelem" height="200" xmlns="http://www.w3.org/2000/svg">
Define the canvas area So to define canvas area you need to use the below HTML code. This defines the area on which you can draw.
<canvas id="mycanvas" width="600" height="500" style="border:1px solid #000000;"></canvas>
Get access to canvas area To draw on the canvas area we need to first get reference of the context section. Below is the code for canvas section.
var c=document.getElementById("mycanvas"); var ctx=c.getContext("2d");
Draw the graphic Now once you have access to the context object we can start drawing on the context. So first call the move method and start from a point , use line method and draw the line and then apply stroke over it.
ctx.moveTo(10,10); ctx.lineTo(200,100); ctx.stroke();
<body onload="DrawMe();"> <canvas id="mycanvas" width="600" height="500" style="border:1px solid #000000;"></canvas> </body> <script> function DrawMe() { var c=document.getElementById("mycanvas"); var ctx=c.getContext("2d"); ctx.moveTo(10,10); ctx.lineTo(200,100); ctx.stroke(); }
SVG Heres its like draw and remember. In other words any shape drawn by using SVG can be remembered and manipulated and browser can render it again. SVG is good for creating graphics like CAD softwares where once something is drawn the user wants to manipulate it.
Canvas Canvas is like draw and forget. Once something is drawn you cannot access that pixel and manipulate it. Canvas is good for draw and forget scenarios like animation and games.
This is slow as it needs to remember the coordinates for later manipulations. We can have event handler associated with the drawing object. Resolution independent.
This is faster as there is no intention of remembering things later. Here we cannot associate event handlers with drawing objects as we do not have reference of them. Resolution dependent.
<svg xmlns="http://www.w3.org/2000/svg" version="1.1"> <circle cx="100" cy="50" r="40" stroke="black" stroke-width="2" fill="red"/> </svg>
var canvas = document.getElementById('myCanvas'); var context = canvas.getContext('2d'); var centerX = canvas.width / 2; var centerY = canvas.height / 2; var radius = 70;
context.beginPath();
context.arc(centerX, centerY, radius, 0, 2 * Math.PI, false); context.fillStyle = 'green'; context.fill(); context.lineWidth = 5; context.strokeStyle = '#003300'; context.stroke();
<!DOCTYPE html> <html> <body onload="DrawMe();"> <svg width="500" height="100"> <circle id="circle1" cx="20" cy="20" r="10" style="stroke: none; fill: #ff0000;"/> </svg> </body> <script>
function DrawMe() { var circle = document.getElementById("circle1"); var x = circle.getAttribute("cx"); var newX = 2 + parseInt(x); if(newX > 500) { newX = 20; } circle.setAttribute("cx", newX);
} </script>
</html>
Using Jquery
var timerFunction = setInterval(DrawMe, 20); function DrawMe() {
var circle = $("#circle1"); alert("ddd"); var x = circle.attr("cx"); alert("ddd1"); var newX = 2 + parseInt(x); if (newX > 500) { newX = 20; } circle.attr("cx",newX); } </script>
Move a circle <svg id="svg1" xmlns="http://www.w3.org/2000/svg"> <circle id="circle1" cx="20" cy="20" r="10" style="stroke: none; fill: #ff0000;"/> </svg>
<script>
$("#target").mousemove(function (event) {
var circle = $("#circle1"); circle.attr("cx", event.clientX); circle.attr("cy", event.clientY); }); </script> </body> SVG grouped with shapes
<svg x="100" <g transform="rotate(45 50 50)"> <line x1="10" y1="10" x2="85" y2="10"
style="stroke: #006600;"/> <rect x="10" y="20" height="50" width="75" style="stroke: #006600; fill: #006600"/> <text x="10" y="90" style="stroke: #660000; fill: #660000"> Text grouped with shapes</text> </g> </svg>
Rectangle with a rotate <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <rect x="50" y="50" height="110" width="110" style="stroke:#ff0000; fill: #ccccff" transform="translate(30) rotate(45 50 50)" > </rect> <text x="70" y="100" transform="translate(30) rotate(45 50 50)" >Hello World</text> </svg>
Rotate
<rect x="10" y="10" width="20" height="30" style="stroke: #000000; fill:none;" transform="scale(2)" />
Define a path that starts at position 150,0 with a line to position 75,200 then from there, a line to 225,200 and finally closing the path back to 150,0:
<svg xmlns="http://www.w3.org/2000/svg" version="1.1"> <path d="M150 0 L75 200 L225 200 Z" /> </svg>
What are selectors in CSS? Selectors help to select an element to which you want to apply a style. For example below is a simple style called as intro which applies red color to background of a HTML element.
<style> .intro { background-color:red; } </style>
To apply the above intro style to div we can use the class selector as shown in the below figure.
<div class="intro"> <p>My name is Shivprasad koirala.</p> <p>I write interview questions.</p> </div>
How can you apply CSS style using ID value? So lets say you have a HTML paragraph tag with id mytext as shown in the below snippet.
<p id="mytext">This is HTML interview questions.</p>
You can create a style using # selector with the id name and apply the CSS value to the paragraph tag. So to apply style to mytext element we can use #mytext as shown in the below CSS code.
<style>
Quick revision of some important selectors. Set all paragraph tags back ground color to yellow.
P,h1 { background-color:yellow; }
<a href="http://www.questpond.com">ASP.NET interview questions</a> <a href="http://www.questpond.com" target="_blank">c# interview questions</a> <a href="http://www.questpond.org" target="_top">.NET interview questions with answers</a>
a:visited {color:green;}
To implement column layout we need to specify the following: How many columns we want to divide the text in to ?
To specify number of columns we need to us column-count. webkit and moz-column are needed for chrome and firefox respectively.
Do you want to draw a line between those columns , if yes how much thick ?
-moz-column-rule:4px outset #ff00ff; /* Firefox */ -webkit-column-rule:4px outset #ff00ff; /* Safari and Chrome */ column-rule:6px outset #ff00ff;
-moz-column-rule:4px outset #ff00ff; /* Firefox */ -webkit-column-rule:4px outset #ff00ff; /* Safari and Chrome */ column-rule:6px outset #ff00ff; } </style>
You can then apply the style to the text by using the class attribute.
<div class="magazine">
</div>
For instance below is a simple CSS code which defines a box with border , padding and margin values.
.box { width: 200px; border: 10px solid #99c; padding: 20px; margin: 50px; }
Now if we apply the above CSS to a DIV tag as shown in the below code , your output would be as shown in the figure below. I have created two test Some text and Some other text so that we can see how margin property functions.
<div align="middle" class="box"> Some text </div>
Here the interviewer is expecting you to answer one of two text effects by CSS. Below are two effects which are worth noting. Shadow text effect
.specialtext { text-shadow: 5px 5px 5px #FF0000; }
Lets say the above for loop code is executed on a HTML button click. Now this method execution is synchronous. In other words the complete browser will wait until the for loop completes.
<input type="button" onclick="SomeHeavyFunction();" />
This can further lead to browser getting freezed and unresponsive with an error message as shown in the screen below.
So if we can move this heavy for loop in a JavaScript file and run it asynchronously that means the browser does need to wait for the loop then we can have a more responsive browser. Thats what web worker are for. Web worker helps to execute JavaScript file asynchronously.
To send message to the worker object we need to use PostMessage , below is the code for the same.
worker.postMessage();
When the worker thread sends data we get it in the OnMessage event on the callers end.
worker.onmessage = function (e) { document.getElementById("txt1").value = e.data; };
The heavy loop is in the MyHeavyProcess.js javascript file , below is the code for the same. When the JavaScript file wants to send message he uses postmessage and any message sent from the caller is received in the onmessage event.
var x =0 self.onmessage = function (e) { for (i = 0; i < 1000000000; i++) {
x = i + x;
} self.postMessage(x);
};
Now to implement this kind of requirement developers normally write some kind of PULL code which goes to the server and fetches data in certain interval. Now PULL solution is good but it makes the network chatty with lot of calls and also it adds load on the server. So rather than PULL it would be great if we can have some kind of PUSH solution. In simple words when the server has updates it will send updates to the browser client. That can be achieved by using SERVER SENT EVENTS. So the first thing the browser needs to do is connect to the server source which will send updates. Lets say we have page stock.aspx which sends stock updates. So to connect to the page we need to use attach to the event source object as shown in the below code.
var source = new EventSource("stock.aspx");
We also need to attach the function where we will receive messages when server sends update. For than we need to attach function to the onmessage event as shown in the below code.
source.onmessage = function (event) { document.getElementById("result").innerHTML += event.data + "<br>"; };
Now from the server side we need to send events. Below are some lists of important events with command that needs to be sent from the server side.
Event Command Send data to the client. data : hello Tell client to retry in 10 retry : 10000 seconds Raise a specific event event : success with data data : You are logged in. So for example if we want to send data below is the ASP.NET code for the same. Please note the content type is set to text/event.
If you want to attach an event we need to use the addEventListener event as shown in the below code.
source.addEventListener('message', function(e) { console.log(e.data); }, false);
From the server side the below message will trigger the message function of javascript.