All of us developers can write code. We need designers for the look,feel, page designs, and flows. To get the services of a web designer, often we need to do a prototype. If the design is bad, nobody may even see the potential of the website. For a lot of web apps, there may not even be enough budget to attract a designer.
What should the developers do? Can they do the web design by themselves? Even if they can’t do a world-class design, can they create reasonably good web pages? This note, created from some of the lessons I taught my developers, answers the questions.
Small rant: Historically, clothes were hand made. They were ill-fitting, expensive, and of poor quality. After Mr. Singer came up with machine, they were cheaper and had better quality. Over the time, they became reasonably well-fitted too. Still, a modern custom Italian suit is better than a mass produced suit.
Most people hiring UX designers want that Italian design better than the machine design. But, in reality, they are getting the ill-fitting, expensive medieval designs. For them, a better choice is a machine design – that is, a factory approach, using standards based designs, with mass customization. It is an engineering approach like that of Mr. Issac Merrit Singer’s. If you have the right budget, of course, you can go for high end tailors or high end designers.
If you have not read them already, please read the following blog posts:
- http://www.kanneganti.com/technical/tools-for-developing-and-optimizing-web-firefox/ – You will understand how to use Firefox for developing for the web and optimizing for the web.
- http://www.kanneganti.com/technical/html5-design-knowledge-for-application-developers/ – You will find the basics of HTML5 (a bit outdated, perhaps) that is required for the modern web development.
- http://www.kanneganti.com/technical/what-i-look-for-in-user-interface-designers/ – This is the direct predecessor for this note. I will be showing some standard ways that you can approach the design from an engineering perspective.
If you are strapped for time, you can skip to thelast section, where I give you a standard way you can develop web pages, with good chance of success.
We’re not going for the originality. We are looking to use standard resources, standard tools, and standard best practices. let us study the core elements of a web design: Styles and Trends, UI Elements, Interactions, Fonts, Icons, Colors, and Layouts.
Styles and Trends
This is my soon-to-be-outdated advice: follow Google style. Use affordance where you need instead of full flat design. Don’t go for Skeumorphic designs, as they are difficult to design and maintain.
Skeuomorphism : Imitating the real world. That is, when you find a notebook imitating physical notebook, that is skeuomorphic design.
There are positive points for this design, of course. The user instantly recognizes it by identifying with the real-world counterpart. For novice users, it is a worthwhile association. For example, if a novice user sees a notebook with familiar ruled yellow paper, they know what it is for.
But, the flip side is that it is difficult to design. And, it gets annoying quickly. For an experienced user, it is hurdle for frequent usage.
Follow the [link](http://www.dtelepathy.com/blog/inspiration/50-skeuomorphic- designs) to see the set of examples to understand how it can easily go overboard.
Even Apple realized the excesses of Skeumorphic design and began to prefer flat design. This design reduces clutter and simplifies the appearance. However, flat design loses affordance. That is, if there is a button, you press it. If there is patch of color, you don’t think of pressing. Still, it is the recent trend. You can find different themes for the standard layouts. I find it quite useful to present information.
For instance, the above picture is good illustration of information presentation using flat design. You can see lot of examples of the flat widgets in Flat-UI project.
How about bringing some affordances to flat design? See http://sachagreif.com/flat-pixels/ for ideas on how to do it. Simply put, you can do flat design, but add shadows, gradients, and even buttons with relief to retain the usability of the design.
A page is composed of several UI elements. Some are basic, a standard part of HTML, such as tables, buttons, forms etc. Some are built with these basic elements: menus, breadcrumbs etc. Here are some simple rules in creating a standard set of UI elements:
- Do not design any UI elements. Borrow from a consistent set. Please see the layouts section for further details on standard set of UI elements that come with toolkits like bootstrap.
- For higher-order UI elements, again, do not design your own ones. If the toolkit provides them, use them. If you must design, create a catalog of semantic elements you need and use that to guide a standard set of elements.
- For a standard set of UI elements, please see some examples:
- http://ui-patterns.com/ – for standard design patterns with examples
- http://www.smileycat.com/design_elements – lot of examples from industry
- http://quince.infragistics.com/ – examples such as date pickers and so on. Lot of standard UI elements.
- http://www.cssbake.com/ – more focus on the basic elements – these can be used to spruce up the ones that come with the layout toolkit.
These days, the web page design is not static. Depending on the user interactions, we need to change the page. For instance, when the user selects a particular part of the page to interact, perhaps it makes sense to remove the unneeded parts of the page. Lots of these interactions are accomplished with JQuery and its plugins. Some of the standard interactions are table design and infinite scrolling that you see on Facebook.
Here are some places you can find more interactions:
- https://plugins.jquery.com/ – where you can find lot of examples of JQuery plugins.
- http://www.unheap.com/ – slightly better interface, but fewer examples
The easiest way to spruce up a page is to use right kind of typography. Here are a few guidelines:
- Use only a few kind of typefaces. I would limit my pages to use no more than three-one serif, one sans-serif, and one fixed.
- Do not assume that your fonts are available in target system. For example, Calibri is not available on Linux.
- Feel free to use free fonts available from Google and Adobe. They are easy to use; it just takes two lines to add them to your pages.
Not all fonts are suitable for all situations. To see some beautiful examples of free fonts, visit: http://www.smashingmagazine.com/2014/03/12/taking-a-second-look-at-free-fonts/.
To use the fonts well, you need to understand how to use sizing of fonts to your advantage. If you use the UI patterns appropriately, you will know how to use the right font size to do a call out, or promote. You also will understand how to use colors to indicate the information classification to the users.
Icons make information easily identifiable and usable. Even the simplest icons provide information quickly. For example, take Otl Aicher’s stick figures: he designed the icons for the Munich Olympics and changed the way public communication occurs through pictograms.
In web, icons play even bigger role. There are two ways to use icons:
Using icons as images: For instance, you can find many sets of icons that are free to use in your website. All you need to incorporate these icons is to download them and use their jpg/gif/svg in your website.
Using icons as font: The problem with using icon images is that you cannot manipulate them. For instance, you cannot resize them (in svg, you can, but in others, they lose fidelity). You cannot change the color (you need multiple sets). You cannot transform them. Visit https://css-tricks.com/examples/IconFont/ to understand how icon fonts can be colored, resized, slanted, shadowed etc.
If you are using icon fonts, you can start with: http://fortawesome.github.io/Font-Awesome/ that go well with bootstrap. Or, you could look at comprehensive library like: http://weloveiconfonts.com/
Still, if you need icons with multi-colors, you need to use the images.
Lot of engineers feel challenged when asked to choose the colors. They resort to bland colors that do not work well with each other. If you are choosing a theme designed by an in-house designer, or a theme provider, the choices would be made for you. If you need to customize a standard theme, you can consider the following:
- https://kuler.adobe.com/create/color-wheel/ – the color wheel is a standard way of choosing a set of colors that go well together. There are different variations – monochromatic to triad, or complementary to analogous. Choose one color and play with the combinations that work well with that color.
- http://colorco.de is also a nice interface to using color wheel. Feel free to select the type of the color scheme you want and move the cursor over the colors to vary the combinations.
The layout of the elements of the page is a crucial step in web design. The earliest designs did not understand the web as a different medium than desktop applications and gave us the designs laden with the same kind of menu’s with dropdown choices. Web is a dynamic medium that can adjust based on the context, the user, and the situation.
There are two parts to the layout: what should be in the layout, and how they should be laid out.
Conceptual elements in a layout
What should be in each page or layout is a much bigger topic than this simple post. I will describe in a separate post. Meanwhile, here are the fundamental rules to remember:
- Make the pages task oriented for most post. If we need exploratory elements, use them as right recommendations in the page.
- Do not clutter the page with all possible choices. Give the choices that make sense only in that context.
- Give the user ability to escape the current thread of flow.
- Feel free to hide and show the elements on demand. That is, we do not need to get a new page for every change in the page.
- Respect the URL – The user should be able to bookmark and land on a page and carry on transaction from there; or, the user can do back and forth among the URLs.
- Set a few standard page elements that reduces the need to learn for the users.
Soon, in other posts, I will describe the process of designing the elements of a layout.
Physical layout part has become simpler. These days, if somebody is developing the front end, the layout should satisfy the following:
- It should work on any (modern) browser: Browser wars are oh so ancient. The web page should be viewable on any browser. However, since most modern web technologies require modern browsers, we can assume usage of modern browser (thanks to the mobile revolution), that is beyond IE7. Companies like Google already are pushing the market beyond even IE9. Browsers like Chrome and Firefox keep themselves updated to support most modern features.
- It should work on any form factor: The layout should support any size of the browser. Some devices can only support smaller size browser; some support different orientations; some support different resolutions. Our layout should work on all these varying sizes, orientations, and resolutions.
The second capability is called “responsiveness” of the design. How do we know if a layout is responsive? Please read using firefox for testing for responsiveness to understand how we can test for responsiveness.
There are multiple ways we can make a layout responsive:
- We can check for the browser size (and the device, while we are at it), and generate the appropriate HTML. This approach doesn’t work well with proliferation of variations in sizes. Besides, what if we resize (or reorient) the browser after we got the page? Reloading the page is so retrograde, and breaks user experience (think re-posting a purchase – not what user expects).
- We can indicate using CSS on how to layout: that is, no absolute sizes – only relative metrics. Using the right kind of weights, CSS positioning, we may be able to achieve the design we want.
- We can add JS that can redraw the page based on the size: By adding JS that can hide or show elements, we can enhance the CSS to support devices even better. For instance, why show a full side bar with a menu, when we are seeing it on a mobile device, where there is barely enough space to display the main content?
While those are typical choices, in practice, you will use one of the following frameworks. These frameworks incorporate CSS and JS to deliver responsive design:
- Bootstrap: The most popular choice for responsive design. You can customize what you need and get only the bare minimum needed. As a bonus, you will get a fully integrated set of icons, widgets, JQuery and plugins, and ability to customize the L&F of the site.
- Zurb Foundation: Very similar to Bootstrap. The approach is more of a toolkit – it lets you design what you want. It has limited set of UI elements, and is not as opinionated as Bootstrap is.
There are several other layout frameworks like skeleton with minor variations on these categories. The popular ones like bootstrap come with standard themes. These themes add standard layouts, colors, fonts, images, icons, and even templates. For example:
- http://bootswatch.com/ – for free themes, playing on colors, and fonts.
- https://wrapbootstrap.com/ – for around $20, you can get ones with lot more standard themes and templates, for different categories.
- http://themeforest.net/collections/2712342-bootstrap-templates – from standard theme forest site. You will find several themes and templates for purchase.
All of this information is a lot to digest. Here is some simple advice that yields good enough results for most developers.
- Elements of a layout: What goes in each page? How to decide, from a developer perspective.
- Process of web development: A developer-friendly approach.
Drop me a note to see what you would like to know.