Home » Dark or white color theme is better for the eyes? [duplicate]

Dark or white color theme is better for the eyes? [duplicate]


There has been a lot of research on this topic since the 1980s and a lot of it still holds true today. One study from the 1980s states this:

However, most studies have shown that dark characters on a light background are superior to light characters on a dark background (when the refresh rate is fairly high). For example, Bauer and Cavonius (1980) found that participants were 26% more accurate in reading text when they read it with dark characters on a light background.

Reference: Bauer, D., & Cavonius, C., R. (1980). Improving the legibility of visual display units through contrast reversal. In E. Grandjean, E. Vigliani (Eds.), Ergonomic Aspects of Visual Display Terminals (pp. 137-142). London: Taylor & Francis

The reason why this matters is because of focus. As this article on UXMovement states, “white stimulates all three types of color sensitive visual receptors in the human eye in nearly equal amounts.” It causes the eye to focus by tightening the iris. Since the eye is focused, dark letter forms on light backgrounds are easier to read. When using a dark background with strong light letter forms, the iris opens to allow more light in, but that causes letter forms to blur. Why?

People with astigmatism (approximately 50% of the population) find it harder to read white text on black than black text on white. Part of this has to do with light levels: with a bright display (white background) the iris closes a bit more, decreasing the effect of the “deformed” lens; with a dark display (black background) the iris opens to receive more light and the deformation of the lens creates a much fuzzier focus at the eye.

Jason Harrison – Post Doctoral Fellow, Imager Lab Manager – Sensory Perception and Interaction Research Group, University of British Columbia

Now there seem to be varying factors into contrast and legibility. Room ambient lighting. Brightness of the monitor. Also you can mitigate the straining effects of white (#FFF) on black (#000) by simply lessening the contrast like using a light gray (#EEE, #DDD, #CCC) on a dark background (#111, #222).

Update (Feb 7, 2020):

A new article from the Nielsen Norman Group entitled, “Dark Mode vs. Light Mode: Which Is Better?”, brings some more research to this topic. A couple key findings in the article:

Cosima Piepenbrock and her colleagues at the Institut für Experimentelle Psychologie in Düsseldorf, Germany studied two groups of adults with normal (or corrected-to-normal) vision: young adults (18 to 33 years old) and older adults (60 to 85 years old). None of the participants suffered from any eye diseases (e.g., cataract).

Their results showed that light mode won across all dimensions: irrespective of age, the positive contrast polarity was better for both visual-acuity tasks and for proofreading tasks. However, the difference between light mode and dark mode in the visual-acuity task was smaller for older adults than for younger adults — meaning that, although light mode was better for older adults, too, they did not benefit from it as much as younger adults, at least in the visual-acuity task.

The research did find though that dark mode seemed to be beneficial for users with impaired vision:

In Legge’s study, each of the 7 participants with cloudy ocular media had better reading rates with dark modes, whereas the rest of the participants, who had impaired central vision, were not affected by contrast polarity.

Though they did note one caveat that this study used CRT displays instead of LEDs displays.

A few takeaways from the article:

  1. In general, light mode leads to better performance most of the time for users with normal or corrected-to-normal vision.
  2. While light mode performs better, those gain seem to be more short-term. Long-term exposure may be result in myopia.
  3. Increased font-size in dark mode doesn’t offset the gains from light-mode.
  4. Providing a dark mode though is still recommended though becomes of the potential long-term effects with light mode, some visual impairments perform better in dark mode, and some users simply prefer it.
  5. For applications which provide long-form reading (books, articles, even news sites), dark mode options are recommended.

One other note with the studies cited in the article is that the studies focused on “glanceable” reading (i.e. reading 1-2 words on a mobile phone, smartwatch, or car dashboard).

Further reading:

  • UX.SE Post: “Which color scheme to choose for applications that require long work hours?”
  • Applying Color Theory to Digital Displays
  • Why light text on dark backgrounds is a bad idea.
  • When to Use White Text on a Dark Background
  • Journal of VisionInteraction of Ambient Lighting and LCD Polarity on Text Processing and Viewing Comfort
  • Journal of VisionWhy is light text harder to read than dark text?
  • NN/gLight Mode vs Dark Mode: Which Is Better?

For me, a dark background in a dark room or a bright background in a bright room is ideal.
Bright rooms causes the eye to let less light in, making dark backgrounds and the little bright letters even darker.

As for the dark room: being able to see the rest of the room is important for me to be able to look away from the screen now and then.

Have a look at GPS-devices for use in cars. They have different themes depending on the time of day.

Computer vision syndrome expert Dr. James Sheedy:

“The best color combination for your eyes is black text on a white background, though other dark-on-light combinations also work well.”

SOURCE: http://www.allaboutvision.com/cvs/irritated.htm (independent source of trustworthy information on eye health)

Personally for me light text on dark background strains my eyes, and that’s why I have always wondered why so many colleagues use light text on dark background, and keep saying it’s better for the eye, since for me only normal thing has been dark text on white background.

Related Solutions

Only last link of css is taking effect

There is nothing wrong with your code itself, assuming that all three CSS links are indeed pointing to the right location and loading the files correctly. By you only seeing styling applied from the final (smallest) media query, I assume that your media queries...

Winsock programming connecting to a public ip

The issue is with your server. You are binding it to This means your server will only bind to the loopback interface, so only clients running on the same machine as the server will be able to connect to the server using this same interface. If you...

Pin-board effect with CSS [closed]

You can use JavaScript to accomplish this but it can't be done with CSS floats alone. A library like jQuery masonry will do it well. The reason? The specs on floats. In particular #5 which says, "The outer top of a floating box may not be higher than the outer...

Calculate the sum with minimum usage of numbers

Here's a hint: 23 : 11 + 11+ 1 ( 3 magic numbers) 120: 110+ 10 (2 magic numbers) The highest digit in the target number is the answer, since you need exactly k magic numbers (all having 1 in the relevant position) in order for the sum to contain the digit k. So...

Why not drop the “auto” keyword? [duplicate]

Your proposal would be rejected on the basis of backward compatibility alone. But let's say for the sake of argument that the standards committee like your idea. You don't take into account the numerous ways you can initialize a variable widget w; // (a) widget...

Recursive to iterative using a systematic method [closed]

So, to restate the question. We have a function f, in our case fac. def fac(n): if n==0: return 1 else: return n*fac(n-1) It is implemented recursively. We want to implement a function facOpt that does the same thing but iteratively. fac is written almost in...

How can I match values in one file to ranges from another?

if the data file sizes are not huge, there is a simpler way $ join input1 input2 | awk '$5<$4 && $3<$5 {print $2, $5-$3+1}' B100002 32 B100043 15 B123465 3 This Perl code seems to solve your problem It is a common idiom: to load the entire...

Javascript difference between “=” and “===” [duplicate]

You need to use == or === for equality checking. = is the assignment operator. You can read about assignment operators here on MDN. As a quick reference as you are learning JS: = assignment operator == equal to === equal value and equal type != not equal !==...

Compiler complains about misplaced else [closed]

Your compiler complains about an misplaced else because, well, there is an else without a preceding if: // ... for (j=1; j<n-i; j++) { if(a[j]<=a[j+1]) { // ... } // END OF IF } // END OF FOR else { continue; } // ... The else in your code does not follow...

Bootstrap – custom alerts with progress bar

/* !important are just used to overide the bootstrap css in the snippet */ .alertContainer { border-radius: 0 !important; border-width: 0 !important; padding: 0 !important; height: auto !important; position: absolute !important; bottom: 15px !important; left:...

How to Garbage Collect an external Javascript load?

Yes, s.onload = null is useful and will garbage collect! As of 2019, it is not possible to explicitly or programmatically trigger garbage collection in JavaScript. That means it collects when it wants. Although there is cases where setting to null may do a GC...

Math programming with python

At first, what you are looking for is the modulo operator and the function math.floor() Modulo from wikipedia: In computing, the modulo operation finds the remainder after division of one number by another (sometimes called modulus). for example: 12%12=0...

Android slide over letters to create a word [closed]

Here some advice you can use: First for each cell you can create an object that represents the state of that cell: class Cell { char mChar; int row,column; boolean isSelected; } then you can create a 2D array of your cells Cell[][] mTable = ... For views you...

Sum two integers in Java

You reused the x and y variable names (hence the variable x is already defined in method main error), and forgot to assign the ints read from the Scanner to the x and y variables. Besides, there's no need to create two Scanner objects. public static void...