Giter Club home page Giter Club logo

Comments (4)

michaeltaranto avatar michaeltaranto commented on May 28, 2024

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.

souporserious avatar souporserious commented on May 28, 2024

Awesome! Yeah, for sure! I think it should be a simple tweak. Here is a working Codesandbox to see an example.

from capsize.

rpiosi avatar rpiosi commented on May 28, 2024

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.

andriytyurnikov avatar andriytyurnikov commented on May 28, 2024

@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 css calc()
  • Chrome limits on calc(calc(...)) nesting prevent one from using full formula in CSS calc.

There are two aspects of workaround:

  • use values of same size units (rem), but use them as numeric values, and only cast rem 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 CSS calc(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 as rem, 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)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.