Create Basic Interaction

Buttons are made for clicking, or in iOS, tapping. This movie demonstrates the basics of responding to button presses in iOS. Using this basic interaction effectively helps build a foundation for developing apps. The process involves connecting a button to code and handling the touch event inside your code.

Learn how to create native apps for iOS 9, the latest operating system for the iPhone and iPad. It all starts with the installation of Xcode, the free all-in-one development environment built by Apple. Author Todd Perkins then shows how to select an app template and start working on the core iOS programming skills: creating interactions; responding to touch events, button clicks, and text input; and using delegation. He also spends a few chapters on iOS interface design. In these sections, you’ll learn how to use Interface Builder to visually design your app’s UI and use size classes to responsively adjust to different screen sizes. Plus, find out how to use views to display images, web content, and table data, and transition seamlessly between views in multiview apps.

Interested in developing for Apple Watch or Apple TV? Get a sneak peek in Chapter 9. The course wraps up with a look at the submission process for the App Store. See more about this course: iOS 9 App Development with Swift 2 Essential Training

Topics include:

  • Installing Xcode and the iOS SDK
  • Creating a simple iOS app
  • Creating a basic interaction with a button
  • Choosing an object as a first responder
  • Creating a user interface with Interface Builder and Auto Layout
  • Working with sliders and progress bars
  • Creating views to show images and web pages
  • Developing responsive layouts with size classes
  • Understanding the iOS architecture
  • Loading data in table views
  • Transitioning between views
  • Developing for the iPad, Apple Watch, and Apple TV
  • Submitting apps to the App Store


In addition to dividing the application into three kinds of components, the model–view–controller design defines the interactions between them.

MVC (Model View Controller) is a very important design pattern in programming.
  • A model stores data that is retrieved according to commands from the controller and displayed in the view.
  • A view generates an output presentation to the user based on changes in the model.
  • A controller can send commands to the model to update the model’s state (e.g. editing a document). It can also send commands to its associated view to change the view’s presentation of the model (e.g. by scrolling through a document).

MVC is useful because it separates the functionality of data storage, data representation, and user interaction. Under this framework, it is possible to manipulate how a end user will see data without affecting the data itself. It is popular in the world wide web because it provides an clean organization and structure to applications that require user interaction.


See more resources:

Building iOS Interfaces: A Custom Button
Creating Global Properties and Constants
Open Source iOS Component For Creating Customizable Buttons That Float Above A Scroll View

Build My Site

React.js Syntax

React.js syntax provides you with in-depth training on Web. Taught by Eve Porcello as part of the Learn React.js: The Basics.


React components are typically written in JSX, a JavaScript extension syntax allowing easy quoting of HTML and using HTML tag syntax to render subcomponents. HTML syntax is processed into JavaScript calls of the React library. Developers may also write in pure JavaScript. JSX is similar to another extension syntax created by Facebook for PHP, XHP (an augmentation of PHP and Hack developed at Facebook to allow XML syntax for the purpose of creating custom and reusable HTML elements).


Architecture Beyond HTML

The basic architecture of React applies beyond rendering HTML in the browser. For example, Facebook has dynamic charts that render to <canvas> tags and Netflix uses isomorphic loading to render identical HTML on both the server and client.

React Native

React Native libraries announced by Facebook in 2015 provide the React architecture to native iOS and Android applications.


One-way Data Flow

Properties, a set of immutable values, are passed to a component’s renderer as properties in its HTML tag. A component cannot directly modify any properties passed to it, but can be passed as callback functions that modify values. This mechanism’s promise is expressed as “properties flow down and actions flow up”.

For example, a shopping cart component might include multiple product line components. Rendering a product line uses only the properties passed to it and cannot affect the shopping cart’s total due. However, the product line could be passed a callback function as a property which would be called when a ‘delete this product’ button was pushed and that callback function could affect the total due.

Virtual DOM

Another notable feature is the use of a “virtual DOM.” React creates an in-memory data structure cache, computes the resulting differences, and then updates the browser’s displayed DOM efficiently. This allows the programmer to write code as if the entire page is rendered on each change while the React libraries only render subcomponents that actually change.

For example, a shopping cart component would be written to render the entire shopping cart on any change of data. If a product line subcomponent had no changes to the properties, a cached rendering would be used. This means the relatively slow full update to the browser’s DOM would be avoided. Alternately, if the product line quantity had changed, the product line subcomponent would be rendered; the resulting HTML might differ in only one node, and only that node would be updated in the DOM.

See more resources:

Up and Running with React.js | Creating a React Component
Building a Polling App with Socket IO and React.js
Learn React.JS in 8 Minutes

Build My Site

Create an Android Studio Project

Get an introduction to Java programming while you learn to develop Java applications for various runtime environments—desktop, web, and mobile—with Eclipse. Author Todd Perkins explains how to configure the development environment, and reviews the basic building blocks of the Java syntax: variables, functions, arrays, conditional statements, classes, and input/output. In chapters 3 and 4, he builds a user interface with the Swing framework, the GUI toolkit for Java, and connects Swing’s table components to different data sources. He also covers NetBeans, an alternative IDE for working with JavaServer Pages (JSP), and publishing workflows for desktop applications (via JAR files) and Android apps built with Java. See more: Up and Running with Java Applications

Topics include:

  • Installing Java and Eclipse
  • Understanding basic Java syntax
  • Handling Java errors
  • Creating a UI with Swing
  • Creating tables and connecting to data sources for tables
  • Publishing a JAR file
  • Installing NetBeans
  • Creating JSP pages
  • Setting up and connecting to databases
  • Creating Java-based Android Studio projects
    • Android Studio

      Android Studio is the official integrated development environment (IDE) for developing for the Android platform. It was announced on May 16, 2013 at the Google I/O conference. Android Studio is freely available under the Apache License 2.0.

      Android Studio

      Android Studio was in early access preview stage starting from version 0.1 in May 2013, then entered beta stage starting from version 0.8 which was released in June 2014. The first stable build was released in December 2014, starting from version 1.0.

      Based on JetBrains’ IntelliJ IDEA software, Android Studio is designed specifically for Android development. It is available for download on Windows, Mac OS X and Linux, and replaced Eclipse Android Development Tools (ADT) as Google’s primary IDE for native Android application development.

      Android Studio vs. Eclipse ADT comparison

      Feature Android Studio Eclipse ADT
      Build system Gradle Apache Ant
      Maven-based build dependencies Yes No
      Build variants and multiple-APK generation Yes No
      Advanced Android Intelligent code completion and refactoring Yes No
      Graphical layout editor Yes Yes
      APK (Android application package) signing and keystore management Yes Yes
      NDK support Yes Yes

      Swing (Java)

      Swing is a GUI widget toolkit for Java. It is part of Oracle’s Java Foundation Classes (JFC) – an API for providing a graphical user interface (GUI) for Java programs.

      Android Studio

      Swing was developed to provide a more sophisticated set of GUI components than the earlier Abstract Window Toolkit (AWT). Swing provides a native look and feel that emulates the look and feel of several platforms, and also supports a pluggable look and feel that allows applications to have a look and feel unrelated to the underlying platform. It has more powerful and flexible components than AWT. In addition to familiar components such as buttons, check boxes and labels, Swing provides several advanced components such as tabbed panel, scroll panes, trees, tables, and lists.

      Unlike AWT components, Swing components are not implemented by platform-specific code. Instead, they are written entirely in Java and therefore are platform-independent. The term “lightweight” is used to describe such an element.

      See more resources:

      The official Android IDE
      Configuring Android Studio
      Android Studio 2.0 Beta: What’s New?

      Build My Site

Move the Necessary Files with FTP

Move the necessary files with FTP provides you with in-depth training on Web. Taught by Morten Rand-Hendriksen as part of the Moving WordPress with WP Migrate DB and DB Pro.

Move WordPress to a new site with the free plugin WP Migrate DB. Morten Rand-Hendriksen breaks down how to migrate a WordPress site from one location to another, by duplicating and resetting the database with WP Migrate DB. He also shows how to simplify the process with the premium edition of the plugin, WP Migrate DB Pro, and move files with its powerful add-on, Media Files. Both plugins retain all your original content and settings, and work great whether you’re moving WordPress from your computer to a live site or between hosts. It’s just three steps—setting up the new site, migrating files, and migrating the database. However, if something goes wrong along the way, Morten also includes troubleshooting techniques for the most common WordPress migration problems.

Topics include:

  • Moving files via FTP
  • Installing WP Migrate DB on both sites
  • Exporting and importing the database
  • Using the WP Migrate DB Pro
  • Understanding push and pull
  • Moving files with the Media Files add-on
  • Troubleshooting common WordPress migration problems

File Transfer Protocol (FTP)

The File Transfer Protocol (FTP) is a standard network protocol used to transfer computer files between a client and server on a computer network.

FTP is built on a client-server model architecture and uses separate control and data connections between the client and the server. FTP users may authenticate themselves with a clear-text sign-in protocol, normally in the form of a username and password, but can connect anonymously if the server is configured to allow it. For secure transmission that protects the username and password, and encrypts the content, FTP is often secured with SSL/TLS (FTPS). SSH File Transfer Protocol (SFTP) is sometimes also used instead, but is technologically different.

llustration of starting a passive connection using port 21

The first FTP client applications were command-line programs developed before operating systems had graphical user interfaces, and are still shipped with most Windows, Unix, and Linux operating systems. Many FTP clients and automation utilities have since been developed for desktops, servers, mobile devices, and hardware, and FTP has been incorporated into productivity applications, such as Web page editors.


WordPress makes migration from one server to another relatively simple due to its use of a configuration file (wp-config.php, usually located in your root). This file controls the base settings for a WordPress website including (but not limited to) your database connection settings. Due to the use of a configuration file, migrating from one server to another can be accomplished by the following basic steps:

  • Download a copy of the WordPress files/folders (e.g. via FTP).
  • Download a copy of the associated database (view the ‘DB_NAME’ row in the wp-config.php for the associated database to back up).
  • Upload the files/folders to the new server.
  • Create a new database on the new server and import the sql backup.
  • Update the wp-config.php database fields to reflect.

See more resources:

Migrating WordPress DB is no more pain
Migration can be a beautiful thing
8 Best WordPress Backup Plugins

Build My Site

An Overview of Android 6.0 New Features

Find out what Android 6.0 (Marshmallow) has to offer app developers like you. Google has updated their robust mobile operating system with even more new features, including new project templates in Android Studio, an enhanced permissions framework, automatic backups for app data, and many smaller enhancements that are designed to make developers’ lives easier.

In this short training course, David Gassner shows how to authenticate users using device credentials or the fingerprint scanner, configure apps for backup, test backups to Google servers, and use app links, website associations, and voice interactions. Plus, learn how to control data display in activity layouts with the new data-binding framework. See more: Android 6.0 New Features for Developers.

Android Marshmallow

Android 6.0 “Marshmallow” is a version of the Android mobile operating system. First unveiled in May 2015 at Google I/O under the codename “Android ‘M'”, it was officially released in October 2015.

Android 6.0
Android Marshmallow home screen, with proprietary applications

Marshmallow primarily focuses on improving the overall user experience of Lollipop, introducing a new permissions architecture, new APIs for contextual assistants (a feature notably leveraged by “Google Now On Tap”—a new capability of the Google Search app), a new power management system that reduces background activity when a device is not being physically handled, native support for fingerprint recognition and USB Type-C connectors, the ability to migrate data and applications to a microSD card and use it as primary storage, as well as other internal changes.

Now on Tap

On Android 6.0 “Marshmallow”, Google Now supports an additional feature known as “Google Now On Tap”, which allows users to perform searches within the context of information currently being displayed in an app. When a user activates the feature, by holding the “Home” button or using a voice command, the entire text content of the current screen is parsed to search for keywords and other information, which is then used to generate cards that display information, suggestions, and actions related to the content.

Android 6.0
Google Now on the Nexus 6

Scott Webster of CNET praised Google Now for its ability to remind users of events based on past location histories and check-ins and further commended it for providing “information instantly in a clean, intuitive manner” without the user requesting it. A review by Ryan Paul of Ars Technica claims that like most other voice activated apps, including Siri, voice recognition is a major issue, but noted that the ability to type queries provides users with alternatives. Some commentators noted that the predictive power of Google Now reveals “exactly how much data and information Google actually has about [users’] routines and daily lives.

In January 2015, Google introduced the ability for participating, installed third-party apps to generate cards; on launch, this included apps such as Airbnb, eBay, The Guardian, and Lyft among others.

See more resources:

Sharing Content between Android apps
Guide to implementing App Linking on Android 6.0 Marshmallow
Android framework classes, choose wisely!

Build My Site

Learn Sketch: The Basics | Creating Pages and Artboards

Sketch is one of the most popular UX design tools around. This training course will help designers of all skill levels be productive with its focused, comprehensive vector graphics workflow. Follow along with Chris Converse and learn the ins and outs of the Sketch 3 interface, how to work with the key tools and workflows for UX and web designers, and how to create logos, wireframes, mockups, and production-ready graphics with Sketch. By the end of the course, you’ll be able to use Sketch’s artboards, text and object styles, reusable symbols, and drawing and export tools to create high-definition PNGs, JPEGs, and PDFs. The exercise files are free to all members. See more: Learn Sketch: The Basics.

Topics include:

  • Creating pages and artboards
  • Adding a navigation bar
  • Creating a logo
  • Drawing custom shape-based icons
  • Building links
  • Adjusting layouts for medium screens
  • Adapting layouts for small screens
  • Exporting artboards and assets

Sketch App By Bohemian Coding is a desktop app for Professional digital design for Mac, mostly used to design and prototype web applications.

How to turn pencil and paper sketch to high fidelity mock up with Sketch app:



To develop the high level flow of your app many designers choose to create an artboard. The first version of this artboard is often on paper, simply linking boxes with words together. After you’ve drawn your screenflow out on paper you’ll find it much easier to imagine travelling through the interface. Often through visualisation inconsistencies and complexities will become immediately obvious. Many times you’ll have moments where you think “I want to do x” on a screen and suddenly realise there’s no obvious place to do it.

You can use your inital rough artboards as a framework to organise and design a more fully fledged concept. A sketched out, more detailed artboard is quite easy for others to interpret, so you can spend time having people “try” out your design to see if they understand the direction it’s going. Testing your design is a really great way to see what is and what isn’t working.

Sketch Features:

  • Autosave and versioning – Sketch is autosaving for you and it even allows you to restore a previous version of your file.
  • Vector editing and pixel perfection – Switching from vector to pixel view is also very useful when it comes to icon or illustration design.
  • Smart Guides – Smart guides will help you to get all your elements with the correct alignment, padding and margin in a very easy way.
  • Edit elements on the fly – Getting the perfect shape size or corner radius by entering values in the input fields.
  • Shapes connection – No more struggle with moving things between back and front.
  • Multiple blending options per layer – In Sketch, you can do what you want with a single shape.
  • Round to Nearest Pixel Edge – Round to Nearest Pixel Edge rounds a shape or layer to its nearest pixel edge.
  • Linked Styles – When you deal with text-heavy design, linked style allows you to set a specific style that you can assign to any text.
  • Exporting Assets – Sketch being vector friendly and well-thought, the export is one click away and allows different sizes and formats (pdf, eps, svg, png, jpg, tiff).
  • Distribute Spacing – This feature will help you to quickly test several of them in a heartbeat.
  • Grids – You certainly use grids, this is a great tool.
  • Text Rendering – Using it’s own advanced text rendering, Sketch is doing a great work at displaying text and typefonts.
  • CSS Styles – This feature will translate all your blending options into CSS code.
  • Rotate copies – Saves you lot of trouble and time.
  • Sketch Play – It’s still in beta but Sketch is on it’s way to have iOS mirroring.

See more resources:

How to Mockup Responsive Websites in Sketch App
How to Create an Icon Design Workflow in Sketch App 3
iPhone 6 Screens Demystified
Sketch App Sources
Learn to design an iPhone app with Sketch 3

Build My Site

Creating Responsive Inputs and Labels

Creating responsive inputs and labels provides you with in-depth training on Web. Taught by James Williamson as part of the Building Responsive Forms with Flexbox. Also, see my previous post: What is Flexbox?

The CSS3 Flexible Box Model, or Flexbox, is a different way to design responsive websites and HTML forms. Flexbox doesn’t rely on floats or collapsible margins. Instead, flex containers shrink and expand items to fit the available space. With flexbox, complex layouts can be achieved with cleaner, more semantic code.

In this course, senior staff author James Williamson shows how to use flex containers, flex child items, and responsive design techniques to create responsive layouts for two forms: a short search form and a longer registration form with sections. He demonstrates how to style the form structures, fields, labels, and buttons; control the alignment of different elements; and enhance the responsiveness of both forms with media queries.

CSS3 Modules

Unlike CSS 2, which is a large single specification defining various features, CSS 3 is divided into several separate documents called “modules”. Each module adds new capabilities or extends features defined in CSS 2, preserving backward compatibility. Work on CSS level 3 started around the time of publication of the original CSS 2 recommendation. The earliest CSS 3 drafts were published in June 1999.


Due to the modularization, different modules have different stability and statuses. As of June 2012, there are over fifty CSS modules published from the CSS Working Group., and four of these have been published as formal recommendations:

Some modules have Candidate Recommendation (CR) status and are considered moderately stable. At CR stage, implementations are advised to drop vendor prefixes.


See the Pen CSS3 Flexbox by Sten Hougaard (@netsi1964) on CodePen.

Following are a few terms associated with the flex layout model:

Flex container
Parent element that holds all flex items. Using the CSS display property, the container can be defined as either flex or inline-flex.

Flex item
Any child element held within the flex container in considered a flex item. Any text within the container element is wrapped in an unknown flex item.

Each flex box contains two axes: the main and cross axes. The main axis is the axis on which the items align with each other. The cross axis is perpendicular to the main axis.

Establishes main axis.

Determines how content gets placed on the main axis on the current line.

Determines the default for how content gets placed on the cross axis on the current line.

Determines how a single item is placed along the cross axis. This overrides any defaults set by align-items.

The main-start/main-end sides determine where to start placing flex items within the flex container, starting from the main-start end and going to the main-end end. The cross-start/cross-end sides determine where flex lines get filled with flex items from cross-start to cross-end.

Places elements in groups and determines which order they are to be placed in within the container.

Shorthands flex-direction and flex-wrap to place the flex content.

Flex items can either be placed on a singular line or on multiple lines as defined by the flex-wrap property, which controls both the direction of the cross axis and how lines stack within the container.

Main size and cross size are essentially the height and width of the flex container, each dealing with the main and cross axes respectively.

See more resources:

Using Bootstrap 4 Flexbox
Flexbox’s Best-Kept Secret
How To Get Started With CSS Flexbox

Build My Site

Introducing Popperscores: A Preview of the Final Project

Introducing Popperscores: A preview of the final project provides you with in-depth training on Web. Taught by Morten Rand-Hendriksen as part of the WordPress: Building Themes from Scratch Using Underscores.

Ready for your next WordPress challenge? Learn how to build more complex custom themes using the _s (aka Underscores) starter theme. Morten Rand-Hendriksen takes you from basic layout and customization to enabling advanced responsive design and accessibility features. He reinforces the basics lessons with DRY (don’t repeat yourself) development practices and a structured approach that will help you build WordPress themes that meet modern standards. Plus, he explores core concepts like understanding the WordPress template hierarchy and mobile-first design, creating functions, adding custom JavaScript, applying styles, and more. Plus, for 2016, we’re including an all-new chapter on the Customizer, which provides controls that allow users of your theme to adjust the colors and layout.

Topics include:

  • Installing WordPress, Underscores, plugins, and NetBeans
  • Creating a modular, mobile-first WordPress theme
  • Setting up the basic theme
  • Building a custom header
  • Designing responsive, accessible menus
  • Configuring the Single Post Template plugin
  • Generating featured images
  • Styling the comments area, search results, and widget areas
  • Working with static pages
  • Adding features to the Customizer
  • Customizing the backend
Generate your own custom version at

Underscores (_s)

Designed to serve as a base/starter theme by the Theme Team — the people responsible for
the design and development of themes that ship with WordPress. It is a culmination of the lessons learned and best practices garnered from building themes used by millions of people all over the world.

Check out Underscores (_s) on Github


WordPress users may install and switch between themes. Themes allow users to change the look and functionality of a WordPress website and they can be installed without altering the content or health of the site. Every WordPress website requires at least one theme to be present and every theme should be designed using WordPress standards with structured PHP, valid HTML and Cascading Style Sheets (CSS). Themes may be directly installed using the WordPress “Appearance” administration tool in the dashboard or theme folders may be uploaded via FTP. The PHP, HTML (HyperText Markup Language) and CSS code found in themes can be added to or edited for providing advanced features. WordPress themes are in general classified into two categories, free themes and premium themes. All the free themes are listed in the WordPress theme directory and premium themes should be purchased from marketplaces and individual WordPress developers.

Sparkle is based on Underscores (_s) and Bootstrap Framework with built-in flexibility

WordPress users may also create and develop their own custom themes if they have the knowledge and skill to do so. If WordPress users do not have themes development knowledge then they may download and use free WordPress themes from

See more resources:

Automattic Launches Components with 5 New Starter Themes Based on Underscores
Underscores WordPress Starter Theme Adds Support for Sass
Introduction To Underscores: A WordPress Starter Theme With Konstantin Obenland
_s_backbone: A WordPress Starter Theme Based on Underscores and Backbone.js

Build My Site

Styling Social Media Icons

Styling social media icons provides you with in-depth training on Web. Taught by Justin Seeley as part of the Building a Responsive Portfolio Site.

A great portfolio can make the difference between landing the job and getting passed over. This quick and fun project-based course will show you how to build a responsive portfolio site from start to finish. Staff author Justin Seeley shows how to plan the website in Photoshop and convert the plan into a single-page site. The backbone driving the portfolio will be Skeleton, an intuitive CSS framework that you’ll learn how to use for your own projects. Along the way, you’ll find out how to work with web fonts like Google fonts and icon fonts, how to start inserting content into containers, and how to style the look of headers, images, typography, and even social media buttons with some simple custom CSS. Add on a responsive lightbox effect and some media queries to make sure your site is ready for mobile, and you’ll have a complete, high-quality platform for showcasing your work.

Topics include:

  • Planning and setting up an HTML layout
  • Creating responsive CSS grids
  • Incorporating web and icon fonts
  • Building a layout with the Skeleton grid
  • Styling the website
  • Using jQuery for simple lightbox effects
  • Testing a website’s responsiveness
  • Adjusting media queries

CSS Frameworks

CSS frameworks are pre-prepared software frameworks that are meant to allow for easier, more standards-compliant web design using the Cascading Style Sheets language. Most of these frameworks contain at least a grid. More functional frameworks also come with more features and additional JavaScript based functions, but are mostly design oriented and unobtrusive. This differentiates these from functional and full JavaScript frameworks.

Website development

CSS frameworks offer different modules and tools:

  • reset style sheet
  • grid especially for responsive web design
  • web typography
  • set of icons in sprites or icon fonts
  • styling for tooltips, buttons, elements of forms
  • parts of graphical user interfaces like accordion, tabs, slideshow or modal windows (Lightbox)
  • equalizer to create equal height content
  • often used css helper classes (left, hide)

Skeleton is: Responsive Grid Down To Mobile, Fast to Start, Style Agnostic. Base grid is a variation of the 960 grid system.

Google Fonts

Google Fonts (previously called Google Web Fonts) is an interactive directory of free hosted application programming interfaces for web fonts. It was launched in 2010, and revamped in 2011. Many of the fonts are released under the SIL Open Font License 1.1, while some are released under the Apache License; both are free software licenses. The fonts are also served by Monotype’s SkyFonts, and Adobe’s Edge Web Fonts and Typekit services.


Google Fonts is designed to provide a platform for users to discover fonts and is used extensively, and example font faces include Lato, Raleway, and Lobster.

Font Awesome

Font Awesome is a font and icon toolkit based on CSS and LESS. It was made by Dave Gandy for use with the Twitter Bootstrap, and later was incorporated into the BootstrapCDN.


Font Awesome has a 20% market share among those websites which use third-party Font Scripts on their platform, ranking it on a second place after Google Fonts.

See more resources:

Grid Based Web Design Resources
28 Powerful Open Source CSS Frameworks & Libraries

Build My Site

Restyling the Mobile Menu

Restyling the mobile menu provides you with in-depth training on Web. Taught by Chris Converse as part of the Creating a Responsive Web Design: Advanced Techniques.

Looking to take your responsive web design skills to the next level? Learn how to create collapsible menus and add scalable vector graphics (SVGs) to your layouts. Chris Converse shares advanced techniques to style mobile menus and graphics with HTML, CSS, JavaScript, and jQuery. These videos offer practical, start-to-finish tutorials to build more efficient and flexible webpages that can adapt to different screen sizes and orientations.

Content is like water, a saying that illustrates the principles of RWD.

“Holy Grail” – Responsive

The Holy Grail refers to a web page layout which has multiple, equal height columns that are defined with style sheets. It is commonly desired and implemented, although the ways in which it can be implemented with current technologies all have drawbacks. Because of this, finding an optimal implementation has been likened to searching for the elusive Holy Grail.

The limitations of CSS and HTML, the desirability of semantically meaningful pages that rank well in search engines, and the deficiencies of various browsers combine to create a situation in which there is no way to create this type of layout that would be considered totally correct. As the underlying technologies do not provide a proper solution, web designers have found various ways to work around the limitations. Common workarounds include changes in page structure, the addition of graphics, scripting, and the creative use of CSS. These methods are imperfect, inconvenient, and may even be considered abuse of the web standards and their intent.

Upcoming web standards will deal with this and other layout issues in a much more elegant fashion. However, the problem will continue until these standards are finalized and widely implemented.


The World Wide Web Consortium (W3C) has approached the layout issue through various proposals. Three of these proposals are under current development: the Flexible Box Layout Module, the Grid Layout Module, and the Template Layout Module.

The most mature proposal is the Flexible Box Module, which reached Last Call Working Draft status as of May 2015, and has support in all current desktop and many mobile browsers (Webkit-based browsers and some other mobile browsers require prefix filters). Setting an element’s display property to “flex” or “flex-inline” causes the element to become a new type of container (similar to a block or inline block, respectively), with new methods of positioning child objects. Content can flow in any direction, and be displayed in any order. The W3C proposal contains an example which achieves the Holy Grail column layout using four simple CSS rules, and makes the layout responsive with a simple media query rule. The module can also be used to address many other layout issues.

The Grid Layout Module similarly allows a designer to create a container for layout, which contains rows and columns of fixed or variable size into which elements can be placed. It is in Working Draft status (September 2015), and has very limited browser support. This module is a continuation of work done as the Grid Positioning Module.

There is a new draft of the Template Layout Module as of March 2015, which was inactive since 2011. This module allows designers to create grid slots in a container semi-graphically, in a manner that has been described as “ASCII art”. This module does not have browser support, but Web designers who wish to use the Template Layout syntax may add support to their pages through jQuery/javascript. This module is a continuation of work previously done as the Advanced Layout Module, and the authors state that it “combines ideas from earlier drafts on Template Layout, Grid Positioning and Grid Layout”. The W3C does not expect that this module will become a recommendation; rather it serves as a repository for ideas which may migrate to other modules of CSS.

When these standards become mature, and nonconforming browsers are no longer in common use, the Holy Grail problem will have become a non-issue.

See more resources:

Holy Grail Layout — Solved By Flexbox — Cleaner, hack-free CSS
Responsive Web Design
The Role of Table Layouts in Responsive Web Design

Build My Site