Comments (4)
Hey Travis, very much interested in supporting relative units but have not found the right approach just yet. Curious to see what direction you've taken things and see what is working.
from capsize.
Awesome! Yeah, for sure! I think it should be a simple tweak. Here is a working Codesandbox to see an example.
from capsize.
My relative units workaround is based on 62.5% font-size on html trick, with that, just dividing numeric values of font-size and line-height by 10 do the job.
from capsize.
@michaeltaranto , @souporserious I have found a solution, which also allows CSS-heavy implementation, yet I would have to dive into details, because I have faced two serious browser limitations:
- one can not divide
rem
/rem
in csscalc()
- Chrome limits on
calc(calc(...))
nesting prevent one from using full formula in CSScalc
.
There are two aspects of workaround:
- use values of same size units (
rem
), but use them as numeric values, and only castrem
type on usage. - pre-compute some values at compile-time
Example:
--pro-rata-cap-height-trim:
calc(
(
var(--pro-rata-precomputed-cap-height-trim-factors)
-
(
(
(
var(--pro-rata-precomputed-line-height-scale) /* 1.362 */
*
var(--pro-rata-font-size)
)
-
var(--pro-rata-line-height) /* Dynamic numeric, latter converted to rem */
)
/
2
/
var(--pro-rata-font-size) /* Dynamic numeric, latter converted to rem */
)
)
*
(-1) /* you may use (-1em) here and only here, if you want, actually */
);
}
- Here you may see
--pro-rata-precomputed-cap-height-trim-factors
and--pro-rata-precomputed-line-height-scale
parameters, values of those may be statically pre-computed in JS, and injected into utility class for any given font-family to work around CSScalc(calc(...))
call stack limitations.
In fact it is an inlined memoization of statically calculated value of expression:
(ascentScale - capHeightScale + lineGapScale)
inlined to offset some portion of calculations into compile-time.
- CSS variables
--pro-rata-font-size
and--pro-rata-line-height
are set as numeric values, not asrem
, and type casted at final stage:
/* utility class for font-size */
.pro-rata-cap-size-2 {
--pro-rata-cap-size: 0.5; /* numeric, not rem */
--pro-rata-font-size:
calc(
var(--pro-rata-cap-size)
/ var(--pro-rata-cap-height-scale)
);
font-size: calc(var(--pro-rata-font-size) * 1rem);
}
Illustrative draft implementation is visible here: https://github.com/andriytyurnikov/andriytyurnikov.github.io/blob/main/src/pro-rata.css,
tailwind plugin is planned sometime later.
from capsize.
Related Issues (20)
- Support for variable fonts HOT 5
- Text-overflow: ellipsis is not working HOT 2
- @capsizecss/metrics missing metrics HOT 3
- TailwindCSS Plugin
- Supporting rem as fontSize and lineheight HOT 2
- Latest version of `@capsizecss/metrics` doesn't generate font files HOT 4
- createFontStack returns incorrect values for fonts with the same metrics HOT 2
- Start error HOT 2
- Getting an error when using createTextStyle HOT 2
- capsize_capsizeStyle rules not being built in Remix projects HOT 4
- @capsizecss/unpack fontkit module import error HOT 4
- Font metrics covering all available font weights HOT 3
- Doesn't tsc cleanly to javascript HOT 1
- Document that it's the hhea ascender/descender/lineGap that matter. HOT 8
- Website updated without Font Metrics HOT 11
- Please document how to use capsize with lists HOT 2
- Some combination of values don't wrap the full text height HOT 4
- `text-indent` not applied to Capsize elements HOT 1
- expose xHeight to metrics package HOT 3
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from capsize.