CSS3 introduces the very handy columns support which is implemented in WebKit and Firefox browsers going back a fair way and degrades gracefully in all browsers that don’t support it (which appears to include IE9 sadly). The downside however is that support for the corresponding column-break property to control where column breaks are allowed to occur doesn’t appear to exist despite documentation suggesting it should. So for example1:
Since column hights are always equal, the two items above will be split across the three columns. To keep each item together in a column, we should be able to use column-break-inside:
div.item { column-break-inside: avoid; }
but this doesn’t appear to have any effect in current Safari or Firefox. As a work around however, we can reach for the ever useful, inline-block style:
div.item { display: inline-block; }
Since inline-block items participate in the layout around them like empty elements (e.g. img) they can’t be split across columns. Note however, that the wrapping div no longer causes a line break so the rendering would break if you had text as a direct child of the DIV as it would allow two items to potentially appear on the same line (if they both fit in full). In this case however the content is using H1 and P tags which enforce the line breaks themselves.
1 – imagine these styles have the appropriate -webkit- and -moz- prefixes, I’m using the unprefixed versions just for brevity. ↩
Many browsers include user preferences to select preferred colours for text, backgrounds and links. This is intended as an accessibility feature so that people with limited vision, dyslexia or other disabilities can choose a colour scheme that makes it easier for them to read web pages. In theory it’s a great idea. In practice however it seems to be nearly useless.
There are two “modes” these colour preferences can be used in:
As preferences that web sites can override.
As forced settings, where website specified colours and background images are completely ignored.
Preference Mode
In the first case, there are a vast number of sites which become unusable because they specify a specific background colour without also specifying a foreground colour. So if you happen to set your preferences to have light coloured text on a black background, then try to log into Google you get:
Choosing white text on a black background would make half the text on the internet disappear.
Clearly this is poorly coded websites causing accessibility programs and they should get with the program and specify foreground and background colours in pairs. Which of course makes that dialog box look like:
Much better. Except now there is no sign that I ever changed my browser preferences rendering them completely useless. So now designers have a choice between respecting browser preferences or largely designing a black and white site.
The net result is that changing your browser colour preferences will have no effect on well coded sites and break a large number of sites. So why bother?
Forced Mode
So we’re left with forcing our preferred colours on web sites. This actually gives us high contrast and is most likely very useful for people with limited visibility. However, for people with dyslexia who wanted more readable colours1 rather than just high contrast now tend to struggle because so much visual context is lost from the page. Sure, on a well coded site all the information is there, but different background colours is a really useful indicator for the various sections. That extra context and readability is now lost. That’s a disaster for someone with good vision who was trying to make the page more readable.
Compare the very well coded BBC website with preferred colours vs with forced colours.
BBC website with preferred colours. Note the colour preferences make no difference.
BBC website with forced colours. Preferred colours are now visible but decerning the boundaries of sections is much harder due to the lack of differentiating colours.
It’s important to note that the BBC website is actually quite well coded – all the information is still available when you force the preferred colours, the designers simply have a significantly reduced ability to provide context and delineation, so inevitably the page becomes harder to read.
What to do About it?
Frankly, I have very little idea. The never properly implemented and now deprecated CSS system colours would have helped a lot in some cases. Design heavy websites would have still wanted their own colour set but web applications could have at least used them. Perhaps some way to specify a colour along with a fallback system colour could have worked. Then in the forced colour mode, the system colours would be used.
Beyond that it would be really nice if browsers were smarter about the options they provide. Instead of just a default colour setting, have a minimum contrast setting – the browser automatically increases the contrast between background and foreground colours to a specified point. Then you could combine that with a preference that text is always blue – if the website specifies black text on a white background it comes out blue text on a white background. If it’s white on black then it comes out as blue on suitably contrasting gray.
I don’t doubt that there are huge challenges here and I certainly can’t suggest the answers, but it seems like it’s about time we started putting pressure on user agents to do more to support accessibility rather than expecting website designers to do the impossible and create great designs that work with such limited accessibility tools.
1 – blue on white is actually much more readable than black on white ↩
I joined Ephox back in May 2002 and over the past eight-and-a-half years have had the pleasure of working with some of the most talented, dedicated, passionate and supportive people I’m ever likely to work with. It’s been an incredibly exciting time doing my small part to grow the company from a small team in Brisbane, Australia, though some very tight times to a very rapidly growing team with offices on three continents that’s firing on all cylinders.
Despite that, the 23rd of December will be my last day with Ephox and I’ll be starting a new job in the new year. With Ephox doing so well and a rapidly expanding engineering team back in Brisbane having plenty of it’s own momentum to drive it forward without needing a CTO on the other side of the world getting in the way and some fantastic new folk really driving Ephox’s senior management to the next level it feels like a good time for me to hand over and go explore something new. Knowing the people who will be taking over from me I have every confidence that our partners and clients will continue to receive top rate service and I’ll be expecting big things from Ephox in the future.
My new focus will be outside of web content management and editors altogether, doing some high performance, low latency server side stuff in the finance sector. I expect to be completely out of my depth and can’t wait. That opportunity to be the complete novice on the team instead of the veteran and the steep learning curve that comes with it is a huge part of the reason I’m making the move.
To everyone involved with Ephox past and present, as well as all of the people I’ve had a chance to work with at our clients and partners, thank you so much for giving me such amazing opportunities, experiences and most of all wonderful memories.
I truly feel like instead of working in a job for the past 8 years, I’ve enjoyed having Ephox as a big part of my life. I hope every job can feel that way.
In ARIA, there are two ways that you can attach a label to an element, aria-label and aria-labelledby. In theory, you should use aria-labelledby if the text is visually on-screen somewhere and this form is preferable. You should only use aria-label when it’s not possible to have the label visible on screen. This makes a lot of sense because generally sighted users like to be able to see the label as well and it prevents the visual and non-visual cues from getting out of sync.
However, with current support, you should always use aria-labelledby, even if you need the label to be hidden. While at least JAWS 12 and VoiceOver both read the aria-label as expected, it turns out that VoiceOver doesn’t correctly read the hierarchy if aria-label is in use. For example:
everything here is using aria-labelledby and VoiceOver will read the button as “First item Outer group button”. In other words, the button label, the group label and then the type of object.
However, if you change any of the elements to use aria-label, for example:
VoiceOver will now read the button as simple “First item button”. It doesn’t seem to matter which item uses aria-label, if it’s anywhere in the hierarchy, only the label for the button itself will be read out.
Update
With JAWS on IE8 (and probably earlier versions) if you use aria-label instead of labelledby, it will read the text content of the item followed by the label (with no hierarchy), though intermittently it seems to omit the content. This creates a particularly bad experience if you’re labelled something like a DIV which has a lot of text content.
IMHO, commit messages are an important piece of the communication puzzle, and I feel they are often neglected or completely not even seen that way. Commit messages (that are distributed/delivered to co-developers via email or some other mechanism) help a developer keep others in the loop. They help co-developers stay up to date mostly passively, without having to proactively look for information about recent changes.
This is especially true with distributed teams but I’ve always found it really useful for co-located teams as well. Being co-located you can provide updates verbally but it’s so much more efficient for people to keep track of the commit messages in their own time. It’s like the interruptions of IM vs the when-you’re-ready of email.