- From: David Bradbury via GitHub <sysbot+gh@w3.org>
- Date: Thu, 23 Jan 2020 18:42:26 +0000
- To: public-css-archive@w3.org
So a similar but different way of representing the different technologies and their purpose is that HTML is for structure, CSS is for presentation, and JS is for logic. I believe that from this view, randomness is a valid way to describe presentation. To me, there are two random function types - Range, and Set. Given the nature of randomness and precision, it would also be natural to have rounding and min/max functions, but not necessary. ### Range I provide two values and some point in between the two is chosen at random. This would require two values: `<Number1>, <Number2>` - Simple Example: `rand(1, 10);` - Randomly generated decimal: `0.1443...` - Internal Result: `(1 + ((10-1) * 0.1443))` - Simpliefied Result: `2.2987...` - Complex Example: rand(5mm, -7.5vw, 5px) - Randomly generated decimal: `0.7321...` - Internal Result: `(5mm + ((-7.5vw - 5mm) * 0.7321))` - Simplified Result: None, however the interal result is easilly handled by `calc()` ### Set I provide a series of values and one of the values is chosen at random. This may have any number of values passed as long as one is passed: `<Number1>, [<Number2>, <Number3>...]` - Simple Example: `rand-set(1, 2, 4, 8);` - Randomly generated decimal: `0.788...` - Internal Result: `set[((4-1) * 0.788)]` - Simplified Result: `set[2]` - Result: `4` - Complex Example: `rand-set(-2px, 4, 120vh, #ffa, translateX(20px))` - Randomly generated decimal: `0.929...` - Internal Result: `set[((5-1) * 0.929...)]` - Simplified Result: `set[4]` - Result: `translate(20px)` *Notes: As rounding functions are unavailable, values are rounded up at values `>=0.5`. I would recommend that if the above syntax is considered, allowing for the final parameter to be a rounding function* I would also note that I don't believe there is a need however to distinguish between integers and non-integers. Decimals, for example, are allowed in font sizes, color values, and otherwise. Needing further precision would be a rounding function, not a randomness function. Additionally, I would suggest that the random value is calculated on a per-element basis at the moment the style is applied. This allows for more concise and powerful syntax (ex: `span {left: rand(100px, 1000px)}` would be calculated separately for each span element). If the user wishes to share a single rand number across multiple definitions, that would be done with CSS variables. Another side-effect would be the re-calculating of random elements when a class is added, another item which would be a desirable default. Again CSS variables would allow the user around this calculation. As to the general appropriateness - To me, if I am describing a document's color and the website's design requires a random color paired with a calculated accent color, it would be improper of me to use JavaScript as the design is not part of the application logic. If I want to generate a randomized starfield where the content is located in stars across the page, that is style, not application logic. The purpose of the specification is to allow a better description of the presentation semantics that were not addressed in CSS1. Using JavaScript to describe the presentation of a site is, in my opinion, the least desirable option. -- GitHub Notification of comment by DavidBradbury Please view or discuss this issue at https://github.com/w3c/csswg-drafts/issues/2826#issuecomment-577817387 using your GitHub account
Received on Thursday, 23 January 2020 18:42:27 UTC