From c78b885e2f0922d85a4b9ad7e8f6a782c304b440 Mon Sep 17 00:00:00 2001 From: Jiminy Panoz Date: Mon, 14 Apr 2025 13:16:49 +0200 Subject: [PATCH 1/8] Remove compensation for a11y font + normalize --- .../ReadiumCSS-a11yFont_pref.css | 17 +++++------------ package.json | 2 +- 2 files changed, 6 insertions(+), 13 deletions(-) diff --git a/css/src/modules/user-settings-submodules/ReadiumCSS-a11yFont_pref.css b/css/src/modules/user-settings-submodules/ReadiumCSS-a11yFont_pref.css index 11d061ff..f80fabb7 100644 --- a/css/src/modules/user-settings-submodules/ReadiumCSS-a11yFont_pref.css +++ b/css/src/modules/user-settings-submodules/ReadiumCSS-a11yFont_pref.css @@ -11,31 +11,24 @@ :root:--font-override[style*="AccessibleDfA"] { /* We won’t use the variable there since we need fallbacks for missing characters */ font-family: AccessibleDfA, Verdana, Tahoma, "Trebuchet MS", sans-serif !important; - --RS__lineHeightCompensation: 1.167; } :root:--font-override[style*="IA Writer Duospace"] { /* We won’t use the variable there since we need fallbacks for missing characters */ font-family: "IA Writer Duospace", Menlo, "DejaVu Sans Mono", "Bitstream Vera Sans Mono", Courier, monospace !important; - --RS__lineHeightCompensation: 1.167; -} - -:root:--font-override:--a11y-normalize { - font-family: var(--USER__fontFamily) !important; - --RS__lineHeightCompensation: 1.167; } /* Maybe users want a setting to normalize any font offered so there is a “a11y Normalize” flag for it */ :root:--font-override:--a11y-font, -:root:--font-override:--a11y-normalize { +:root:--a11y-normalize { font-weight: normal !important; font-style: normal !important; } /* Targeting everything except code. Note that Open Dyslexic has a monospaced font for code */ :root:--font-override:--a11y-font *:not(code):not(var):not(kbd):not(samp), -:root:--font-override:--a11y-normalize *:not(code):not(var):not(kbd):not(samp) { +:root:--a11y-normalize *:not(code):not(var):not(kbd):not(samp) { font-family: inherit !important; font-weight: inherit !important; font-style: inherit !important; @@ -43,7 +36,7 @@ /* Normalizing text-decoration, subs and sups */ :root:--font-override:--a11y-font *, -:root:--font-override:--a11y-normalize * { +:root:--a11y-normalize * { text-decoration: none !important; font-variant-caps: normal !important; font-variant-position: normal !important; @@ -51,9 +44,9 @@ } :root:--font-override:--a11y-font sup, -:root:--font-override:--a11y-normalize sup, +:root:--a11y-normalize sup, :root:--font-override:--a11y-font sub, -:root:--font-override:--a11y-normalize sub { +:root:--a11y-normalize sub { font-size: 1rem !important; vertical-align: baseline !important; } \ No newline at end of file diff --git a/package.json b/package.json index 28c366bb..84338902 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@readium/css", "description": "A set of reference stylesheets for EPUB Reading Systems", - "version": "2.0.0-beta.10", + "version": "2.0.0-beta.11", "homepage": "https://github.com/readium/readium-css", "license": "BSD-3-Clause", "keywords": [ From ecd0e92175d67f4dae51508db0d9f70685c80f92 Mon Sep 17 00:00:00 2001 From: Jiminy Panoz Date: Mon, 14 Apr 2025 13:27:33 +0200 Subject: [PATCH 2/8] Update docs for previous changes --- docs/CSS12-user_prefs.md | 2 -- docs/CSS19-api.md | 2 -- docs/CSS28-migration_guide.md | 8 +++++++- docs/ReadiumCSS_docs.epub | Bin 3686176 -> 3686376 bytes .../OEBPS/Text/Section-012.xhtml | 2 -- .../OEBPS/Text/Section-019.xhtml | 2 -- .../OEBPS/Text/Section-028.xhtml | 8 ++++++++ docs/ReadiumCSS_docs/OEBPS/Text/nav.xhtml | 3 +++ docs/ReadiumCSS_docs/OEBPS/content.opf | 2 +- docs/ReadiumCSS_docs/OEBPS/toc.ncx | 10 ++++++++-- 10 files changed, 27 insertions(+), 12 deletions(-) diff --git a/docs/CSS12-user_prefs.md b/docs/CSS12-user_prefs.md index 2a6965d9..d4ad65bb 100644 --- a/docs/CSS12-user_prefs.md +++ b/docs/CSS12-user_prefs.md @@ -147,8 +147,6 @@ Users may want to normalize text (no bold, no italics, etc.) for accessibility r Supported value: `readium-a11y-on` -Required flag: `--USER__fontOverride: readium-font-on` - To disable the normalization, you can either set an empty string as a value or remove the property. ### Hiding Ruby Text diff --git a/docs/CSS19-api.md b/docs/CSS19-api.md index bc310ed0..fa9c44ef 100644 --- a/docs/CSS19-api.md +++ b/docs/CSS19-api.md @@ -199,8 +199,6 @@ Preset: `--USER__a11yNormalize: readium-a11y-on` Scope: `html` -Required flag: `:--fontOverride` - Override class: User settings advanced (optional but should be applied by any means necessary if provided to users) It impacts font style, weight and variant, text decoration, super and subscripts. diff --git a/docs/CSS28-migration_guide.md b/docs/CSS28-migration_guide.md index 2f5fb905..68203392 100644 --- a/docs/CSS28-migration_guide.md +++ b/docs/CSS28-migration_guide.md @@ -188,4 +188,10 @@ These settings now work without the flag. This provides with more flexibility si It’s been replaced with the flag `--USER__fontSizeNormalize: readium-normalize-on`, whose purpose is to simply force ReadiumCSS 1’s normalization so that the font-size user setting can be guaranteed to work on all publications, even if the book’s font-sizing is styled using absolute units. -This repurposed flag can be appended as you see fit, when CSS property `zoom` is not supported: you can present it as a toggle to users, or append it programmatically, or append it automatically, etc. \ No newline at end of file +This repurposed flag can be appended as you see fit, when CSS property `zoom` is not supported: you can present it as a toggle to users, or append it programmatically, or append it automatically, etc. + +## Removal of line-height compensation for A11y fonts and normalization + +Since version `2.0.0-beta.11`, ReadiumCSS no longer applies a line-height compensation when AccessibleDfA and IA Writer Duospace are the current user font, or the accessibility normalize flag is set. + +That was a side-effect that could be surprising to implementers, and impacting their line-height user setting experience. \ No newline at end of file diff --git a/docs/ReadiumCSS_docs.epub b/docs/ReadiumCSS_docs.epub index 044f3295eba1d59a58e6497741315760016bd353..21d3b87c956b2c20b6d0c2f5da04092b93d548d1 100644 GIT binary patch delta 25427 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 delta 25304 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 diff --git a/docs/ReadiumCSS_docs/OEBPS/Text/Section-012.xhtml b/docs/ReadiumCSS_docs/OEBPS/Text/Section-012.xhtml index 968e3ec9..238e3f29 100644 --- a/docs/ReadiumCSS_docs/OEBPS/Text/Section-012.xhtml +++ b/docs/ReadiumCSS_docs/OEBPS/Text/Section-012.xhtml @@ -168,8 +168,6 @@ root.style.setProperty("name of var", "");

Supported value: readium-a11y-on

-

Required flag: --USER__fontOverride: readium-font-on

-

Override class: User settings advanced (optional but should be applied by any means necessary if provided to users)

To disable the normalization, you can either set an empty string as a value or remove the property.

diff --git a/docs/ReadiumCSS_docs/OEBPS/Text/Section-019.xhtml b/docs/ReadiumCSS_docs/OEBPS/Text/Section-019.xhtml index 5d871a0d..29672a11 100644 --- a/docs/ReadiumCSS_docs/OEBPS/Text/Section-019.xhtml +++ b/docs/ReadiumCSS_docs/OEBPS/Text/Section-019.xhtml @@ -184,8 +184,6 @@

Scope: html

-

Required flag: :--fontOverride

-

Override class: User settings advanced (optional but should be applied by any means necessary if provided to users)

It impacts font style, weight and variant, text decoration, super and subscripts.

diff --git a/docs/ReadiumCSS_docs/OEBPS/Text/Section-028.xhtml b/docs/ReadiumCSS_docs/OEBPS/Text/Section-028.xhtml index 88316fb3..181f06ae 100644 --- a/docs/ReadiumCSS_docs/OEBPS/Text/Section-028.xhtml +++ b/docs/ReadiumCSS_docs/OEBPS/Text/Section-028.xhtml @@ -228,6 +228,14 @@ const sepiaBackground = sepiaMode.sepiaMode.RS__backgroundColor;

This repurposed flag can be appended as you see fit, when CSS property zoom is not supported: you can present it as a toggle to users, or append it programmatically, or append it automatically, etc.

+ +
+

Removal of line-height compensation for A11y fonts and normalization

+ +

Since version 2.0.0-beta.11, ReadiumCSS no longer applies a line-height compensation when AccessibleDfA and IA Writer Duospace are the current user font, or the accessibility normalize flag is set.

+ +

That was a side-effect that could be surprising to implementers, and impacting their line-height user setting experience.

+
\ No newline at end of file diff --git a/docs/ReadiumCSS_docs/OEBPS/Text/nav.xhtml b/docs/ReadiumCSS_docs/OEBPS/Text/nav.xhtml index 4675a271..42a73b45 100644 --- a/docs/ReadiumCSS_docs/OEBPS/Text/nav.xhtml +++ b/docs/ReadiumCSS_docs/OEBPS/Text/nav.xhtml @@ -747,6 +747,9 @@
  • Removal of advanced settings flag
  • +
  • + Removal of line-height compensation for A11y fonts and normalization +
  • diff --git a/docs/ReadiumCSS_docs/OEBPS/content.opf b/docs/ReadiumCSS_docs/OEBPS/content.opf index bd7e713c..bbfb24af 100644 --- a/docs/ReadiumCSS_docs/OEBPS/content.opf +++ b/docs/ReadiumCSS_docs/OEBPS/content.opf @@ -8,7 +8,7 @@ en urn:uuid:527D093B-9C0A-4C83-8AF6-0A40E91D30FC - 2025-02-21T14:18:37Z + 2025-04-14T12:35:00Z displayTransformability readingOrder diff --git a/docs/ReadiumCSS_docs/OEBPS/toc.ncx b/docs/ReadiumCSS_docs/OEBPS/toc.ncx index 38f8a626..76e1ec7f 100644 --- a/docs/ReadiumCSS_docs/OEBPS/toc.ncx +++ b/docs/ReadiumCSS_docs/OEBPS/toc.ncx @@ -1359,18 +1359,24 @@ - + Removal of Dynamic Leading - + Removal of advanced settings flag + + + Removal of line-height compensation for A11y fonts and normalization + + + \ No newline at end of file From 732e6bbecd7446dbc9a006d06eee6471ea972ca5 Mon Sep 17 00:00:00 2001 From: JayPanoz <12599652+JayPanoz@users.noreply.github.com> Date: Mon, 14 Apr 2025 11:29:50 +0000 Subject: [PATCH 3/8] Update dist --- css/dist/ReadiumCSS-after.css | 19 ++++++------------- css/dist/ReadiumCSS-before.css | 2 +- css/dist/ReadiumCSS-default.css | 2 +- css/dist/cjk-horizontal/ReadiumCSS-after.css | 2 +- css/dist/cjk-horizontal/ReadiumCSS-before.css | 2 +- .../cjk-horizontal/ReadiumCSS-default.css | 2 +- css/dist/cjk-vertical/ReadiumCSS-after.css | 2 +- css/dist/cjk-vertical/ReadiumCSS-before.css | 2 +- css/dist/cjk-vertical/ReadiumCSS-default.css | 2 +- css/dist/rtl/ReadiumCSS-after.css | 2 +- css/dist/rtl/ReadiumCSS-before.css | 2 +- css/dist/rtl/ReadiumCSS-default.css | 2 +- 12 files changed, 17 insertions(+), 24 deletions(-) diff --git a/css/dist/ReadiumCSS-after.css b/css/dist/ReadiumCSS-after.css index 68ad6164..bd8f8e4b 100644 --- a/css/dist/ReadiumCSS-after.css +++ b/css/dist/ReadiumCSS-after.css @@ -1,5 +1,5 @@ /* - * Readium CSS (v. 2.0.0-beta.10) + * Readium CSS (v. 2.0.0-beta.11) * Developers: Jiminy Panoz * Copyright (c) 2017. Readium Foundation. All rights reserved. * Use of this source code is governed by a BSD-style license which is detailed in the @@ -362,34 +362,27 @@ body{ :root[style*="readium-font-on"][style*="AccessibleDfA"]{ font-family:AccessibleDfA, Verdana, Tahoma, "Trebuchet MS", sans-serif !important; - --RS__lineHeightCompensation:1.167; } :root[style*="readium-font-on"][style*="IA Writer Duospace"]{ font-family:"IA Writer Duospace", Menlo, "DejaVu Sans Mono", "Bitstream Vera Sans Mono", Courier, monospace !important; - --RS__lineHeightCompensation:1.167; -} - -:root[style*="readium-font-on"][style*="readium-a11y-on"]{ - font-family:var(--USER__fontFamily) !important; - --RS__lineHeightCompensation:1.167; } :root[style*="readium-font-on"][style*="AccessibleDfA"],:root[style*="readium-font-on"][style*="IA Writer Duospace"], -:root[style*="readium-font-on"][style*="readium-a11y-on"]{ +:root[style*="readium-a11y-on"]{ font-style:normal !important; font-weight:normal !important; } :root[style*="readium-font-on"][style*="AccessibleDfA"] *:not(code):not(var):not(kbd):not(samp),:root[style*="readium-font-on"][style*="IA Writer Duospace"] *:not(code):not(var):not(kbd):not(samp), -:root[style*="readium-font-on"][style*="readium-a11y-on"] *:not(code):not(var):not(kbd):not(samp){ +:root[style*="readium-a11y-on"] *:not(code):not(var):not(kbd):not(samp){ font-family:inherit !important; font-style:inherit !important; font-weight:inherit !important; } :root[style*="readium-font-on"][style*="AccessibleDfA"] *,:root[style*="readium-font-on"][style*="IA Writer Duospace"] *, -:root[style*="readium-font-on"][style*="readium-a11y-on"] *{ +:root[style*="readium-a11y-on"] *{ text-decoration:none !important; font-variant-caps:normal !important; font-variant-numeric:normal !important; @@ -397,10 +390,10 @@ body{ } :root[style*="readium-font-on"][style*="AccessibleDfA"] sup,:root[style*="readium-font-on"][style*="IA Writer Duospace"] sup, -:root[style*="readium-font-on"][style*="readium-a11y-on"] sup, +:root[style*="readium-a11y-on"] sup, :root[style*="readium-font-on"][style*="AccessibleDfA"] sub, :root[style*="readium-font-on"][style*="IA Writer Duospace"] sub, -:root[style*="readium-font-on"][style*="readium-a11y-on"] sub{ +:root[style*="readium-a11y-on"] sub{ font-size:1rem !important; vertical-align:baseline !important; } diff --git a/css/dist/ReadiumCSS-before.css b/css/dist/ReadiumCSS-before.css index 2b86feed..5499eb36 100644 --- a/css/dist/ReadiumCSS-before.css +++ b/css/dist/ReadiumCSS-before.css @@ -1,5 +1,5 @@ /* - * Readium CSS (v. 2.0.0-beta.10) + * Readium CSS (v. 2.0.0-beta.11) * Developers: Jiminy Panoz * Copyright (c) 2017. Readium Foundation. All rights reserved. * Use of this source code is governed by a BSD-style license which is detailed in the diff --git a/css/dist/ReadiumCSS-default.css b/css/dist/ReadiumCSS-default.css index 78e6c277..4bdf047c 100644 --- a/css/dist/ReadiumCSS-default.css +++ b/css/dist/ReadiumCSS-default.css @@ -1,5 +1,5 @@ /* - * Readium CSS (v. 2.0.0-beta.10) + * Readium CSS (v. 2.0.0-beta.11) * Developers: Jiminy Panoz * Copyright (c) 2017. Readium Foundation. All rights reserved. * Use of this source code is governed by a BSD-style license which is detailed in the diff --git a/css/dist/cjk-horizontal/ReadiumCSS-after.css b/css/dist/cjk-horizontal/ReadiumCSS-after.css index 736a4dd6..8fa878e1 100644 --- a/css/dist/cjk-horizontal/ReadiumCSS-after.css +++ b/css/dist/cjk-horizontal/ReadiumCSS-after.css @@ -1,5 +1,5 @@ /* - * Readium CSS (v. 2.0.0-beta.10) + * Readium CSS (v. 2.0.0-beta.11) * Developers: Jiminy Panoz * Copyright (c) 2017. Readium Foundation. All rights reserved. * Use of this source code is governed by a BSD-style license which is detailed in the diff --git a/css/dist/cjk-horizontal/ReadiumCSS-before.css b/css/dist/cjk-horizontal/ReadiumCSS-before.css index 51d6da0a..db2c2bee 100644 --- a/css/dist/cjk-horizontal/ReadiumCSS-before.css +++ b/css/dist/cjk-horizontal/ReadiumCSS-before.css @@ -1,5 +1,5 @@ /* - * Readium CSS (v. 2.0.0-beta.10) + * Readium CSS (v. 2.0.0-beta.11) * Developers: Jiminy Panoz * Copyright (c) 2017. Readium Foundation. All rights reserved. * Use of this source code is governed by a BSD-style license which is detailed in the diff --git a/css/dist/cjk-horizontal/ReadiumCSS-default.css b/css/dist/cjk-horizontal/ReadiumCSS-default.css index a9274aab..b944bd26 100644 --- a/css/dist/cjk-horizontal/ReadiumCSS-default.css +++ b/css/dist/cjk-horizontal/ReadiumCSS-default.css @@ -1,5 +1,5 @@ /* - * Readium CSS (v. 2.0.0-beta.10) + * Readium CSS (v. 2.0.0-beta.11) * Developers: Jiminy Panoz * Copyright (c) 2017. Readium Foundation. All rights reserved. * Use of this source code is governed by a BSD-style license which is detailed in the diff --git a/css/dist/cjk-vertical/ReadiumCSS-after.css b/css/dist/cjk-vertical/ReadiumCSS-after.css index 084cf833..756c46e7 100644 --- a/css/dist/cjk-vertical/ReadiumCSS-after.css +++ b/css/dist/cjk-vertical/ReadiumCSS-after.css @@ -1,5 +1,5 @@ /* - * Readium CSS (v. 2.0.0-beta.10) + * Readium CSS (v. 2.0.0-beta.11) * Developers: Jiminy Panoz * Copyright (c) 2017. Readium Foundation. All rights reserved. * Use of this source code is governed by a BSD-style license which is detailed in the diff --git a/css/dist/cjk-vertical/ReadiumCSS-before.css b/css/dist/cjk-vertical/ReadiumCSS-before.css index 5bb2c714..632bc3f6 100644 --- a/css/dist/cjk-vertical/ReadiumCSS-before.css +++ b/css/dist/cjk-vertical/ReadiumCSS-before.css @@ -1,5 +1,5 @@ /* - * Readium CSS (v. 2.0.0-beta.10) + * Readium CSS (v. 2.0.0-beta.11) * Developers: Jiminy Panoz * Copyright (c) 2017. Readium Foundation. All rights reserved. * Use of this source code is governed by a BSD-style license which is detailed in the diff --git a/css/dist/cjk-vertical/ReadiumCSS-default.css b/css/dist/cjk-vertical/ReadiumCSS-default.css index c64cd0bf..2939e9fc 100644 --- a/css/dist/cjk-vertical/ReadiumCSS-default.css +++ b/css/dist/cjk-vertical/ReadiumCSS-default.css @@ -1,5 +1,5 @@ /* - * Readium CSS (v. 2.0.0-beta.10) + * Readium CSS (v. 2.0.0-beta.11) * Developers: Jiminy Panoz * Copyright (c) 2017. Readium Foundation. All rights reserved. * Use of this source code is governed by a BSD-style license which is detailed in the diff --git a/css/dist/rtl/ReadiumCSS-after.css b/css/dist/rtl/ReadiumCSS-after.css index e5c8730f..a2b1cd12 100644 --- a/css/dist/rtl/ReadiumCSS-after.css +++ b/css/dist/rtl/ReadiumCSS-after.css @@ -1,5 +1,5 @@ /* - * Readium CSS (v. 2.0.0-beta.10) + * Readium CSS (v. 2.0.0-beta.11) * Developers: Jiminy Panoz * Copyright (c) 2017. Readium Foundation. All rights reserved. * Use of this source code is governed by a BSD-style license which is detailed in the diff --git a/css/dist/rtl/ReadiumCSS-before.css b/css/dist/rtl/ReadiumCSS-before.css index 51d6da0a..db2c2bee 100644 --- a/css/dist/rtl/ReadiumCSS-before.css +++ b/css/dist/rtl/ReadiumCSS-before.css @@ -1,5 +1,5 @@ /* - * Readium CSS (v. 2.0.0-beta.10) + * Readium CSS (v. 2.0.0-beta.11) * Developers: Jiminy Panoz * Copyright (c) 2017. Readium Foundation. All rights reserved. * Use of this source code is governed by a BSD-style license which is detailed in the diff --git a/css/dist/rtl/ReadiumCSS-default.css b/css/dist/rtl/ReadiumCSS-default.css index ec3e8793..2ac78af7 100644 --- a/css/dist/rtl/ReadiumCSS-default.css +++ b/css/dist/rtl/ReadiumCSS-default.css @@ -1,5 +1,5 @@ /* - * Readium CSS (v. 2.0.0-beta.10) + * Readium CSS (v. 2.0.0-beta.11) * Developers: Jiminy Panoz * Copyright (c) 2017. Readium Foundation. All rights reserved. * Use of this source code is governed by a BSD-style license which is detailed in the From 5599df08a17df3e3e775b36e04c346350967c99a Mon Sep 17 00:00:00 2001 From: Jiminy Panoz Date: Mon, 14 Apr 2025 13:32:49 +0200 Subject: [PATCH 4/8] Update a11y-normalize test --- tests/a11y-normalize.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/a11y-normalize.html b/tests/a11y-normalize.html index 2dea8398..7495857e 100644 --- a/tests/a11y-normalize.html +++ b/tests/a11y-normalize.html @@ -1,5 +1,5 @@ - + Test From 483a421a32afd9e28cd144ecbe6993bd6cf78410 Mon Sep 17 00:00:00 2001 From: Jiminy Panoz Date: Mon, 14 Apr 2025 13:33:11 +0200 Subject: [PATCH 5/8] Bump package-lock for npm --- package-lock.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 2c0b7746..3758b111 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@readium/css", - "version": "2.0.0-beta.10", + "version": "2.0.0-beta.11", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@readium/css", - "version": "2.0.0-beta.10", + "version": "2.0.0-beta.11", "license": "BSD-3-Clause", "devDependencies": { "@daltontan/postcss-import-json": "^1.1.1", From e52635886d629d484c3e37c5a9770a1ce1eda516 Mon Sep 17 00:00:00 2001 From: Jiminy Panoz Date: Mon, 14 Apr 2025 14:20:11 +0200 Subject: [PATCH 6/8] Init ipadOS patch --- css/ReadiumCSS-config.css | 5 +- css/dist/ReadiumCSS-after.css | 59 +++++++++++++++ css/dist/cjk-horizontal/ReadiumCSS-after.css | 59 +++++++++++++++ css/dist/cjk-vertical/ReadiumCSS-after.css | 59 +++++++++++++++ css/dist/rtl/ReadiumCSS-after.css | 59 +++++++++++++++ css/src/ReadiumCSS-after-cjk-horizontal.css | 3 +- css/src/ReadiumCSS-after-cjk-vertical.css | 3 +- css/src/ReadiumCSS-after-rtl.css | 3 +- css/src/ReadiumCSS-after.css | 3 +- css/src/modules/ReadiumCSS-iPadOS_patch.css | 80 ++++++++++++++++++++ 10 files changed, 328 insertions(+), 5 deletions(-) create mode 100644 css/src/modules/ReadiumCSS-iPadOS_patch.css diff --git a/css/ReadiumCSS-config.css b/css/ReadiumCSS-config.css index 3fcc6fd3..050505b1 100644 --- a/css/ReadiumCSS-config.css +++ b/css/ReadiumCSS-config.css @@ -45,4 +45,7 @@ /* Direction i.e. ltr and rtl */ @custom-selector :--ltr [dir="ltr"]; -@custom-selector :--rtl [dir="rtl"]; \ No newline at end of file +@custom-selector :--rtl [dir="rtl"]; + +/* Patch for iPadOS */ +@custom-selector :--ipadOS-patch [style*="readium-iPadOSPatch-on"]; \ No newline at end of file diff --git a/css/dist/ReadiumCSS-after.css b/css/dist/ReadiumCSS-after.css index bd8f8e4b..60d5eeb4 100644 --- a/css/dist/ReadiumCSS-after.css +++ b/css/dist/ReadiumCSS-after.css @@ -591,4 +591,63 @@ body{ :root[style*="readium-normalize-on"][style*="--USER__typeScale"] h3{ font-size:calc(1rem * var(--USER__typeScale)) !important; } +} + +:root[style*="readium-iPadOSPatch-on"] body{ + -webkit-text-size-adjust:none; +} + +:root[style*="readium-iPadOSPatch-on"] p, +:root[style*="readium-iPadOSPatch-on"] h1, +:root[style*="readium-iPadOSPatch-on"] h2, +:root[style*="readium-iPadOSPatch-on"] h3, +:root[style*="readium-iPadOSPatch-on"] h4, +:root[style*="readium-iPadOSPatch-on"] h5, +:root[style*="readium-iPadOSPatch-on"] h6, +:root[style*="readium-iPadOSPatch-on"] li, +:root[style*="readium-iPadOSPatch-on"] th, +:root[style*="readium-iPadOSPatch-on"] td, +:root[style*="readium-iPadOSPatch-on"] dt, +:root[style*="readium-iPadOSPatch-on"] dd, +:root[style*="readium-iPadOSPatch-on"] pre, +:root[style*="readium-iPadOSPatch-on"] address, +:root[style*="readium-iPadOSPatch-on"] details, +:root[style*="readium-iPadOSPatch-on"] summary, +:root[style*="readium-iPadOSPatch-on"] figcaption, +:root[style*="readium-iPadOSPatch-on"] div:not(:has(p, h1, h2, h3, h4, h5, h6, li, th, td, dt, dd, pre, address, aside, details, figcaption, summary)), +:root[style*="readium-iPadOSPatch-on"] aside:not(:has(p, h1, h2, h3, h4, h5, h6, li, th, td, dt, dd, pre, address, aside, details, figcaption, summary)){ + -webkit-text-zoom:reset; +} + +:root[style*="readium-iPadOSPatch-on"] abbr, +:root[style*="readium-iPadOSPatch-on"] b, +:root[style*="readium-iPadOSPatch-on"] bdi, +:root[style*="readium-iPadOSPatch-on"] bdo, +:root[style*="readium-iPadOSPatch-on"] cite, +:root[style*="readium-iPadOSPatch-on"] code, +:root[style*="readium-iPadOSPatch-on"] dfn, +:root[style*="readium-iPadOSPatch-on"] em, +:root[style*="readium-iPadOSPatch-on"] i, +:root[style*="readium-iPadOSPatch-on"] kbd, +:root[style*="readium-iPadOSPatch-on"] mark, +:root[style*="readium-iPadOSPatch-on"] q, +:root[style*="readium-iPadOSPatch-on"] rp, +:root[style*="readium-iPadOSPatch-on"] rt, +:root[style*="readium-iPadOSPatch-on"] ruby, +:root[style*="readium-iPadOSPatch-on"] s, +:root[style*="readium-iPadOSPatch-on"] samp, +:root[style*="readium-iPadOSPatch-on"] small, +:root[style*="readium-iPadOSPatch-on"] span, +:root[style*="readium-iPadOSPatch-on"] strong, +:root[style*="readium-iPadOSPatch-on"] sub, +:root[style*="readium-iPadOSPatch-on"] sup, +:root[style*="readium-iPadOSPatch-on"] time, +:root[style*="readium-iPadOSPatch-on"] u, +:root[style*="readium-iPadOSPatch-on"] var{ + -webkit-text-zoom:normal; +} + +:root[style*="readium-iPadOSPatch-on"] *:first-line, +:root[style*="readium-iPadOSPatch-on"] *:first-letter{ + -webkit-text-zoom:normal; } \ No newline at end of file diff --git a/css/dist/cjk-horizontal/ReadiumCSS-after.css b/css/dist/cjk-horizontal/ReadiumCSS-after.css index 8fa878e1..e7d3406f 100644 --- a/css/dist/cjk-horizontal/ReadiumCSS-after.css +++ b/css/dist/cjk-horizontal/ReadiumCSS-after.css @@ -501,4 +501,63 @@ body{ :root[style*="readium-normalize-on"][style*="--USER__typeScale"] h3{ font-size:calc(1rem * var(--USER__typeScale)) !important; } +} + +:root[style*="readium-iPadOSPatch-on"] body{ + -webkit-text-size-adjust:none; +} + +:root[style*="readium-iPadOSPatch-on"] p, +:root[style*="readium-iPadOSPatch-on"] h1, +:root[style*="readium-iPadOSPatch-on"] h2, +:root[style*="readium-iPadOSPatch-on"] h3, +:root[style*="readium-iPadOSPatch-on"] h4, +:root[style*="readium-iPadOSPatch-on"] h5, +:root[style*="readium-iPadOSPatch-on"] h6, +:root[style*="readium-iPadOSPatch-on"] li, +:root[style*="readium-iPadOSPatch-on"] th, +:root[style*="readium-iPadOSPatch-on"] td, +:root[style*="readium-iPadOSPatch-on"] dt, +:root[style*="readium-iPadOSPatch-on"] dd, +:root[style*="readium-iPadOSPatch-on"] pre, +:root[style*="readium-iPadOSPatch-on"] address, +:root[style*="readium-iPadOSPatch-on"] details, +:root[style*="readium-iPadOSPatch-on"] summary, +:root[style*="readium-iPadOSPatch-on"] figcaption, +:root[style*="readium-iPadOSPatch-on"] div:not(:has(p, h1, h2, h3, h4, h5, h6, li, th, td, dt, dd, pre, address, aside, details, figcaption, summary)), +:root[style*="readium-iPadOSPatch-on"] aside:not(:has(p, h1, h2, h3, h4, h5, h6, li, th, td, dt, dd, pre, address, aside, details, figcaption, summary)){ + -webkit-text-zoom:reset; +} + +:root[style*="readium-iPadOSPatch-on"] abbr, +:root[style*="readium-iPadOSPatch-on"] b, +:root[style*="readium-iPadOSPatch-on"] bdi, +:root[style*="readium-iPadOSPatch-on"] bdo, +:root[style*="readium-iPadOSPatch-on"] cite, +:root[style*="readium-iPadOSPatch-on"] code, +:root[style*="readium-iPadOSPatch-on"] dfn, +:root[style*="readium-iPadOSPatch-on"] em, +:root[style*="readium-iPadOSPatch-on"] i, +:root[style*="readium-iPadOSPatch-on"] kbd, +:root[style*="readium-iPadOSPatch-on"] mark, +:root[style*="readium-iPadOSPatch-on"] q, +:root[style*="readium-iPadOSPatch-on"] rp, +:root[style*="readium-iPadOSPatch-on"] rt, +:root[style*="readium-iPadOSPatch-on"] ruby, +:root[style*="readium-iPadOSPatch-on"] s, +:root[style*="readium-iPadOSPatch-on"] samp, +:root[style*="readium-iPadOSPatch-on"] small, +:root[style*="readium-iPadOSPatch-on"] span, +:root[style*="readium-iPadOSPatch-on"] strong, +:root[style*="readium-iPadOSPatch-on"] sub, +:root[style*="readium-iPadOSPatch-on"] sup, +:root[style*="readium-iPadOSPatch-on"] time, +:root[style*="readium-iPadOSPatch-on"] u, +:root[style*="readium-iPadOSPatch-on"] var{ + -webkit-text-zoom:normal; +} + +:root[style*="readium-iPadOSPatch-on"] *:first-line, +:root[style*="readium-iPadOSPatch-on"] *:first-letter{ + -webkit-text-zoom:normal; } \ No newline at end of file diff --git a/css/dist/cjk-vertical/ReadiumCSS-after.css b/css/dist/cjk-vertical/ReadiumCSS-after.css index 756c46e7..17c641c8 100644 --- a/css/dist/cjk-vertical/ReadiumCSS-after.css +++ b/css/dist/cjk-vertical/ReadiumCSS-after.css @@ -489,4 +489,63 @@ body{ :root[style*="readium-normalize-on"][style*="--USER__typeScale"] h3{ font-size:calc(1rem * var(--USER__typeScale)) !important; } +} + +:root[style*="readium-iPadOSPatch-on"] body{ + -webkit-text-size-adjust:none; +} + +:root[style*="readium-iPadOSPatch-on"] p, +:root[style*="readium-iPadOSPatch-on"] h1, +:root[style*="readium-iPadOSPatch-on"] h2, +:root[style*="readium-iPadOSPatch-on"] h3, +:root[style*="readium-iPadOSPatch-on"] h4, +:root[style*="readium-iPadOSPatch-on"] h5, +:root[style*="readium-iPadOSPatch-on"] h6, +:root[style*="readium-iPadOSPatch-on"] li, +:root[style*="readium-iPadOSPatch-on"] th, +:root[style*="readium-iPadOSPatch-on"] td, +:root[style*="readium-iPadOSPatch-on"] dt, +:root[style*="readium-iPadOSPatch-on"] dd, +:root[style*="readium-iPadOSPatch-on"] pre, +:root[style*="readium-iPadOSPatch-on"] address, +:root[style*="readium-iPadOSPatch-on"] details, +:root[style*="readium-iPadOSPatch-on"] summary, +:root[style*="readium-iPadOSPatch-on"] figcaption, +:root[style*="readium-iPadOSPatch-on"] div:not(:has(p, h1, h2, h3, h4, h5, h6, li, th, td, dt, dd, pre, address, aside, details, figcaption, summary)), +:root[style*="readium-iPadOSPatch-on"] aside:not(:has(p, h1, h2, h3, h4, h5, h6, li, th, td, dt, dd, pre, address, aside, details, figcaption, summary)){ + -webkit-text-zoom:reset; +} + +:root[style*="readium-iPadOSPatch-on"] abbr, +:root[style*="readium-iPadOSPatch-on"] b, +:root[style*="readium-iPadOSPatch-on"] bdi, +:root[style*="readium-iPadOSPatch-on"] bdo, +:root[style*="readium-iPadOSPatch-on"] cite, +:root[style*="readium-iPadOSPatch-on"] code, +:root[style*="readium-iPadOSPatch-on"] dfn, +:root[style*="readium-iPadOSPatch-on"] em, +:root[style*="readium-iPadOSPatch-on"] i, +:root[style*="readium-iPadOSPatch-on"] kbd, +:root[style*="readium-iPadOSPatch-on"] mark, +:root[style*="readium-iPadOSPatch-on"] q, +:root[style*="readium-iPadOSPatch-on"] rp, +:root[style*="readium-iPadOSPatch-on"] rt, +:root[style*="readium-iPadOSPatch-on"] ruby, +:root[style*="readium-iPadOSPatch-on"] s, +:root[style*="readium-iPadOSPatch-on"] samp, +:root[style*="readium-iPadOSPatch-on"] small, +:root[style*="readium-iPadOSPatch-on"] span, +:root[style*="readium-iPadOSPatch-on"] strong, +:root[style*="readium-iPadOSPatch-on"] sub, +:root[style*="readium-iPadOSPatch-on"] sup, +:root[style*="readium-iPadOSPatch-on"] time, +:root[style*="readium-iPadOSPatch-on"] u, +:root[style*="readium-iPadOSPatch-on"] var{ + -webkit-text-zoom:normal; +} + +:root[style*="readium-iPadOSPatch-on"] *:first-line, +:root[style*="readium-iPadOSPatch-on"] *:first-letter{ + -webkit-text-zoom:normal; } \ No newline at end of file diff --git a/css/dist/rtl/ReadiumCSS-after.css b/css/dist/rtl/ReadiumCSS-after.css index a2b1cd12..168323ec 100644 --- a/css/dist/rtl/ReadiumCSS-after.css +++ b/css/dist/rtl/ReadiumCSS-after.css @@ -526,4 +526,63 @@ body{ :root[style*="readium-normalize-on"][style*="--USER__typeScale"] h3{ font-size:calc(1rem * var(--USER__typeScale)) !important; } +} + +:root[style*="readium-iPadOSPatch-on"] body{ + -webkit-text-size-adjust:none; +} + +:root[style*="readium-iPadOSPatch-on"] p, +:root[style*="readium-iPadOSPatch-on"] h1, +:root[style*="readium-iPadOSPatch-on"] h2, +:root[style*="readium-iPadOSPatch-on"] h3, +:root[style*="readium-iPadOSPatch-on"] h4, +:root[style*="readium-iPadOSPatch-on"] h5, +:root[style*="readium-iPadOSPatch-on"] h6, +:root[style*="readium-iPadOSPatch-on"] li, +:root[style*="readium-iPadOSPatch-on"] th, +:root[style*="readium-iPadOSPatch-on"] td, +:root[style*="readium-iPadOSPatch-on"] dt, +:root[style*="readium-iPadOSPatch-on"] dd, +:root[style*="readium-iPadOSPatch-on"] pre, +:root[style*="readium-iPadOSPatch-on"] address, +:root[style*="readium-iPadOSPatch-on"] details, +:root[style*="readium-iPadOSPatch-on"] summary, +:root[style*="readium-iPadOSPatch-on"] figcaption, +:root[style*="readium-iPadOSPatch-on"] div:not(:has(p, h1, h2, h3, h4, h5, h6, li, th, td, dt, dd, pre, address, aside, details, figcaption, summary)), +:root[style*="readium-iPadOSPatch-on"] aside:not(:has(p, h1, h2, h3, h4, h5, h6, li, th, td, dt, dd, pre, address, aside, details, figcaption, summary)){ + -webkit-text-zoom:reset; +} + +:root[style*="readium-iPadOSPatch-on"] abbr, +:root[style*="readium-iPadOSPatch-on"] b, +:root[style*="readium-iPadOSPatch-on"] bdi, +:root[style*="readium-iPadOSPatch-on"] bdo, +:root[style*="readium-iPadOSPatch-on"] cite, +:root[style*="readium-iPadOSPatch-on"] code, +:root[style*="readium-iPadOSPatch-on"] dfn, +:root[style*="readium-iPadOSPatch-on"] em, +:root[style*="readium-iPadOSPatch-on"] i, +:root[style*="readium-iPadOSPatch-on"] kbd, +:root[style*="readium-iPadOSPatch-on"] mark, +:root[style*="readium-iPadOSPatch-on"] q, +:root[style*="readium-iPadOSPatch-on"] rp, +:root[style*="readium-iPadOSPatch-on"] rt, +:root[style*="readium-iPadOSPatch-on"] ruby, +:root[style*="readium-iPadOSPatch-on"] s, +:root[style*="readium-iPadOSPatch-on"] samp, +:root[style*="readium-iPadOSPatch-on"] small, +:root[style*="readium-iPadOSPatch-on"] span, +:root[style*="readium-iPadOSPatch-on"] strong, +:root[style*="readium-iPadOSPatch-on"] sub, +:root[style*="readium-iPadOSPatch-on"] sup, +:root[style*="readium-iPadOSPatch-on"] time, +:root[style*="readium-iPadOSPatch-on"] u, +:root[style*="readium-iPadOSPatch-on"] var{ + -webkit-text-zoom:normal; +} + +:root[style*="readium-iPadOSPatch-on"] *:first-line, +:root[style*="readium-iPadOSPatch-on"] *:first-letter{ + -webkit-text-zoom:normal; } \ No newline at end of file diff --git a/css/src/ReadiumCSS-after-cjk-horizontal.css b/css/src/ReadiumCSS-after-cjk-horizontal.css index 0d1bb302..40436d59 100644 --- a/css/src/ReadiumCSS-after-cjk-horizontal.css +++ b/css/src/ReadiumCSS-after-cjk-horizontal.css @@ -17,4 +17,5 @@ @import "modules/user-settings-submodules/ReadiumCSS-letterSpacing_pref.css"; @import "modules/user-settings-submodules/ReadiumCSS-ruby_pref.css"; @import "modules/user-settings-submodules/ReadiumCSS-imageFilters_pref.css"; -@import "modules/ReadiumCSS-fs_normalize.css"; \ No newline at end of file +@import "modules/ReadiumCSS-fs_normalize.css"; +@import "modules/ReadiumCSS-iPadOS_patch.css"; \ No newline at end of file diff --git a/css/src/ReadiumCSS-after-cjk-vertical.css b/css/src/ReadiumCSS-after-cjk-vertical.css index 6e7ea468..361277bb 100644 --- a/css/src/ReadiumCSS-after-cjk-vertical.css +++ b/css/src/ReadiumCSS-after-cjk-vertical.css @@ -16,4 +16,5 @@ @import "modules/user-settings-submodules/ReadiumCSS-letterSpacing_pref.css"; @import "modules/user-settings-submodules/ReadiumCSS-ruby_pref.css"; @import "modules/user-settings-submodules/ReadiumCSS-imageFilters_pref.css"; -@import "modules/ReadiumCSS-fs_normalize.css"; \ No newline at end of file +@import "modules/ReadiumCSS-fs_normalize.css"; +@import "modules/ReadiumCSS-iPadOS_patch.css"; \ No newline at end of file diff --git a/css/src/ReadiumCSS-after-rtl.css b/css/src/ReadiumCSS-after-rtl.css index ee26c3b8..337e0ba4 100644 --- a/css/src/ReadiumCSS-after-rtl.css +++ b/css/src/ReadiumCSS-after-rtl.css @@ -19,4 +19,5 @@ @import "modules/user-settings-submodules/ReadiumCSS-arabicLigatures_pref.css"; @import "modules/user-settings-submodules/ReadiumCSS-variableFont_pref.css"; @import "modules/user-settings-submodules/ReadiumCSS-imageFilters_pref.css"; -@import "modules/ReadiumCSS-fs_normalize.css"; \ No newline at end of file +@import "modules/ReadiumCSS-fs_normalize.css"; +@import "modules/ReadiumCSS-iPadOS_patch.css"; \ No newline at end of file diff --git a/css/src/ReadiumCSS-after.css b/css/src/ReadiumCSS-after.css index 9f50b115..1ff43418 100644 --- a/css/src/ReadiumCSS-after.css +++ b/css/src/ReadiumCSS-after.css @@ -21,4 +21,5 @@ @import "modules/user-settings-submodules/ReadiumCSS-letterSpacing_pref.css"; @import "modules/user-settings-submodules/ReadiumCSS-variableFont_pref.css"; @import "modules/user-settings-submodules/ReadiumCSS-imageFilters_pref.css"; -@import "modules/ReadiumCSS-fs_normalize.css"; \ No newline at end of file +@import "modules/ReadiumCSS-fs_normalize.css"; +@import "modules/ReadiumCSS-iPadOS_patch.css"; \ No newline at end of file diff --git a/css/src/modules/ReadiumCSS-iPadOS_patch.css b/css/src/modules/ReadiumCSS-iPadOS_patch.css new file mode 100644 index 00000000..898a6e36 --- /dev/null +++ b/css/src/modules/ReadiumCSS-iPadOS_patch.css @@ -0,0 +1,80 @@ +/* Readium CSS + iPadOS + desktop website Patch stylesheet + + A set of style to get around iPadOS specific issues with zoom. + This has to be applied when the desktop version is requested by iPadOS + When the user requests the mobile version it is entirely fine and should + not be used + + See https://github.com/readium/readium-css/issues/172 + + Repo: https://github.com/readium/readium-css */ + +/* Disable iPadOS + desktop zoom intervention */ + +:root:--ipadOS-patch body { + -webkit-text-size-adjust: none; +} + +/* There is nothing we can use in CSS to alternate the values so this will be high maintenance */ + +/* Sanitize flow/block elements, we have to reset them */ + +:root:--ipadOS-patch p, +:root:--ipadOS-patch h1, +:root:--ipadOS-patch h2, +:root:--ipadOS-patch h3, +:root:--ipadOS-patch h4, +:root:--ipadOS-patch h5, +:root:--ipadOS-patch h6, +:root:--ipadOS-patch li, +:root:--ipadOS-patch th, +:root:--ipadOS-patch td, +:root:--ipadOS-patch dt, +:root:--ipadOS-patch dd, +:root:--ipadOS-patch pre, +:root:--ipadOS-patch address, +:root:--ipadOS-patch details, +:root:--ipadOS-patch summary, +:root:--ipadOS-patch figcaption, +:root:--ipadOS-patch div:not(:has(p, h1, h2, h3, h4, h5, h6, li, th, td, dt, dd, pre, address, aside, details, figcaption, summary)), +:root:--ipadOS-patch aside:not(:has(p, h1, h2, h3, h4, h5, h6, li, th, td, dt, dd, pre, address, aside, details, figcaption, summary)) { + -webkit-text-zoom: reset; +} + +/* Sanitize phrasing/inline elements, their value should be the opposite of their parent element… */ + +:root:--ipadOS-patch abbr, +:root:--ipadOS-patch b, +:root:--ipadOS-patch bdi, +:root:--ipadOS-patch bdo, +:root:--ipadOS-patch cite, +:root:--ipadOS-patch code, +:root:--ipadOS-patch dfn, +:root:--ipadOS-patch em, +:root:--ipadOS-patch i, +:root:--ipadOS-patch kbd, +:root:--ipadOS-patch mark, +:root:--ipadOS-patch q, +:root:--ipadOS-patch rp, +:root:--ipadOS-patch rt, +:root:--ipadOS-patch ruby, +:root:--ipadOS-patch s, +:root:--ipadOS-patch samp, +:root:--ipadOS-patch small, +:root:--ipadOS-patch span, +:root:--ipadOS-patch strong, +:root:--ipadOS-patch sub, +:root:--ipadOS-patch sup, +:root:--ipadOS-patch time, +:root:--ipadOS-patch u, +:root:--ipadOS-patch var { + -webkit-text-zoom: normal; +} + +/* Sanitize pseudo elements */ + +:root:--ipadOS-patch *:first-line, +:root:--ipadOS-patch *:first-letter { + -webkit-text-zoom: normal; +} \ No newline at end of file From b0d505b2933689a4801295ff0d5e0b443d9caefa Mon Sep 17 00:00:00 2001 From: Jiminy Panoz Date: Mon, 14 Apr 2025 14:39:07 +0200 Subject: [PATCH 7/8] Update docs for iPadOS Patch --- docs/CSS06-stylesheets_order.md | 3 ++- docs/CSS12-user_prefs.md | 14 ++++++++++++++ docs/CSS19-api.md | 12 ++++++++++++ docs/CSS28-migration_guide.md | 2 ++ docs/ReadiumCSS_docs.epub | Bin 3686376 -> 3686770 bytes .../OEBPS/Text/Section-006.xhtml | 2 ++ .../OEBPS/Text/Section-012.xhtml | 14 +++++++++++++- .../OEBPS/Text/Section-019.xhtml | 10 ++++++++++ .../OEBPS/Text/Section-028.xhtml | 2 ++ 9 files changed, 57 insertions(+), 2 deletions(-) diff --git a/docs/CSS06-stylesheets_order.md b/docs/CSS06-stylesheets_order.md index 0a0f49b5..ea39abfb 100644 --- a/docs/CSS06-stylesheets_order.md +++ b/docs/CSS06-stylesheets_order.md @@ -68,4 +68,5 @@ The following modules must be appended after the author’s stylesheets (`Readiu 15. `ReadiumCSS-variableFont_pref.css` (this contains optical sizing, weight and width prefs) 16. `ReadiumCSS-ruby_pref.css` (CJK only) 17. `ReadiumCSS-imageFilters_pref.css` -8. `ReadiumCSS-fs_normalize.css` \ No newline at end of file +8. `ReadiumCSS-fs_normalize.css` +9. `ReadiumCSS-iPadOS_patch.css` \ No newline at end of file diff --git a/docs/CSS12-user_prefs.md b/docs/CSS12-user_prefs.md index d4ad65bb..77caf443 100644 --- a/docs/CSS12-user_prefs.md +++ b/docs/CSS12-user_prefs.md @@ -101,6 +101,18 @@ Supported value: `readium-normalize-on` Override class: None. +### iPadOS Zoom Patch + +Acts as an explicit switch to force iPadOS patching of zoom issues so that `--USER__fontSize` can work as expected. This should be applied only when the site is requested in its desktop version on iPadOS – mobile version is completely fine. + +``` +--USER__iPadOSPatch +``` + +Supported value: `readium-iPadOSPatch-on` + +Override class: None. + ### Reading Modes We currently have two reading modes for night and sepia. @@ -295,6 +307,8 @@ Recommended values: a range from `75%` to `250%`. Increments are left to impleme Override class: User settings (should be applied by any means necessary) +**Note: iPadOS needs a patch when the site is requested in its desktop version. It is activated with the `readium-iPadOSPatch-on` flag.** + #### Line height ``` diff --git a/docs/CSS19-api.md b/docs/CSS19-api.md index fa9c44ef..21e0a2d6 100644 --- a/docs/CSS19-api.md +++ b/docs/CSS19-api.md @@ -86,6 +86,18 @@ Scope: `html` Override class: None. This flag can be used to force font-size normalization if the browser/rendering engine does not support CSS property `zoom` and the book’s styles are using absolute units, breaking the font-size user submodule. +* * * + +``` +:--ipadOS-patch +``` + +Preset: `--USER__iPadOSPatch: readium-iPadOSPatch-on` + +Scope: `html` + +Override class: None. This flag is used to activate patching of iPadOS’ desktop-class experience in Safari, which disables zoom. + * * * ``` diff --git a/docs/CSS28-migration_guide.md b/docs/CSS28-migration_guide.md index 68203392..2ca7a1cf 100644 --- a/docs/CSS28-migration_guide.md +++ b/docs/CSS28-migration_guide.md @@ -108,6 +108,8 @@ It doesn’t need any change at the implementation level, and should work out of As a side-effect of this new implementation, please note the `--USER__typeScale` setting is no longer available. +Due to iPadOS “desktop-class experience” interventions, a patch has to be applied when the site is requested (by default) in desktop version, and only in this version (mobile website is fine without it). The selector for the flag can be configured (`:--ipadOS-patch`) and is `[style*="readium-iPadOSPatch-on"]` by default. + ## Extension of the font-family user setting override In version 1, the font-family user setting overrode a selection of elements of body copy e.g. `p`, `li`, `dt`, etc. This explained why the font-family of headings would remain the same as the one set in authors’ stylesheets for instance. diff --git a/docs/ReadiumCSS_docs.epub b/docs/ReadiumCSS_docs.epub index 21d3b87c956b2c20b6d0c2f5da04092b93d548d1..21965e8ac105ae13b80439b93cc86a6275ddfa18 100644 GIT binary patch delta 22295 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

  • ReadiumCSS-fs_normalize.css
  • + +
  • ReadiumCSS-iPadOS_patch.css
  • diff --git a/docs/ReadiumCSS_docs/OEBPS/Text/Section-012.xhtml b/docs/ReadiumCSS_docs/OEBPS/Text/Section-012.xhtml index 238e3f29..ebdc36a0 100644 --- a/docs/ReadiumCSS_docs/OEBPS/Text/Section-012.xhtml +++ b/docs/ReadiumCSS_docs/OEBPS/Text/Section-012.xhtml @@ -119,8 +119,18 @@ root.style.setProperty("name of var", "");

    Supported value: readium-normalize-on

    Override class: None.

    + + +
    +

    iPadOS Zoom Patch

    + +

    Acts as an explicit switch to force iPadOS patching of zoom issues so that --USER__fontSize can work as expected. This should be applied only when the site is requested in its desktop version on iPadOS – mobile version is completely fine.

    + +
    --USER__iPadOSPatch
    -

    To switch back to the publisher’s styles, you can either set an empty string as a value or remove the property. This will disable all advanced settings requiring the flag.

    +

    Supported value: readium-iPadOSPatch-on

    + +

    Override class: None.

    @@ -324,6 +334,8 @@ root.style.setProperty("name of var", "");

    Recommended values: a range from 75% to 250%. Increments are left to implementers’ judgment.

    Override class: User settings (should be applied by any means necessary)

    + +

    Note: iPadOS needs a patch when the site is requested in its desktop version. It is activated with the readium-iPadOSPatch-on flag.

    diff --git a/docs/ReadiumCSS_docs/OEBPS/Text/Section-019.xhtml b/docs/ReadiumCSS_docs/OEBPS/Text/Section-019.xhtml index 29672a11..b53a6edc 100644 --- a/docs/ReadiumCSS_docs/OEBPS/Text/Section-019.xhtml +++ b/docs/ReadiumCSS_docs/OEBPS/Text/Section-019.xhtml @@ -90,6 +90,16 @@
    +
    :--ipadOS-patch
    + +

    Preset: --USER__iPadOSPatch: readium-iPadOSPatch-on

    + +

    Scope: html

    + +

    Override class: None. This flag is used to activate patching of iPadOS’ desktop-class experience in Safari, which disables zoom.

    + +
    +
    :--sepia-mode

    Preset: --USER__appearance: readium-sepia-on

    diff --git a/docs/ReadiumCSS_docs/OEBPS/Text/Section-028.xhtml b/docs/ReadiumCSS_docs/OEBPS/Text/Section-028.xhtml index 181f06ae..d7f44e8d 100644 --- a/docs/ReadiumCSS_docs/OEBPS/Text/Section-028.xhtml +++ b/docs/ReadiumCSS_docs/OEBPS/Text/Section-028.xhtml @@ -125,6 +125,8 @@

    It doesn’t need any change at the implementation level, and should work out of the box. All is handled behind the scenes in ReadiumCSS font-size module.

    As a side-effect of this new implementation, please note the --USER__typeScale setting is no longer available.

    + +

    Due to iPadOS “desktop-class experience” interventions, a patch has to be applied when the site is requested (by default) in desktop mode, and only in this mode (mobile website is fine without it). The selector for the flag can be configured (:--ipadOS-patch) and is [style*="readium-iPadOSPatch-on"] by default.

    From 1f27f4577db9202c4146121880a16d732cac7d6d Mon Sep 17 00:00:00 2001 From: Jiminy Panoz Date: Mon, 14 Apr 2025 17:56:39 +0200 Subject: [PATCH 8/8] Update patch for iPadOS pseudo elements --- css/dist/ReadiumCSS-after.css | 3 +-- css/dist/cjk-horizontal/ReadiumCSS-after.css | 3 +-- css/dist/cjk-vertical/ReadiumCSS-after.css | 3 +-- css/dist/rtl/ReadiumCSS-after.css | 3 +-- css/src/modules/ReadiumCSS-iPadOS_patch.css | 5 ++--- 5 files changed, 6 insertions(+), 11 deletions(-) diff --git a/css/dist/ReadiumCSS-after.css b/css/dist/ReadiumCSS-after.css index 60d5eeb4..fc943692 100644 --- a/css/dist/ReadiumCSS-after.css +++ b/css/dist/ReadiumCSS-after.css @@ -647,7 +647,6 @@ body{ -webkit-text-zoom:normal; } -:root[style*="readium-iPadOSPatch-on"] *:first-line, -:root[style*="readium-iPadOSPatch-on"] *:first-letter{ +:root[style*="readium-iPadOSPatch-on"] p:not(:has(b, cite, em, i, q, s, small, span, strong)):first-line{ -webkit-text-zoom:normal; } \ No newline at end of file diff --git a/css/dist/cjk-horizontal/ReadiumCSS-after.css b/css/dist/cjk-horizontal/ReadiumCSS-after.css index e7d3406f..3c9d9c8e 100644 --- a/css/dist/cjk-horizontal/ReadiumCSS-after.css +++ b/css/dist/cjk-horizontal/ReadiumCSS-after.css @@ -557,7 +557,6 @@ body{ -webkit-text-zoom:normal; } -:root[style*="readium-iPadOSPatch-on"] *:first-line, -:root[style*="readium-iPadOSPatch-on"] *:first-letter{ +:root[style*="readium-iPadOSPatch-on"] p:not(:has(b, cite, em, i, q, s, small, span, strong)):first-line{ -webkit-text-zoom:normal; } \ No newline at end of file diff --git a/css/dist/cjk-vertical/ReadiumCSS-after.css b/css/dist/cjk-vertical/ReadiumCSS-after.css index 17c641c8..a44e9660 100644 --- a/css/dist/cjk-vertical/ReadiumCSS-after.css +++ b/css/dist/cjk-vertical/ReadiumCSS-after.css @@ -545,7 +545,6 @@ body{ -webkit-text-zoom:normal; } -:root[style*="readium-iPadOSPatch-on"] *:first-line, -:root[style*="readium-iPadOSPatch-on"] *:first-letter{ +:root[style*="readium-iPadOSPatch-on"] p:not(:has(b, cite, em, i, q, s, small, span, strong)):first-line{ -webkit-text-zoom:normal; } \ No newline at end of file diff --git a/css/dist/rtl/ReadiumCSS-after.css b/css/dist/rtl/ReadiumCSS-after.css index 168323ec..da866614 100644 --- a/css/dist/rtl/ReadiumCSS-after.css +++ b/css/dist/rtl/ReadiumCSS-after.css @@ -582,7 +582,6 @@ body{ -webkit-text-zoom:normal; } -:root[style*="readium-iPadOSPatch-on"] *:first-line, -:root[style*="readium-iPadOSPatch-on"] *:first-letter{ +:root[style*="readium-iPadOSPatch-on"] p:not(:has(b, cite, em, i, q, s, small, span, strong)):first-line{ -webkit-text-zoom:normal; } \ No newline at end of file diff --git a/css/src/modules/ReadiumCSS-iPadOS_patch.css b/css/src/modules/ReadiumCSS-iPadOS_patch.css index 898a6e36..c110d4c2 100644 --- a/css/src/modules/ReadiumCSS-iPadOS_patch.css +++ b/css/src/modules/ReadiumCSS-iPadOS_patch.css @@ -72,9 +72,8 @@ -webkit-text-zoom: normal; } -/* Sanitize pseudo elements */ +/* Sanitize first line pseudo element. We have to filter inline elements as they already have the right value */ -:root:--ipadOS-patch *:first-line, -:root:--ipadOS-patch *:first-letter { +:root[style*=readium-iPadOSPatch-on] p:not(:has(b, cite, em, i, q, s, small, span, strong)):first-line { -webkit-text-zoom: normal; } \ No newline at end of file