From ced644a50c435b42e07d2a639d40937515c808cb Mon Sep 17 00:00:00 2001 From: Jiminy Panoz Date: Tue, 15 Apr 2025 14:42:16 +0200 Subject: [PATCH 1/3] Create flag for deprecated font-size setting --- css/ReadiumCSS-config.css | 3 + css/dist/ReadiumCSS-after.css | 95 +++++++------- css/dist/ReadiumCSS-before.css | 2 +- css/dist/ReadiumCSS-default.css | 2 +- css/dist/cjk-horizontal/ReadiumCSS-after.css | 95 +++++++------- css/dist/cjk-horizontal/ReadiumCSS-before.css | 2 +- .../cjk-horizontal/ReadiumCSS-default.css | 2 +- css/dist/cjk-vertical/ReadiumCSS-after.css | 95 +++++++------- css/dist/cjk-vertical/ReadiumCSS-before.css | 2 +- css/dist/cjk-vertical/ReadiumCSS-default.css | 2 +- css/dist/rtl/ReadiumCSS-after.css | 95 +++++++------- css/dist/rtl/ReadiumCSS-before.css | 2 +- css/dist/rtl/ReadiumCSS-default.css | 2 +- css/src/modules/ReadiumCSS-fs_normalize.css | 117 +++++++++--------- .../ReadiumCSS-fontSize_pref.css | 9 +- package-lock.json | 4 +- package.json | 2 +- 17 files changed, 272 insertions(+), 259 deletions(-) diff --git a/css/ReadiumCSS-config.css b/css/ReadiumCSS-config.css index 050505b1..91a01965 100644 --- a/css/ReadiumCSS-config.css +++ b/css/ReadiumCSS-config.css @@ -18,6 +18,9 @@ /* Font-family override */ @custom-selector :--font-override [style*="readium-font-on"]; +/* Disabling the new implementation for font-size */ +@custom-selector :--deprecated-font-size [style*="readium-deprecatedFontSize-on"]; + /* Font-size normalization for engines that don’t support zoom */ @custom-selector :--fs-normalize [style*="readium-normalize-on"]; diff --git a/css/dist/ReadiumCSS-after.css b/css/dist/ReadiumCSS-after.css index fc943692..9e4dff7c 100644 --- a/css/dist/ReadiumCSS-after.css +++ b/css/dist/ReadiumCSS-after.css @@ -1,5 +1,5 @@ /* - * Readium CSS (v. 2.0.0-beta.11) + * Readium CSS (v. 2.0.0-beta.12) * 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 @@ -398,7 +398,7 @@ body{ vertical-align:baseline !important; } -:root[style*="--USER__fontSize"] body{ +:root:not([style*="readium-deprecatedFontSize-on"])[style*="--USER__fontSize"] body{ zoom:var(--USER__fontSize) !important; } @@ -409,6 +409,10 @@ body{ } } +:root[style*="readium-deprecatedFontSize-on"][style*="--USER__fontSize"]{ + font-size:var(--USER__fontSize) !important; +} + :root[style*="--USER__lineHeight"]{ line-height:var(--USER__lineHeight) !important; } @@ -536,61 +540,58 @@ body{ filter:invert(100%) !important; } -@supports not (zoom: 1){ - - :root[style*="readium-normalize-on"]{ - --USER__typeScale:1.2; - } +:root[style*="readium-normalize-on"]{ + --USER__typeScale:1.2; +} - :root[style*="readium-normalize-on"] p, - :root[style*="readium-normalize-on"] li, - :root[style*="readium-normalize-on"] div, - :root[style*="readium-normalize-on"] pre, - :root[style*="readium-normalize-on"] dd{ - font-size:1rem !important; - } +:root[style*="readium-normalize-on"] p, +:root[style*="readium-normalize-on"] li, +:root[style*="readium-normalize-on"] div, +:root[style*="readium-normalize-on"] pre, +:root[style*="readium-normalize-on"] dd{ + font-size:1rem !important; +} - :root[style*="readium-normalize-on"] h1{ - font-size:1.75rem !important; - font-size:calc(((1rem * var(--USER__typeScale)) * var(--USER__typeScale)) * var(--USER__typeScale)) !important; - } +:root[style*="readium-normalize-on"] h1{ + font-size:1.75rem !important; + font-size:calc(((1rem * var(--USER__typeScale)) * var(--USER__typeScale)) * var(--USER__typeScale)) !important; +} - :root[style*="readium-normalize-on"] h2{ - font-size:1.5rem !important; - font-size:calc((1rem * var(--USER__typeScale)) * var(--USER__typeScale)) !important; - } +:root[style*="readium-normalize-on"] h2{ + font-size:1.5rem !important; + font-size:calc((1rem * var(--USER__typeScale)) * var(--USER__typeScale)) !important; +} - :root[style*="readium-normalize-on"] h3{ - font-size:1.25rem !important; - font-size:calc(1rem * var(--USER__typeScale)) !important; - } +:root[style*="readium-normalize-on"] h3{ + font-size:1.25rem !important; + font-size:calc(1rem * var(--USER__typeScale)) !important; +} - :root[style*="readium-normalize-on"] h4, - :root[style*="readium-normalize-on"] h5, - :root[style*="readium-normalize-on"] h6{ - font-size:1rem !important; - } +:root[style*="readium-normalize-on"] h4, +:root[style*="readium-normalize-on"] h5, +:root[style*="readium-normalize-on"] h6{ + font-size:1rem !important; +} - :root[style*="readium-normalize-on"] small{ - font-size:smaller !important; - } +:root[style*="readium-normalize-on"] small{ + font-size:smaller !important; +} - :root[style*="readium-normalize-on"] sub, - :root[style*="readium-normalize-on"] sup{ - font-size:67.5% !important; - } +:root[style*="readium-normalize-on"] sub, +:root[style*="readium-normalize-on"] sup{ + font-size:67.5% !important; +} - :root[style*="readium-normalize-on"][style*="--USER__typeScale"] h1{ - font-size:calc(((1rem * var(--USER__typeScale)) * var(--USER__typeScale)) * var(--USER__typeScale)) !important; - } +:root[style*="readium-normalize-on"][style*="--USER__typeScale"] h1{ + font-size:calc(((1rem * var(--USER__typeScale)) * var(--USER__typeScale)) * var(--USER__typeScale)) !important; +} - :root[style*="readium-normalize-on"][style*="--USER__typeScale"] h2{ - font-size:calc((1rem * var(--USER__typeScale)) * var(--USER__typeScale)) !important; - } +:root[style*="readium-normalize-on"][style*="--USER__typeScale"] h2{ + font-size:calc((1rem * var(--USER__typeScale)) * var(--USER__typeScale)) !important; +} - :root[style*="readium-normalize-on"][style*="--USER__typeScale"] h3{ - font-size:calc(1rem * var(--USER__typeScale)) !important; - } +:root[style*="readium-normalize-on"][style*="--USER__typeScale"] h3{ + font-size:calc(1rem * var(--USER__typeScale)) !important; } :root[style*="readium-iPadOSPatch-on"] body{ diff --git a/css/dist/ReadiumCSS-before.css b/css/dist/ReadiumCSS-before.css index 5499eb36..0a7711cd 100644 --- a/css/dist/ReadiumCSS-before.css +++ b/css/dist/ReadiumCSS-before.css @@ -1,5 +1,5 @@ /* - * Readium CSS (v. 2.0.0-beta.11) + * Readium CSS (v. 2.0.0-beta.12) * 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 4bdf047c..37975356 100644 --- a/css/dist/ReadiumCSS-default.css +++ b/css/dist/ReadiumCSS-default.css @@ -1,5 +1,5 @@ /* - * Readium CSS (v. 2.0.0-beta.11) + * Readium CSS (v. 2.0.0-beta.12) * 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 3c9d9c8e..d29f8633 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.11) + * Readium CSS (v. 2.0.0-beta.12) * 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 @@ -326,7 +326,7 @@ body{ font-family:revert !important; } -:root[style*="--USER__fontSize"] body{ +:root:not([style*="readium-deprecatedFontSize-on"])[style*="--USER__fontSize"] body{ zoom:var(--USER__fontSize) !important; } @@ -337,6 +337,10 @@ body{ } } +:root[style*="readium-deprecatedFontSize-on"][style*="--USER__fontSize"]{ + font-size:var(--USER__fontSize) !important; +} + :root[style*="--USER__lineHeight"]{ line-height:var(--USER__lineHeight) !important; } @@ -446,61 +450,58 @@ body{ filter:invert(100%) !important; } -@supports not (zoom: 1){ - - :root[style*="readium-normalize-on"]{ - --USER__typeScale:1.2; - } +:root[style*="readium-normalize-on"]{ + --USER__typeScale:1.2; +} - :root[style*="readium-normalize-on"] p, - :root[style*="readium-normalize-on"] li, - :root[style*="readium-normalize-on"] div, - :root[style*="readium-normalize-on"] pre, - :root[style*="readium-normalize-on"] dd{ - font-size:1rem !important; - } +:root[style*="readium-normalize-on"] p, +:root[style*="readium-normalize-on"] li, +:root[style*="readium-normalize-on"] div, +:root[style*="readium-normalize-on"] pre, +:root[style*="readium-normalize-on"] dd{ + font-size:1rem !important; +} - :root[style*="readium-normalize-on"] h1{ - font-size:1.75rem !important; - font-size:calc(((1rem * var(--USER__typeScale)) * var(--USER__typeScale)) * var(--USER__typeScale)) !important; - } +:root[style*="readium-normalize-on"] h1{ + font-size:1.75rem !important; + font-size:calc(((1rem * var(--USER__typeScale)) * var(--USER__typeScale)) * var(--USER__typeScale)) !important; +} - :root[style*="readium-normalize-on"] h2{ - font-size:1.5rem !important; - font-size:calc((1rem * var(--USER__typeScale)) * var(--USER__typeScale)) !important; - } +:root[style*="readium-normalize-on"] h2{ + font-size:1.5rem !important; + font-size:calc((1rem * var(--USER__typeScale)) * var(--USER__typeScale)) !important; +} - :root[style*="readium-normalize-on"] h3{ - font-size:1.25rem !important; - font-size:calc(1rem * var(--USER__typeScale)) !important; - } +:root[style*="readium-normalize-on"] h3{ + font-size:1.25rem !important; + font-size:calc(1rem * var(--USER__typeScale)) !important; +} - :root[style*="readium-normalize-on"] h4, - :root[style*="readium-normalize-on"] h5, - :root[style*="readium-normalize-on"] h6{ - font-size:1rem !important; - } +:root[style*="readium-normalize-on"] h4, +:root[style*="readium-normalize-on"] h5, +:root[style*="readium-normalize-on"] h6{ + font-size:1rem !important; +} - :root[style*="readium-normalize-on"] small{ - font-size:smaller !important; - } +:root[style*="readium-normalize-on"] small{ + font-size:smaller !important; +} - :root[style*="readium-normalize-on"] sub, - :root[style*="readium-normalize-on"] sup{ - font-size:67.5% !important; - } +:root[style*="readium-normalize-on"] sub, +:root[style*="readium-normalize-on"] sup{ + font-size:67.5% !important; +} - :root[style*="readium-normalize-on"][style*="--USER__typeScale"] h1{ - font-size:calc(((1rem * var(--USER__typeScale)) * var(--USER__typeScale)) * var(--USER__typeScale)) !important; - } +:root[style*="readium-normalize-on"][style*="--USER__typeScale"] h1{ + font-size:calc(((1rem * var(--USER__typeScale)) * var(--USER__typeScale)) * var(--USER__typeScale)) !important; +} - :root[style*="readium-normalize-on"][style*="--USER__typeScale"] h2{ - font-size:calc((1rem * var(--USER__typeScale)) * var(--USER__typeScale)) !important; - } +:root[style*="readium-normalize-on"][style*="--USER__typeScale"] h2{ + font-size:calc((1rem * var(--USER__typeScale)) * var(--USER__typeScale)) !important; +} - :root[style*="readium-normalize-on"][style*="--USER__typeScale"] h3{ - font-size:calc(1rem * var(--USER__typeScale)) !important; - } +:root[style*="readium-normalize-on"][style*="--USER__typeScale"] h3{ + font-size:calc(1rem * var(--USER__typeScale)) !important; } :root[style*="readium-iPadOSPatch-on"] body{ diff --git a/css/dist/cjk-horizontal/ReadiumCSS-before.css b/css/dist/cjk-horizontal/ReadiumCSS-before.css index db2c2bee..26628134 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.11) + * Readium CSS (v. 2.0.0-beta.12) * 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 b944bd26..e4310959 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.11) + * Readium CSS (v. 2.0.0-beta.12) * 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 a44e9660..8ea131b0 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.11) + * Readium CSS (v. 2.0.0-beta.12) * 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 @@ -314,7 +314,7 @@ body{ font-family:revert !important; } -:root[style*="--USER__fontSize"] body{ +:root:not([style*="readium-deprecatedFontSize-on"])[style*="--USER__fontSize"] body{ zoom:var(--USER__fontSize) !important; } @@ -325,6 +325,10 @@ body{ } } +:root[style*="readium-deprecatedFontSize-on"][style*="--USER__fontSize"]{ + font-size:var(--USER__fontSize) !important; +} + :root[style*="--USER__lineHeight"]{ line-height:var(--USER__lineHeight) !important; } @@ -434,61 +438,58 @@ body{ filter:invert(100%) !important; } -@supports not (zoom: 1){ - - :root[style*="readium-normalize-on"]{ - --USER__typeScale:1.2; - } +:root[style*="readium-normalize-on"]{ + --USER__typeScale:1.2; +} - :root[style*="readium-normalize-on"] p, - :root[style*="readium-normalize-on"] li, - :root[style*="readium-normalize-on"] div, - :root[style*="readium-normalize-on"] pre, - :root[style*="readium-normalize-on"] dd{ - font-size:1rem !important; - } +:root[style*="readium-normalize-on"] p, +:root[style*="readium-normalize-on"] li, +:root[style*="readium-normalize-on"] div, +:root[style*="readium-normalize-on"] pre, +:root[style*="readium-normalize-on"] dd{ + font-size:1rem !important; +} - :root[style*="readium-normalize-on"] h1{ - font-size:1.75rem !important; - font-size:calc(((1rem * var(--USER__typeScale)) * var(--USER__typeScale)) * var(--USER__typeScale)) !important; - } +:root[style*="readium-normalize-on"] h1{ + font-size:1.75rem !important; + font-size:calc(((1rem * var(--USER__typeScale)) * var(--USER__typeScale)) * var(--USER__typeScale)) !important; +} - :root[style*="readium-normalize-on"] h2{ - font-size:1.5rem !important; - font-size:calc((1rem * var(--USER__typeScale)) * var(--USER__typeScale)) !important; - } +:root[style*="readium-normalize-on"] h2{ + font-size:1.5rem !important; + font-size:calc((1rem * var(--USER__typeScale)) * var(--USER__typeScale)) !important; +} - :root[style*="readium-normalize-on"] h3{ - font-size:1.25rem !important; - font-size:calc(1rem * var(--USER__typeScale)) !important; - } +:root[style*="readium-normalize-on"] h3{ + font-size:1.25rem !important; + font-size:calc(1rem * var(--USER__typeScale)) !important; +} - :root[style*="readium-normalize-on"] h4, - :root[style*="readium-normalize-on"] h5, - :root[style*="readium-normalize-on"] h6{ - font-size:1rem !important; - } +:root[style*="readium-normalize-on"] h4, +:root[style*="readium-normalize-on"] h5, +:root[style*="readium-normalize-on"] h6{ + font-size:1rem !important; +} - :root[style*="readium-normalize-on"] small{ - font-size:smaller !important; - } +:root[style*="readium-normalize-on"] small{ + font-size:smaller !important; +} - :root[style*="readium-normalize-on"] sub, - :root[style*="readium-normalize-on"] sup{ - font-size:67.5% !important; - } +:root[style*="readium-normalize-on"] sub, +:root[style*="readium-normalize-on"] sup{ + font-size:67.5% !important; +} - :root[style*="readium-normalize-on"][style*="--USER__typeScale"] h1{ - font-size:calc(((1rem * var(--USER__typeScale)) * var(--USER__typeScale)) * var(--USER__typeScale)) !important; - } +:root[style*="readium-normalize-on"][style*="--USER__typeScale"] h1{ + font-size:calc(((1rem * var(--USER__typeScale)) * var(--USER__typeScale)) * var(--USER__typeScale)) !important; +} - :root[style*="readium-normalize-on"][style*="--USER__typeScale"] h2{ - font-size:calc((1rem * var(--USER__typeScale)) * var(--USER__typeScale)) !important; - } +:root[style*="readium-normalize-on"][style*="--USER__typeScale"] h2{ + font-size:calc((1rem * var(--USER__typeScale)) * var(--USER__typeScale)) !important; +} - :root[style*="readium-normalize-on"][style*="--USER__typeScale"] h3{ - font-size:calc(1rem * var(--USER__typeScale)) !important; - } +:root[style*="readium-normalize-on"][style*="--USER__typeScale"] h3{ + font-size:calc(1rem * var(--USER__typeScale)) !important; } :root[style*="readium-iPadOSPatch-on"] body{ diff --git a/css/dist/cjk-vertical/ReadiumCSS-before.css b/css/dist/cjk-vertical/ReadiumCSS-before.css index 632bc3f6..bfcd33e7 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.11) + * Readium CSS (v. 2.0.0-beta.12) * 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 2939e9fc..aa477682 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.11) + * Readium CSS (v. 2.0.0-beta.12) * 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 da866614..881c6892 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.11) + * Readium CSS (v. 2.0.0-beta.12) * 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 @@ -340,7 +340,7 @@ body{ font-family:revert !important; } -:root[style*="--USER__fontSize"] body{ +:root:not([style*="readium-deprecatedFontSize-on"])[style*="--USER__fontSize"] body{ zoom:var(--USER__fontSize) !important; } @@ -351,6 +351,10 @@ body{ } } +:root[style*="readium-deprecatedFontSize-on"][style*="--USER__fontSize"]{ + font-size:var(--USER__fontSize) !important; +} + :root[style*="--USER__lineHeight"]{ line-height:var(--USER__lineHeight) !important; } @@ -471,61 +475,58 @@ body{ filter:invert(100%) !important; } -@supports not (zoom: 1){ - - :root[style*="readium-normalize-on"]{ - --USER__typeScale:1.2; - } +:root[style*="readium-normalize-on"]{ + --USER__typeScale:1.2; +} - :root[style*="readium-normalize-on"] p, - :root[style*="readium-normalize-on"] li, - :root[style*="readium-normalize-on"] div, - :root[style*="readium-normalize-on"] pre, - :root[style*="readium-normalize-on"] dd{ - font-size:1rem !important; - } +:root[style*="readium-normalize-on"] p, +:root[style*="readium-normalize-on"] li, +:root[style*="readium-normalize-on"] div, +:root[style*="readium-normalize-on"] pre, +:root[style*="readium-normalize-on"] dd{ + font-size:1rem !important; +} - :root[style*="readium-normalize-on"] h1{ - font-size:1.75rem !important; - font-size:calc(((1rem * var(--USER__typeScale)) * var(--USER__typeScale)) * var(--USER__typeScale)) !important; - } +:root[style*="readium-normalize-on"] h1{ + font-size:1.75rem !important; + font-size:calc(((1rem * var(--USER__typeScale)) * var(--USER__typeScale)) * var(--USER__typeScale)) !important; +} - :root[style*="readium-normalize-on"] h2{ - font-size:1.5rem !important; - font-size:calc((1rem * var(--USER__typeScale)) * var(--USER__typeScale)) !important; - } +:root[style*="readium-normalize-on"] h2{ + font-size:1.5rem !important; + font-size:calc((1rem * var(--USER__typeScale)) * var(--USER__typeScale)) !important; +} - :root[style*="readium-normalize-on"] h3{ - font-size:1.25rem !important; - font-size:calc(1rem * var(--USER__typeScale)) !important; - } +:root[style*="readium-normalize-on"] h3{ + font-size:1.25rem !important; + font-size:calc(1rem * var(--USER__typeScale)) !important; +} - :root[style*="readium-normalize-on"] h4, - :root[style*="readium-normalize-on"] h5, - :root[style*="readium-normalize-on"] h6{ - font-size:1rem !important; - } +:root[style*="readium-normalize-on"] h4, +:root[style*="readium-normalize-on"] h5, +:root[style*="readium-normalize-on"] h6{ + font-size:1rem !important; +} - :root[style*="readium-normalize-on"] small{ - font-size:smaller !important; - } +:root[style*="readium-normalize-on"] small{ + font-size:smaller !important; +} - :root[style*="readium-normalize-on"] sub, - :root[style*="readium-normalize-on"] sup{ - font-size:67.5% !important; - } +:root[style*="readium-normalize-on"] sub, +:root[style*="readium-normalize-on"] sup{ + font-size:67.5% !important; +} - :root[style*="readium-normalize-on"][style*="--USER__typeScale"] h1{ - font-size:calc(((1rem * var(--USER__typeScale)) * var(--USER__typeScale)) * var(--USER__typeScale)) !important; - } +:root[style*="readium-normalize-on"][style*="--USER__typeScale"] h1{ + font-size:calc(((1rem * var(--USER__typeScale)) * var(--USER__typeScale)) * var(--USER__typeScale)) !important; +} - :root[style*="readium-normalize-on"][style*="--USER__typeScale"] h2{ - font-size:calc((1rem * var(--USER__typeScale)) * var(--USER__typeScale)) !important; - } +:root[style*="readium-normalize-on"][style*="--USER__typeScale"] h2{ + font-size:calc((1rem * var(--USER__typeScale)) * var(--USER__typeScale)) !important; +} - :root[style*="readium-normalize-on"][style*="--USER__typeScale"] h3{ - font-size:calc(1rem * var(--USER__typeScale)) !important; - } +:root[style*="readium-normalize-on"][style*="--USER__typeScale"] h3{ + font-size:calc(1rem * var(--USER__typeScale)) !important; } :root[style*="readium-iPadOSPatch-on"] body{ diff --git a/css/dist/rtl/ReadiumCSS-before.css b/css/dist/rtl/ReadiumCSS-before.css index db2c2bee..26628134 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.11) + * Readium CSS (v. 2.0.0-beta.12) * 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 2ac78af7..eceabc11 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.11) + * Readium CSS (v. 2.0.0-beta.12) * 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/src/modules/ReadiumCSS-fs_normalize.css b/css/src/modules/ReadiumCSS-fs_normalize.css index bd5419aa..b9271b16 100644 --- a/css/src/modules/ReadiumCSS-fs_normalize.css +++ b/css/src/modules/ReadiumCSS-fs_normalize.css @@ -10,67 +10,66 @@ /* :root is used so that you can quickly add a class or attribute if you prefer e.g. `:root[data-rs-normalize]` */ /* We create a default so that you don’t need to explicitly set one in the DOM. - Once the “Publisher’s styles” checkbox is unchecked, the normalize is applied automatically */ - -@supports not (zoom: 1) { - :root:--fs-normalize { - --USER__typeScale: 1.2; - /* This is the default type scale you’ll find in most publications */ - } - - :root:--fs-normalize p, - :root:--fs-normalize li, - :root:--fs-normalize div, - :root:--fs-normalize pre, - :root:--fs-normalize dd { - font-size: 1rem !important; - } - - :root:--fs-normalize h1 { - /* Fallback if browser doesn’t support vars */ - font-size: 1.75rem !important; - font-size: calc(((1rem * var(--USER__typeScale)) * var(--USER__typeScale)) * var(--USER__typeScale)) !important; - } - - :root:--fs-normalize h2 { - /* Fallback if browser doesn’t support vars */ - font-size: 1.5rem !important; - font-size: calc((1rem * var(--USER__typeScale)) * var(--USER__typeScale)) !important; - } - - :root:--fs-normalize h3 { - /* Fallback if browser doesn’t support vars */ - font-size: 1.25rem !important; - font-size: calc(1rem * var(--USER__typeScale)) !important; - } - - :root:--fs-normalize h4, - :root:--fs-normalize h5, - :root:--fs-normalize h6 { - font-size: 1rem !important; - } - - :root:--fs-normalize small { - font-size: smaller !important; - } - - :root:--fs-normalize sub, - :root:--fs-normalize sup { - font-size: 67.5% !important; - } - - /* The following styles kick in if you define the typeScale variable in the DOM. + The normalize is not applied automatically, even when using the deprecated font-size setting + You have to set it explicitly if you want to make sure all publications are resized the same */ + +:root:--fs-normalize { + --USER__typeScale: 1.2; + /* This is the default type scale you’ll find in most publications */ +} + +:root:--fs-normalize p, +:root:--fs-normalize li, +:root:--fs-normalize div, +:root:--fs-normalize pre, +:root:--fs-normalize dd { + font-size: 1rem !important; +} + +:root:--fs-normalize h1 { + /* Fallback if browser doesn’t support vars */ + font-size: 1.75rem !important; + font-size: calc(((1rem * var(--USER__typeScale)) * var(--USER__typeScale)) * var(--USER__typeScale)) !important; +} + +:root:--fs-normalize h2 { + /* Fallback if browser doesn’t support vars */ + font-size: 1.5rem !important; + font-size: calc((1rem * var(--USER__typeScale)) * var(--USER__typeScale)) !important; +} + +:root:--fs-normalize h3 { + /* Fallback if browser doesn’t support vars */ + font-size: 1.25rem !important; + font-size: calc(1rem * var(--USER__typeScale)) !important; +} + +:root:--fs-normalize h4, +:root:--fs-normalize h5, +:root:--fs-normalize h6 { + font-size: 1rem !important; +} + +:root:--fs-normalize small { + font-size: smaller !important; +} + +:root:--fs-normalize sub, +:root:--fs-normalize sup { + font-size: 67.5% !important; +} + +/* The following styles kick in if you define the typeScale variable in the DOM. No need to repeat declarations which don’t make use of the variable */ - :root:--fs-normalize[style*="--USER__typeScale"] h1 { - font-size: calc(((1rem * var(--USER__typeScale)) * var(--USER__typeScale)) * var(--USER__typeScale)) !important; - } +:root:--fs-normalize[style*="--USER__typeScale"] h1 { + font-size: calc(((1rem * var(--USER__typeScale)) * var(--USER__typeScale)) * var(--USER__typeScale)) !important; +} - :root:--fs-normalize[style*="--USER__typeScale"] h2 { - font-size: calc((1rem * var(--USER__typeScale)) * var(--USER__typeScale)) !important; - } +:root:--fs-normalize[style*="--USER__typeScale"] h2 { + font-size: calc((1rem * var(--USER__typeScale)) * var(--USER__typeScale)) !important; +} - :root:--fs-normalize[style*="--USER__typeScale"] h3 { - font-size: calc(1rem * var(--USER__typeScale)) !important; - } +:root:--fs-normalize[style*="--USER__typeScale"] h3 { + font-size: calc(1rem * var(--USER__typeScale)) !important; } \ No newline at end of file diff --git a/css/src/modules/user-settings-submodules/ReadiumCSS-fontSize_pref.css b/css/src/modules/user-settings-submodules/ReadiumCSS-fontSize_pref.css index 9e73f1b0..041e60c1 100644 --- a/css/src/modules/user-settings-submodules/ReadiumCSS-fontSize_pref.css +++ b/css/src/modules/user-settings-submodules/ReadiumCSS-fontSize_pref.css @@ -6,12 +6,19 @@ Repo: https://github.com/readium/readium-css */ -:root[style*="--USER__fontSize"] body { +:root:not(:--deprecated-font-size)[style*="--USER__fontSize"] body { zoom: var(--USER__fontSize) !important; } +/* Older deprecated implementation for when zoom is not supported + or it is explicitly enabled because you don’t want the new one */ + @supports not (zoom: 1) { :root[style*="--USER__fontSize"] { font-size: var(--USER__fontSize) !important; } +} + +:root:--deprecated-font-size[style*="--USER__fontSize"] { + font-size: var(--USER__fontSize) !important; } \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 3758b111..a0aaa064 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@readium/css", - "version": "2.0.0-beta.11", + "version": "2.0.0-beta.12", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@readium/css", - "version": "2.0.0-beta.11", + "version": "2.0.0-beta.12", "license": "BSD-3-Clause", "devDependencies": { "@daltontan/postcss-import-json": "^1.1.1", diff --git a/package.json b/package.json index 84338902..c4a5ca3a 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.11", + "version": "2.0.0-beta.12", "homepage": "https://github.com/readium/readium-css", "license": "BSD-3-Clause", "keywords": [ From 90bf5dd2d31578a0967d8139edf33be85ecb8922 Mon Sep 17 00:00:00 2001 From: Jiminy Panoz Date: Tue, 15 Apr 2025 14:58:16 +0200 Subject: [PATCH 2/3] Update tests Adding test for deprecated font-size implementation and font-size normalize --- backstop.json | 14 +++++++++ tests/font-size-deprecated.html | 51 ++++++++++++++++++++++++++++++ tests/font-size-normalize.html | 55 +++++++++++++++++++++++++++++++++ 3 files changed, 120 insertions(+) create mode 100644 tests/font-size-deprecated.html create mode 100644 tests/font-size-normalize.html diff --git a/backstop.json b/backstop.json index 061ff1ac..49484418 100644 --- a/backstop.json +++ b/backstop.json @@ -113,6 +113,20 @@ "selectors": ["document"], "misMatchThreshold" : 0.1 }, + { + "label": "Deprecated font size pref", + "url": "http://localhost:8000/tests/font-size-deprecated.html", + "delay": 0, + "selectors": ["document"], + "misMatchThreshold" : 0.1 + }, + { + "label": "Font size normalize pref", + "url": "http://localhost:8000/tests/font-size-normalize.html", + "delay": 0, + "selectors": ["document"], + "misMatchThreshold" : 0.1 + }, { "label": "Type scale pref", "url": "http://localhost:8000/tests/type-scale.html", diff --git a/tests/font-size-deprecated.html b/tests/font-size-deprecated.html new file mode 100644 index 00000000..baa372bb --- /dev/null +++ b/tests/font-size-deprecated.html @@ -0,0 +1,51 @@ + + + + Test + + + + + + + +

Heading 1

+ +

Text. Smaller text. Text followed by sup.[1]

+ +

Heading 2

+ + + +

Heading 3

+ +
+ This is an aside. +
+ +

Heading 4

+ +
+
Artist
+ +
He desires to paint you the dreamiest, shadiest, quietest, most enchanting bit of romantic landscape in all the valley of the Saco. What is the chief element he employs? There stand his trees, each with a hollow trunk, as if a hermit and a crucifix were within; and here sleeps his meadow, and there sleep his cattle; and up from yonder cottage goes a sleepy smoke.
+
+ +
Heading 5
+ +
h1 {
+  font-family: sans-serif;
+  font-size: 2em;
+  margin: 1.5em 0;
+  text-align: center;
+}
+ +
Heading 6
+ +

Call me Ishmael. Some years ago—never mind how long precisely—having little or no money in my purse, and nothing particular to interest me on shore, I thought I would sail about a little and see the watery part of the world. It is a way I have of driving off the spleen and regulating the circulation. Whenever I find myself growing grim about the mouth; whenever it is a damp, drizzly November in my soul; whenever I find myself involuntarily pausing before coffin warehouses, and bringing up the rear of every funeral I meet; and especially whenever my hypos get such an upper hand of me, that it requires a strong moral principle to prevent me from deliberately stepping into the street, and methodically knocking people’s hats off—then, I account it high time to get to sea as soon as I can. This is my substitute for pistol and ball. With a philosophical flourish Cato throws himself upon his sword; I quietly take to the ship. There is nothing surprising in this. If they but knew it, almost all men in their degree, some time or other, cherish very nearly the same feelings towards the ocean with me.

+ + \ No newline at end of file diff --git a/tests/font-size-normalize.html b/tests/font-size-normalize.html new file mode 100644 index 00000000..33c6f74e --- /dev/null +++ b/tests/font-size-normalize.html @@ -0,0 +1,55 @@ + + + + Test + + + + + + + + +

Heading 1

+ +

Text. Smaller text. Text followed by sup.[1]

+ +

Heading 2

+ + + +

Heading 3

+ +
+ This is an aside. +
+ +

Heading 4

+ +
+
Artist
+ +
He desires to paint you the dreamiest, shadiest, quietest, most enchanting bit of romantic landscape in all the valley of the Saco. What is the chief element he employs? There stand his trees, each with a hollow trunk, as if a hermit and a crucifix were within; and here sleeps his meadow, and there sleep his cattle; and up from yonder cottage goes a sleepy smoke.
+
+ +
Heading 5
+ +
h1 {
+  font-family: sans-serif;
+  font-size: 2em;
+  margin: 1.5em 0;
+  text-align: center;
+}
+ +
Heading 6
+ +

Call me Ishmael. Some years ago—never mind how long precisely—having little or no money in my purse, and nothing particular to interest me on shore, I thought I would sail about a little and see the watery part of the world. It is a way I have of driving off the spleen and regulating the circulation. Whenever I find myself growing grim about the mouth; whenever it is a damp, drizzly November in my soul; whenever I find myself involuntarily pausing before coffin warehouses, and bringing up the rear of every funeral I meet; and especially whenever my hypos get such an upper hand of me, that it requires a strong moral principle to prevent me from deliberately stepping into the street, and methodically knocking people’s hats off—then, I account it high time to get to sea as soon as I can. This is my substitute for pistol and ball. With a philosophical flourish Cato throws himself upon his sword; I quietly take to the ship. There is nothing surprising in this. If they but knew it, almost all men in their degree, some time or other, cherish very nearly the same feelings towards the ocean with me.

+ + \ No newline at end of file From 961198027bcb9d89a0b7837f384a04ce17a42e05 Mon Sep 17 00:00:00 2001 From: Jiminy Panoz Date: Tue, 15 Apr 2025 15:17:26 +0200 Subject: [PATCH 3/3] Update docs --- docs/CSS12-user_prefs.md | 16 +++++++++++++++- docs/CSS19-api.md | 12 ++++++++++++ docs/CSS28-migration_guide.md | 4 ++++ docs/ReadiumCSS_docs.epub | Bin 3686770 -> 3687128 bytes .../OEBPS/Text/Section-012.xhtml | 14 +++++++++++++- .../OEBPS/Text/Section-019.xhtml | 10 ++++++++++ .../OEBPS/Text/Section-028.xhtml | 4 ++++ tests/font-size-normalize.html | 2 +- 8 files changed, 59 insertions(+), 3 deletions(-) diff --git a/docs/CSS12-user_prefs.md b/docs/CSS12-user_prefs.md index 77caf443..7dd3ee1f 100644 --- a/docs/CSS12-user_prefs.md +++ b/docs/CSS12-user_prefs.md @@ -89,9 +89,23 @@ Override class: None. This flag is required to change the `font-family` user set To switch back to the publisher’s font, you can either set an empty string as a value or remove the property. +### Toggling the Deprecated Implementation of the Font Size Setting + +Allows to switch to the Deprecated Implementation of the Font Size Setting from version 1. + +``` +--USER__fontSizeImplementation +``` + +Supported value: `readium-deprecatedFontSize-on` + +Override class: None. + +**Note:** This implementation will automatically be used in case `zoom` is not supported. + ### Font Size Normalization -Acts as an explicit switch to force font-normalization in publications whose font-sizing is declared using CSS absolute units, breaking the font-size user setting in engines that don’t support CSS property `zoom`. +Acts as an explicit switch to force font-normalization in publications whose font-sizing is declared using CSS absolute units, breaking the font-size user setting. ``` --USER__fontSizeNormalize diff --git a/docs/CSS19-api.md b/docs/CSS19-api.md index 21e0a2d6..7295218a 100644 --- a/docs/CSS19-api.md +++ b/docs/CSS19-api.md @@ -74,6 +74,18 @@ Scope: `html` Override class: None. This flag is required to change the `font-family` user setting. +* * * + +``` +:--deprecated-font-size +``` + +Preset: `--USER__fontSizeImplementation: readium-deprecatedFontSize-on` + +Scope: `html` + +Override class: None. This flag can be used to force the previous and deprecated implementation of font-size setting. It is also used automatically if the browser/rendering engine does not support CSS property `zoom` – note font-size normalization is not triggered by default in that case. + * * * ``` diff --git a/docs/CSS28-migration_guide.md b/docs/CSS28-migration_guide.md index 2ca7a1cf..b6a944a8 100644 --- a/docs/CSS28-migration_guide.md +++ b/docs/CSS28-migration_guide.md @@ -110,6 +110,10 @@ As a side-effect of this new implementation, please note the `--USER__typeScale` 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. +Starting version `2.0.0-beta.12` the previous and deprecated implementation of font-size is exposed under a flag that can be configured (`:--deprecated-font-size`) and is `[style*="readium-deprecatedFontSize-on"]` by default. This can be used if you need some time to switch to the new implementation, or simply prefer to use the old one. The font-size normalize is no longer applied by default though, and is relying on another flag (`:--fs-normalize`) with `[style*="readium-normalize-on"]` as default. + +Note that when zoom is not supported, the setting will automatically switch to the previous implementation. Once again, you need to manually apply the font-size normalization as you see fit. + ## 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 21965e8ac105ae13b80439b93cc86a6275ddfa18..5ad66ea23b7f187aed80d56e0bcc32027d1aa957 100644 GIT binary patch delta 20332 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 h^mQz)6@&ad6?{F>mL?30e

To switch back to the publisher’s font, you can either set an empty string as a value or remove the property.

+
+

Toggling the Deprecated Implementation of the Font Size Setting

+ +

Allows to switch to the Deprecated Implementation of the Font Size Setting from version 1.

+ +
--USER__fontSizeImplementation
+ +

Supported value: readium-deprecatedFontSize-on

+ +

Override class: None.

+
+

Font Size Normalization

-

Acts as an explicit switch to orce font-normalization in publications whose font-sizing is declared using CSS absolute units, breaking the font-size user setting in engines that don’t support CSS property zoom.

+

Acts as an explicit switch to orce font-normalization in publications whose font-sizing is declared using CSS absolute units, breaking the font-size user setting.

--USER__fontSizeNormalize
diff --git a/docs/ReadiumCSS_docs/OEBPS/Text/Section-019.xhtml b/docs/ReadiumCSS_docs/OEBPS/Text/Section-019.xhtml index b53a6edc..e9a56143 100644 --- a/docs/ReadiumCSS_docs/OEBPS/Text/Section-019.xhtml +++ b/docs/ReadiumCSS_docs/OEBPS/Text/Section-019.xhtml @@ -80,6 +80,16 @@
+
:--deprecated-font-size
+ +

Preset: --USER__fontSizeImplementation: readium-deprecatedFontSize-on

+ +

Scope: html

+ +

Override class: None. This flag can be used to force the previous and deprecated implementation of font-size setting. It is also used automatically if the browser/rendering engine does not support CSS property zoom – note font-size normalization is not triggered by default in that case.

+ +
+
:--fs-normalize

Preset: --USER__fontSizeNormalize: readium-normalize-on

diff --git a/docs/ReadiumCSS_docs/OEBPS/Text/Section-028.xhtml b/docs/ReadiumCSS_docs/OEBPS/Text/Section-028.xhtml index d7f44e8d..263b2406 100644 --- a/docs/ReadiumCSS_docs/OEBPS/Text/Section-028.xhtml +++ b/docs/ReadiumCSS_docs/OEBPS/Text/Section-028.xhtml @@ -127,6 +127,10 @@

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.

+ +

Starting version 2.0.0-beta.12 the previous and deprecated implementation of font-size is exposed under a flag that can be configured (:--deprecated-font-size) and is [style*="readium-deprecatedFontSize-on"] by default. This can be used if you need some time to switch to the new implementation, or simply prefer to use the old one. The font-size normalize is no longer applied by default though, and is relying on another flag (:--fs-normalize) with [style*="readium-normalize-on"] as default.

+ +

Note that when zoom is not supported, the setting will automatically switch to the previous implementation. Once again, you need to manually apply the font-size normalization as you see fit.

diff --git a/tests/font-size-normalize.html b/tests/font-size-normalize.html index 33c6f74e..cac84062 100644 --- a/tests/font-size-normalize.html +++ b/tests/font-size-normalize.html @@ -1,5 +1,5 @@ - + Test