From 90231d9cbbcfad494d5b8e8b8bfecef9dbdab76e Mon Sep 17 00:00:00 2001 From: Jiminy Panoz Date: Thu, 12 Sep 2024 16:58:54 +0200 Subject: [PATCH] Remove font-size normalize from doc details --- docs/CSS18-further_details.md | 29 ---- docs/ReadiumCSS_docs.epub | Bin 4072820 -> 4072246 bytes .../OEBPS/Text/Section-018.xhtml | 32 ---- docs/ReadiumCSS_docs/OEBPS/Text/nav.xhtml | 3 - docs/ReadiumCSS_docs/OEBPS/toc.ncx | 146 +++++++++--------- 5 files changed, 70 insertions(+), 140 deletions(-) diff --git a/docs/CSS18-further_details.md b/docs/CSS18-further_details.md index 2e21c16..eecfa8c 100644 --- a/docs/CSS18-further_details.md +++ b/docs/CSS18-further_details.md @@ -130,35 +130,6 @@ An optional primary accentuation `color` you could use for headings or any other An optional secondary accentuation `color` you could use for any element of your choice. -## Font Size Normalize and the Type Scale - -The assumption is that at least basic semantic elements’ `font-size` can be interpolated to a type scale, with minimal variation (±1–2 pixels difference for each element) in comparison to authors’ styles. - -We’re using the `calc()` function to emulate the following: - -``` -h1 = base font-size × typeScale ^ 3 (power of 3) -h2 = base font-size × typeScale ^ 2 (power of 2) -h3 = base font-size × typeScale -h4 = base font-size -body = base font-size -``` - -In which `typeScale` can be customized to match the actual scale used in the publication. There lies the flexibility of this normalize. - -Getting the type scale is a one-two punch: - -1. `parseInt` of the computed `font-size` for a heading and the base (division = result)* -2. `Math.pow(result, 1/n)`, in which `n` is `3` for `h1` (cubic root) and `2` for `h2` (square root). - -\* `h3` stops here. - -Then the `font-size` for each heading and body copy element will be recomputed based on this type scale. - -Of course this approach is limited, there is little we can do to account for ids, classes, etc. - -But it can at least be used for themes, or an opt-in user setting. - ## Dynamic leading Readium CSS automagically finds the ideal `line-height` of the current font and `font-size` in use if the author hasn’t set an explicit value. diff --git a/docs/ReadiumCSS_docs.epub b/docs/ReadiumCSS_docs.epub index f43d4379c209219d6fc21f9838bd53cda570d28e..c6fcc7fc20a681a3d7bbc005ddf6ac51dfc5b33a 100644 GIT binary patch delta 12923 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 diff --git a/docs/ReadiumCSS_docs/OEBPS/Text/Section-018.xhtml b/docs/ReadiumCSS_docs/OEBPS/Text/Section-018.xhtml index f988c0d..4e96995 100644 --- a/docs/ReadiumCSS_docs/OEBPS/Text/Section-018.xhtml +++ b/docs/ReadiumCSS_docs/OEBPS/Text/Section-018.xhtml @@ -133,38 +133,6 @@ -
-

Font Size Normalize and the Type Scale

- -

The assumption is that at least basic semantic elements’ font-size can be interpolated to a type scale, with minimal variation (±1–2 pixels difference for each element) in comparison to authors’ styles.

- -

We’re using the calc() function to emulate the following:

- -
h1 = base font-size × typeScale ^ 3 (power of 3) 
-h2 = base font-size × typeScale ^ 2 (power of 2) 
-h3 = base font-size × typeScale 
-h4 = base font-size 
-body = base font-size
- -

In which typeScale can be customized to match the actual scale used in the publication. There lies the flexibility of this normalize.

- -

Getting the type scale is a one-two punch:

- -
    -
  1. parseInt of the computed font-size for a heading and the base (division = result)*
  2. - -
  3. Math.pow(result, 1/n), in which n is 3 for h1 (cubic root) and 2 for h2 (square root).
  4. -
- -

* h3 stops here.

- -

Then the font-size for each heading and body copy element will be recomputed based on this type scale.

- -

Of course this approach is limited, there is little we can do to account for ids, classes, etc.

- -

But it can at least be used for themes, or an opt-in user setting.

-
-

Dynamic leading

diff --git a/docs/ReadiumCSS_docs/OEBPS/Text/nav.xhtml b/docs/ReadiumCSS_docs/OEBPS/Text/nav.xhtml index 40fa2d6..3ed7440 100644 --- a/docs/ReadiumCSS_docs/OEBPS/Text/nav.xhtml +++ b/docs/ReadiumCSS_docs/OEBPS/Text/nav.xhtml @@ -502,9 +502,6 @@
  • The Internal Framework
  • -
  • - Font Size Normalize and the Type Scale -
  • Dynamic leading
  • diff --git a/docs/ReadiumCSS_docs/OEBPS/toc.ncx b/docs/ReadiumCSS_docs/OEBPS/toc.ncx index a75358c..9b22d5c 100644 --- a/docs/ReadiumCSS_docs/OEBPS/toc.ncx +++ b/docs/ReadiumCSS_docs/OEBPS/toc.ncx @@ -916,432 +916,426 @@ - - Font Size Normalize and the Type Scale - - - - Dynamic leading - + Conditional Selectors for user settings - + Themes - + Readium CSS Variables API - + How to set and remove user preferences - + Customizable medias - + Customizable flags - + Reading System Styles - + Reading Modes - + User Settings - + List of proposals and specs impacting Readium CSS - + Media Queries Level 5 - + Logical Properties and Values - + CSS Extensions - + Calc notation: min() and max() - + User Agent Properties - + CSS Rhythmic Sizing - + CSS Fonts Module Level 4 - + COGA Semantics to Enable Personalization - + Multicol editing - + W3C i18n - + CSSOM (a.k.a. Houdini) - + EPUB Compatibility - + Introduction - + CSS At-rules - + Non-standard Kindle Media queries - + Interactive and Fixed-layout EPUB 2 - + Metadata - + Attributes - + Webkit’s CSS multi-column extensions - + Non-standard CSS properties - + EPUB properties - + Install, test and build Readium CSS - + Install and init references for regression tests - + Build - + Test - + Fixed-layouts’ Reading Systems Requirements - + Styling - + Scaling - + Notes - + E-production feedback and requests - + CSS Authors’ typical profile - + Workflow and authoring - + Worries and issues - + Popular requests - + Interoperability issues reported - + CSS Performance Hacks - + Will-change - + CSS Containment - + i18n glossary - + Arabic - + Chinese - + Indic - + Japanese - + Features that were considered but not implemented - + Alternate background colors for lines (A11Y) - + Contrasting text against backgrounds in custom user themes - + Handle day/night theme based on OSs’ light/dark mode - + Migration Guide - + Removal of responsive columns - + Number of columns is no longer limited - + Addition of a flag to disable vertical-writing pagination - + Removal of -webkit-perspective hack for older versions of Chromium - + Replacement of page margins user setting with line length user setting - + Improvement of overflow - + Re-implementation of the font-size user setting - + Extension of the font-family user setting override - + Updated default font stacks - + Updated recommandations for libre and open source fonts - + Support for variable fonts - + Addition of a fonts patch for Android