Issue #86 (offsetParent, Sass & CSS Tools, JS Utilities)
(Skip to the tools section below)
The offsetTop and offsetLeft properties are read-only properties available on every element on the page. These tell you the distance of an element's top-left corner from its nearest offsetParent. The offsetParent is determined by positioning in CSS and potentially due to the presence of an HTML table cell. But that's too theoretical and confusing. Let's look at an example.
child.innerHTML = child.offsetLeft;
child2.innerHTML = child2.offsetLeft;
t_child.innerHTML = t_child.offsetLeft;
child.innerHTML += '<br>' + child.offsetParent.id;
child2.innerHTML += '<br>' + child2.offsetParent.id;
t_child.innerHTML += '<br>' + t_child.offsetParent.id;
I'm using the above snippet of code in this JS Bin demo. The "child" variables represent each of the child divs, including the one inside the table cell. In the CSS, I've varied the position property for the three parent elements, so you can see how the results vary. Try changing the position value of any of the elements in the CSS to see the offset values change.
The first three lines of code above print out the left offsets in pixels, and the last three lines print out the ID of the element that qualifies as the "offsetParent". You can see, due to the different position values, the offsetParent varies — first it's the natural parent, then it's the body element, then it's the table cell.
Here's a summary with some further points:
Best to fiddle with these values in the demo, and also test with different window sizes, to get a better grasp of how these work.
- Without any relative positioning in the CSS, the offsetParent is almost always the body element.
- The exception is when an element is inside a table cell, in which case the cell is the offsetParent.
- If an element is set to "display: none", its offsetParent value is null.
- offsetLeft and offsetTop are always relative to whatever element qualifies as the offsetParent.
- In WebKit and IE, an element set to "position: fixed" will have a null offsetParent value, but in Firefox this is not the case. This bug was reported back in 2008, but still isn't fixed.
- See more on all three properties in the spec.
Now on to this week's tools!
Sass and Preprocessor Tools
"Simple Sass library for adding any flag to your website." Useful for indicating supported languages.
A zero-setup, editor agnostic, Sass previewer for OSX with auto reload functionality. And the best name for a tool you'll see this year!
A collection of Sass utilities (breakpoint, font, sprite, etc.)
"Minimalistic but flexible and powerful SCSS / CSS framework."
The Stylus version of Skeleton, the popular but simple responsive boilerplate.
Scans a project for partials that are never imported and provides the option to automatically delete the unused partials or display the file name as a console log.
"Generates a shell script to build a directory structure based on your Sass manifest file."
"A Sass library for writing CSS media queries in an easy and maintainable way, using a natural and simplistic syntax."
A responsive frontend framework, built with Less, to normalize styles for default HTML elements.
"A boilerplate layer that can be built upon and tailored for your needs. It combines best practices for today’s responsive web with the core components we use on every project."
"For those of us who want to use Font Awesome without class tags and without loading every single class definition."
A Sass and PHP boilerplate and framework. Has some very simple PHP includes to get a project started, along with a Skeleton-based grid system base.
CSS and HTML Tools
"An open-source script for Adobe Illustrator that converts your Illustrator documents into HTML and CSS."
A pure CSS, one-element-per-icon icon set.
"The styles defined in 'src/qube.css' provide you with an ideal way to create 3D CSS3 cubes that are exceptionally easy to work with and very extensible."
"Mathematically derived gradient explorer." Let's you start with a base color, then you can fiddle with the HSL and gradient spread values, and grab the CSS output.
A plugin for the Prism syntax highlighter, it adds a neat looking folder structure with icons to code that inputs a document structure tree.
"A free powerful responsive and parallax HTML5 template for landing pages, blog and resume."
A declarative flexbox-based grid framework.
"Lightweight date formatting and parsing (~1KB). Meant to replace parsing and formatting functionality of moment.js."
"A calendar-like component for AngularJS. It behaviors are very similar to Google analytics calendar, with a few extra unique options."
"Enables the automatic resizing of the height and width of both same and cross domain iFrames to fit the contained content. It provides a range of features to address the most common issues with using iFrames."
A React component to add "tagging" functionality (like in StackOverflow) to a web app.
"Ultra lightweight, customizable, simple autocomplete widget with zero dependencies, built with modern standards for modern browsers. Because 'datalist' still doesn’t cut it."
"Typing effect mimicking human behavior." (Be aware, the demo has some flashing full page background colors).
A small utility to make strings url safe by converting or removing symbols and special characters.
A Tweet for Thought
Does test-driven development slow you down? Sandro Mancuso doesn't think so.
Suggestions / Corrections
Made something? Send links via Twitter @WebToolsWeekly (details here). No tutorials or articles, please. If you have any suggestions for improvement or corrections, feel free to reply to this email.
Before I Go...
The internet has everything — even a Radio Shack computer catalog from 1983! The stuff in there looks amazingly ahead of its time. Hard to believe they didn't become what Microsoft and Apple are today.
Thanks to all for subscribing and reading!