Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/zerotohero-dev/font-size
font-size is a command-line utility to calculate the best font-size for you, so that your eyes won’t bleed during long programming sessions.
https://github.com/zerotohero-dev/font-size
accessibility byte-sized bytesized-javascript bytesized-tv distance education eyes font-preference font-size inches javascript nodejs pixel screen-resolution screencast studies training usability user-experience vidcast
Last synced: 3 months ago
JSON representation
font-size is a command-line utility to calculate the best font-size for you, so that your eyes won’t bleed during long programming sessions.
- Host: GitHub
- URL: https://github.com/zerotohero-dev/font-size
- Owner: zerotohero-dev
- License: mit
- Created: 2017-03-05T19:50:46.000Z (almost 8 years ago)
- Default Branch: master
- Last Pushed: 2021-05-09T11:18:17.000Z (over 3 years ago)
- Last Synced: 2024-10-13T23:15:57.407Z (4 months ago)
- Topics: accessibility, byte-sized, bytesized-javascript, bytesized-tv, distance, education, eyes, font-preference, font-size, inches, javascript, nodejs, pixel, screen-resolution, screencast, studies, training, usability, user-experience, vidcast
- Language: JavaScript
- Homepage: https://bytesized.tv/
- Size: 67.4 KB
- Stars: 7
- Watchers: 3
- Forks: 1
- Open Issues: 8
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
- Code of conduct: CODE_OF_CONDUCT.md
Awesome Lists containing this project
README
[![tests][tests]][tests-url]
[![deps][deps]][deps-url]
[![npm][npm]][npm-url]
[![license][license]][license-url][tests]: https://img.shields.io/travis/jsbites/font-size.svg
[tests-url]: https://travis-ci.org/jsbites/font-size
[deps]: https://david-dm.org/jsbites/font-size.svg
[deps-url]: https://david-dm.org/jsbites/font-size
[npm-url]: https://www.npmjs.com/packages/font-size
[npm]: https://img.shields.io/npm/v/font-size.svg
[deploy]: https://img.shields.io/github/last-commit/jsbites/font-size.svg?label=last%20deployed
[deploy-url]: https://github.com/jsbites/font-size/
[license]: https://img.shields.io/npm/l/font-size.svg
[license-url]: https://www.npmjs.com/package/font-size```
___________________
|"|"|"|"|"|"|"|"|"|"|
| f o n t - s i z e |
'-------------------'
````font-size` is a command-line utility that tells gives you the best font size to use based on your font preference, your viewing distance, and your screen’s resolution.
## About `font-size`
`font-size` is a command-line utility that tells gives you the best font size to use based on your font preference, your viewing distance, and your screen’s resolution.
> Note that having a 10-minute walk every couple of hours will also help you protect your eyes (and sanity); and as a side benefit you won’t have eye strains regardless of how tiny your font preference is.
But you know yourself, don’t you? — When you are “in the zone” time dilates, and one earthling day feels like ten minutes to you. — But, not (necessarily) to your body.
**`font-size` will convince you to bump up your font-size a notch**, so that you won’t have to consume Advils like jelly beans when you come back from “the zone” to the real world.
## How “Scientific” is This?
Well, so far (it works for me)™ **:)**.
I’ve read a bunch of papers and meta-studies about text readability(*one of them is cited, inside the source code — see [./lib/config.js](lib/config.js)*). — The problem is: None of the studies that I’ve found target digital screens. I’ve tried to adjust values based on a few facts:
* Programmers use monotype type faces, which are designed to be readable in smaller font-sizes than a typical serif font like “Times New Roman”.
* Modern displays have good enough resolution; so reading a text on a Retina display should be a fairly similar experience to reading the same text at the same distance and size on paper.To me, it gave fairly accurate results. Though, [please file an issue](https://github.com/jsbites/font-size/issues/new) if you think the settings can be adjusted to give better results (*see [./lib/config.js](lib/config.js) for the configuration options*).
Also, [please shoot me an email](mailto:[email protected]) if you find an article or study that covers the effect of typeface and font x-height ratio regarding readability and eye fatigue.
## Can You Be More Specific, Please?
The “*x-height critical size*” of a text that you are reading, in other words, the minimum size that the text is still legible is about **4.5 points at 16’’**, or **about 0.2° of visual arc**, for readers with **20/20 vision**.
For older readers, this increases to **0.3°** (*~6 pts*); for those with much older and less flexible eyes, it rises to as much as **1.0°** (*~20 pts*).
The lesson to learn here is that, the exact font size and shape that feels comfortable depends on many factors including, age, eyesight, and personal preference (*there even are people who **love** to code with “Comic Sans MS”, for example*)
I’ve created this app to suit for a normalized used case.
Also note that:
* Each font will have a different **x-height**.
* **x-height** is not the only thing that increases the font’s readability. A narrow font with a high x-height can be less readable than a wider font with relatively lower x-height.
* Certain people (*people with astigmatism, dyslexia…) feel more comfortable with certain kinds of fonts regardless of the font’s x-height ratio.
* The angle you look at the screen also affects your visual arc. The code simplifies the computation by assuming that you are directly looking at the screen; which is the case most of the time anyway.Additionally, the article that I cited talks about **print size**. — **72 points** on paper is **1 inches**; that’s a fact, and it does not change.
One other thing is: Although almost all operating systems assume that your monitor has a 96 pixels-per-inch resolution, your display may have higher or lower pixels per physical ruler inch. — Which means 96 computer pixels, which is 1 computer inches, may not be 1 physical-world ruler inch. — To make the math simpler, the algorithm in this app calculates font sizes in pixels instead of points. — If you need a point font-size instead; it should be relatively easy to convert.
## Can I configure it for my taste?
`font-size` assumes perfect vision, or perfectly adjusted vision (*i.e. corrective lenses*).
Your adjusted vision might be less-than-perfect due to many factors, age being one of them.
Currently the only way to configure `font-size` is through **forking it** and changing the visual arc degrees in [./lib/config.js](lib/config.js).
I know that’s not ideal. — Please **create a pull request** if you want to let those values to be configurable externally (*say, by reading an external config file*).
## Installation
Install using **NPM**:
```bash
npm install -g font-size
```## Usage Examples
The `font-size` API is simple; you provide your distance to the screen (*in inches* — sorry rest of the world), the x-height ratio of your preferred font, and your screen resolution (*in PPI*); and `font-size` gives you some recommendations:
```bash
font-size --distance 28 --x-height .53 --resolution 110For your typeface, the minimum legible font size is 19px
(you don’t want to hurt your eyes, do you?).Your text is nicely readable starting from… 22px;
however, anything beyond 27px will damage readability.
```If you are a laptop user, on average, your eyes will be 23’’ from the monitor. Let’s change the distance to see what `font-size` recommends:
```bash
font-size --distance 23 --x-height .53 --resolution 110For your typeface, the minimum legible font size is 16px
(you don’t want to hurt your eyes, do you?).Your text is nicely readable starting from… 18px;
however, anything beyond 22px will damage readability.
```Fair enough. And you generally hold your tablet around 14’’ from your eyes. Let’s recalculate with adjusted distance, using an Apple iPad Mini at 163 dpi:
```bash
font-size --distance 14 --x-height .53 --resolution 163For your typeface, the minimum legible font size is 14px
(you don’t want to hurt your eyes, do you?).Your text is nicely readable starting from… 17px;
however, anything beyond 20px will damage readability.
```## I Need Help
You may use `--help` flag to get help:
```bash
font-size --help
```## Dependencies
You will need the **current** version of [Node.JS](https://nodejs.org/) with all the bells and whistles — [You can install it from nodejs.org](https://nodejs.org/).
`font-size` is self-sufficient; all of its dependencies will be fetched during install time. — You can look at `package.json` to glance over the dependencies.
## Package Scripts
Here are the helper npm scripts that you can run via `npm`:
* `npm test`: Executes the unit tests.
* `npm run lint`: Checks whether the source JavaScript is well-formed.## Important Files and Folders
* `./index.js`: The main entry point.
* `bin`: Scripts that are mostly used by `npm`.
* `CHANGELOG.md`: A log of what has been done since the last version.
* `CODE_OF_CONDUCT.md`: Tells the collaborators to be nice to each other.
* `README.md`: This very file.
* `.eslintrc`: Used for development; configures `eslint`.
* `.travis.yml`: Used for CI; configures Travis.## Wanna Help?
Any help is more than appreciated.
If you want to contribute to the source code, **fork this repository** and **create a pull request**.
> In lieu of a formal style guide, take care to maintain the existing coding style.
Also, don’t forget to add unit tests for any new or changed functionality.
If you want to report a bug; or share a comment or suggestion, [file an issue](https://github.com/jsbites/font-size/issues/new).
## I’ve Found a Bug; I Have an Idea
[For bug reports and suggestions, please file an issue](https://github.com/jsbites/font-size/issues/new).
## Contact Information
* **Project Maintainer**: [Volkan Özçelik](https://volkan.io/)
* **Project Website**: [bytesized.tv](https://bytesized.tv/)## License
MIT-licensed. — [See the license file for details](LICENSE.md).
## Code of Conduct
We are committed to making participation in this project a harassment-free experience for everyone, regardless of the level of experience, gender, gender identity and expression, sexual orientation, disability, personal appearance, body size, race, ethnicity, age, religion, or nationality.
[See the code of conduct for details](CODE_OF_CONDUCT.md).
## A [ByteSized.TV][vidcast] Project
This repository is a part of the [Byte-Sized JavaScript VideoCasts][vidcast].
It is a compilation of short (*around ten minutes*) screencasts about **JavaScript** and related technologies.
[**Learn**, **explore**, and **have fun**][vidcast]!
[vidcast]: https://bytesized.tv/ "ByteSized.TV"