171 lines
		
	
	
	
		
			5.9 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
		
		
			
		
	
	
			171 lines
		
	
	
	
		
			5.9 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
| 
								 | 
							
								---
							 | 
						||
| 
								 | 
							
								layout: main
							 | 
						||
| 
								 | 
							
								title: Head.JS, the only script in your HEAD
							 | 
						||
| 
								 | 
							
								---
							 | 
						||
| 
								 | 
							
								<div itemprop="description">
							 | 
						||
| 
								 | 
							
								    <div class="intro">    
							 | 
						||
| 
								 | 
							
								        HeadJS, a small library for Responsive Design, Feature Detections & Resource Loading
							 | 
						||
| 
								 | 
							
								    </div>  
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    <h2>When you need a quick cross-browser compatible hand, don't bang your head. HeadJS is here to help you out !</h2>
							 | 
						||
| 
								 | 
							
								    <ul>
							 | 
						||
| 
								 | 
							
								        <li>Speed up your apps: Load JS & CSS asyncronously and in parallel, but execute them in order</li>
							 | 
						||
| 
								 | 
							
								        <li>Load one asset if a condition is met, else fallback and load a different one</li>
							 | 
						||
| 
								 | 
							
								        <li>Manage script dependencies, and execute callbacks once they are loaded</li>
							 | 
						||
| 
								 | 
							
								        <li>Cross-browser compatible « pseudo media-queries » let you code against different resolutions & devices</li>
							 | 
						||
| 
								 | 
							
								        <li>Fix quirks in specific browsers by quickly applying dedicated CSS/JS logic</li>
							 | 
						||
| 
								 | 
							
								        <li>Detect various browsers & their versions</li>
							 | 
						||
| 
								 | 
							
								        <li>Check if the client supports a certain Browser, HTML5, or CSS3 feature</li>
							 | 
						||
| 
								 | 
							
								        <li>Automatically generates JS and CSS classes for browsers & features that where detected</li>
							 | 
						||
| 
								 | 
							
								        <li>Automatically generates CSS classes, to know what page or section a user is viewing</li>
							 | 
						||
| 
								 | 
							
								        <li>Know if the user is in landscape or portrait mode</li>
							 | 
						||
| 
								 | 
							
								        <li>Or whether the client is using a mobile or desktop device</li>
							 | 
						||
| 
								 | 
							
								        <li>Get old browsers to support HTML5 elements like nav, sidebar, header, footer, ...</li>
							 | 
						||
| 
								 | 
							
								        <li>...</li>
							 | 
						||
| 
								 | 
							
								        <li>
							 | 
						||
| 
								 | 
							
								            <strong>Make it, The only script in your <HEAD></strong>
							 | 
						||
| 
								 | 
							
								            <ul>
							 | 
						||
| 
								 | 
							
								                <li><em>A concise solution to universal problems</em></li>
							 | 
						||
| 
								 | 
							
								            </ul>
							 | 
						||
| 
								 | 
							
								        </li>        
							 | 
						||
| 
								 | 
							
								    </ul>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    <h3>Your imagination, Your limit</h3>
							 | 
						||
| 
								 | 
							
								</div>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<hr />
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<div>
							 | 
						||
| 
								 | 
							
								    <h2 >Responsive Design (Think @media-queries, and more)</h2>
							 | 
						||
| 
								 | 
							
								    <div class="intro">    
							 | 
						||
| 
								 | 
							
								        Achieve responsive design with CSS that targets different screen resolutions, paths, states and browsers.
							 | 
						||
| 
								 | 
							
								    </div>   
							 | 
						||
| 
								 | 
							
								    <div class="code-example" data-title="head.responsive()">
							 | 
						||
| 
								 | 
							
								        <p>Need to display an element at a specific screen size ? </p>
							 | 
						||
| 
								 | 
							
								        
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								{% highlight js %}
							 | 
						||
| 
								 | 
							
								/* JS */
							 | 
						||
| 
								 | 
							
								if (head.screen.innerWidth > 800) {
							 | 
						||
| 
								 | 
							
								    document.getElementById("#side-menu").style.display = "block";
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* CSS */
							 | 
						||
| 
								 | 
							
								.gt-800 #side-menu {
							 | 
						||
| 
								 | 
							
								    display: block;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								{% endhighlight %}
							 | 
						||
| 
								 | 
							
								        
							 | 
						||
| 
								 | 
							
								        <p>As you can see above, if you can write it in CSS, you can usually also write it in JavaScript.</p>
							 | 
						||
| 
								 | 
							
								        
							 | 
						||
| 
								 | 
							
								        <div class="code-example" data-title="Built in">
							 | 
						||
| 
								 | 
							
								            mobile, desktop, landscape, portrait, touch, viewport height, viewport width, screen height, screen width, browser height, browser width, browser name (ie, chrome, ff, ios, android, webkit, opera), browser version, current folder, current page
							 | 
						||
| 
								 | 
							
								        </div>
							 | 
						||
| 
								 | 
							
								    </div> 
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								    <h2>Feature Detections (Like Modernizr. Just smaller, and simpler)</h2>
							 | 
						||
| 
								 | 
							
								    <div class="intro">    
							 | 
						||
| 
								 | 
							
								        Detect various browsers and their features. Target HTML5 and CSS3 safely.
							 | 
						||
| 
								 | 
							
								    </div>   
							 | 
						||
| 
								 | 
							
								    <div class="code-example" data-title="head.feature()">
							 | 
						||
| 
								 | 
							
								        <p>What about custom detections and device/browser features ?</p>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								{% highlight css %}
							 | 
						||
| 
								 | 
							
								/* Add a custom feature yourself */
							 | 
						||
| 
								 | 
							
								head.feature("member", true);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* Now use it */        
							 | 
						||
| 
								 | 
							
								if (head.member) {
							 | 
						||
| 
								 | 
							
								    document.querySelector(".member-menu").style.display = "block";
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								.member-menu {
							 | 
						||
| 
								 | 
							
								    display: block;
							 | 
						||
| 
								 | 
							
								} 
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* Use built-in detections*/
							 | 
						||
| 
								 | 
							
								                   
							 | 
						||
| 
								 | 
							
								/* if the browser supports CSS3 box-shadow */
							 | 
						||
| 
								 | 
							
								if (head.boxshadow) {
							 | 
						||
| 
								 | 
							
								    document.querySelector(".member-menu").style.boxShadow = "3px 3px 3px black";
							 | 
						||
| 
								 | 
							
								}                 
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* if the browser supports CSS3 box-shadow */
							 | 
						||
| 
								 | 
							
								.boxshadow .member-menu {
							 | 
						||
| 
								 | 
							
								    box-shadow: 3px 3px 3px black;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								{% endhighlight %}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        <p>We have a bunch of features detections built in, and if that's not enough, simply create one yourself !</p>
							 | 
						||
| 
								 | 
							
								        <ol>
							 | 
						||
| 
								 | 
							
								            <li>Desktop</li>
							 | 
						||
| 
								 | 
							
								            <li>Mobile</li>
							 | 
						||
| 
								 | 
							
								            <li>Landscape</li>
							 | 
						||
| 
								 | 
							
								            <li>Portrait</li>
							 | 
						||
| 
								 | 
							
								            <li>Retina</li>
							 | 
						||
| 
								 | 
							
								            <li>Touch</li>            
							 | 
						||
| 
								 | 
							
								            <li>Transitions</li>
							 | 
						||
| 
								 | 
							
								            <li>Transforms</li>
							 | 
						||
| 
								 | 
							
								            <li>Gradients</li>
							 | 
						||
| 
								 | 
							
								            <li>Opacity</li>
							 | 
						||
| 
								 | 
							
								            <li>Textshadow</li>
							 | 
						||
| 
								 | 
							
								            <li>Multiplebgs</li>
							 | 
						||
| 
								 | 
							
								            <li>Boxshadow</li>
							 | 
						||
| 
								 | 
							
								            <li>Borderimage</li>
							 | 
						||
| 
								 | 
							
								            <li>Borderradius</li>
							 | 
						||
| 
								 | 
							
								            <li>Cssreflections</li>
							 | 
						||
| 
								 | 
							
								            <li>Fontface</li>
							 | 
						||
| 
								 | 
							
								            <li>rgba()</li>
							 | 
						||
| 
								 | 
							
								        </ol>  
							 | 
						||
| 
								 | 
							
								    </div> 
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    <h2>Resource Loading (Direct or Conditional)</h2>
							 | 
						||
| 
								 | 
							
								    <div class="intro">    
							 | 
						||
| 
								 | 
							
								        Manage your library's dependencies. Load JavaScript and StyleSheets in parallel but execute them in the correct order. 
							 | 
						||
| 
								 | 
							
								    </div>   
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								    <div class="code-example" data-title="head.load()">
							 | 
						||
| 
								 | 
							
								        <p>Need to quickly load a JS or CSS file ?</p>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								{% highlight js %}
							 | 
						||
| 
								 | 
							
								// Load up some JS
							 | 
						||
| 
								 | 
							
								head.load("jQuery.js", function() {
							 | 
						||
| 
								 | 
							
								    // Call a function when done
							 | 
						||
| 
								 | 
							
								    console.log("Done loading jQuery");
							 | 
						||
| 
								 | 
							
								});
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// Load up some CSS
							 | 
						||
| 
								 | 
							
								head.load("bootstrap.css");
							 | 
						||
| 
								 | 
							
								{% endhighlight %}
							 | 
						||
| 
								 | 
							
								        <h4>How about something crazy like</h4>
							 | 
						||
| 
								 | 
							
								        <p>On DocumentReady, if the user is using IE8, you need to load 2 scripts, or otherwise load a different script, then wait for them to finish loading, then fire a callback, and then load/apply a stylesheet ? Yeah right..</p>
							 | 
						||
| 
								 | 
							
								        <p>Easy.</p>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								{% highlight js %}
							 | 
						||
| 
								 | 
							
								// head.ready(document, callback)
							 | 
						||
| 
								 | 
							
								// head.test(test, success, failure, callback)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								head.ready(document, function() {
							 | 
						||
| 
								 | 
							
								    head.test(
							 | 
						||
| 
								 | 
							
								        (head.browser.ie && head.browser.version === 8),
							 | 
						||
| 
								 | 
							
								        ["file1.js", "file2.js"],
							 | 
						||
| 
								 | 
							
								        ["other.js"],
							 | 
						||
| 
								 | 
							
								        function() {
							 | 
						||
| 
								 | 
							
								            // run callback
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            head.load("file1.css");
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								    );
							 | 
						||
| 
								 | 
							
								});
							 | 
						||
| 
								 | 
							
								{% endhighlight %}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        <p>Of course you can use each of those functions (ready, test, load) individually too.</p>
							 | 
						||
| 
								 | 
							
								    </div>    
							 | 
						||
| 
								 | 
							
								</div>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<div class="intro">    
							 | 
						||
| 
								 | 
							
								    <strong>Make it the only script in your HEAD.</strong>
							 | 
						||
| 
								 | 
							
								    « A concise solution to universal problems »
							 | 
						||
| 
								 | 
							
								</div>  
							 | 
						||
| 
								 | 
							
								              
							 | 
						||
| 
								 | 
							
								{% include sections/download.html %}      
							 |