Normal Technologies Website
I set out to do something that was completely different than I've done before, to really think about what it
means to move in a normal direction. First, I wanted a horizontal layout, eschewing the typical
vertical page, but still maintain responsiveness and adaptability to any screen size. So I picked Bourbon
Neat again for its flexibility. After experimenting with pure CSS parallax effects with forced perspective
and scaling, I decided that I needed more control, and thus switched to controlling all of the animations
with Javascript. However, to leverage the speed and efficiency of the user's GPU to maintain smoothness and
high frame rates, I made sure to still use CSS transforms, merely using JS as a way to toggle the CSS states.
The end result is complete control over how the layers are built up, and with some custom math, the background
is guaranteed to never underflow so that the user never sees around it.
For the background, I knew I wanted to convey in a visually interesting way exactly what a normal is, at least
in a geometrical aspect. So I fired up Blender and started playing around with all kinds of objects, materials,
layouts, etc. Then I hit upon the idea of animating it to create even more distinction of what a normal is.
With the end result, users can see exactly how a normal relates to the surface it's a normal of. Some creative
post-processing adds the glow effect. The final movie is 1200 frames, each at 3000x1200 pixels, which took
around 4 days to render the final versions of.
Efficiency wise, I wanted to make sure it was still a good experience on mobile, and thus I still optimized
everything down to the essential elements. The main page load on mobile is optimized to only 400KB. The
desktop load is significantly larger than that due to the background animation video, but the browser
streams that load in the background so that the page still loads and renders very fast. Using Brunch, round
trips are kept to a minimum as all CSS and JS is optimized and minified down to 2 files. This was also a great
experience fully jumping in to ES2015 using Babel as a transpiler to ES5 Javascript.
Overall this was a really fun project, as I really got to stretch out into modern web practices, saying goodbye
to old browsers and fully embracing the new standards, such as ES2015 Javascript, Flexbox, CSS Transforms,
HTML5 video, and even some new ones, such as "backdrop-filter" that don't even work in any browsers yet. The
site will be ready... =)
Technologies used: