Comments (5)
For me, Functions looks more intuitive and flexible than Mixins.
from assembler.
Looks similar to Mixins, except, we don't need to use this special char ^
in x-style
for functions
from assembler.
How about this example?
box-shadow: 0 0 4px $alpha($darken(rgba(255, 100, 5, var(--alpha, 1)), 20), 80),
0 0 8px var(--color, $darken($alpha(hsla(100, 100%, 50%, var(--alpha, 1)), 80), 20));
Not only that you need to evaluate var(--alpha)
, but you also need to evaluate rgba
and hsla
yourself. Moreover, $darken
and $alpha
need to be evaluated in a specific order because the value they return is used as an argument for other functions. This is fine for SCSS, which compiles everything ahead-of-time, but the parser of Assembler CSS works in real-time.
We already had this discussion and made some tests with @sorinsarca months ago, and this kind of functionality would have a tremendous impact on the performance. However, for the simple usage example you are presenting here, using a mixin can be enough.
registerMixin('darken', color, value, property) {
property = property || 'color';
return `${property}: ${darken(color, value)}`;
}
function darken(color, value) {
// ...
}
Usage
^darken: #ff0fab, 20; ^darken: #ff00ff, 30, background-color;
from assembler.
^darken: #ff0fab, 20; ^darken: #ff00ff, 30, background-color;
It's a bit counter intuitive TBH, but you're right, it does work.
How about this example?
box-shadow: 0 0 4px $alpha($darken(rgba(255, 100, 5, var(--alpha, 1)), 20), 80), 0 0 8px var(--color, $darken($alpha(hsla(100, 100%, 50%, var(--alpha, 1)), 80), 20));Not only that you need to evaluate
var(--alpha)
, but you also need to evaluatergba
andhsla
yourself. Moreover,$darken
and$alpha
need to be evaluated in a specific order because the value they return is used as an argument for other functions. This is fine for SCSS, which compiles everything ahead-of-time, but the parser of Assembler CSS works in real-time.
There are two solutions (ish) to all the pre-evaluating, 1, providing the arguments like this:
[{
type: 'color',
value: '#00BBBB',
raw: 'rgb(0, 187, 187)',
}, {
type: 'measurement',
value: '16px',
raw: '1rem',
}]
and two, just providing the raw string split by commas
["rgb(0, 187, 187)", "1rem"] --> from the original: "background: $myFunction(rgb(0, 187, 187), 1rem)"
This method would make a lot more sense from a performance standpoint, and it would also allow functions without huge performance impact. (Theoretically this would be the same as mixin performance)
Also note that with this method variables and colors and such would be left to the function, not assembler, this could be added separately with something like AssemblerCSS.compute("rgb(0, 187, 187)")
which could return a uniform style output, convert units, eval vars, etc.
Note: The only thing Assembler would eval before passing the args to the function would be nested functions. Everything else would be passed as it appears in the css.
This is fine for SCSS, which compiles everything ahead-of-time, but the parser of Assembler CSS works in real-time.
TBH if the people designing their websites with assembler are super concerned about the performance impact, they could just not use the functions, right?
from assembler.
Looks similar to Mixins, except, we don't need to use this special char
^
inx-style
for functions
And mixins can't be nested, and if I came across this code I wouldn't know what's going on:
^darken: #ff00ff, 30, background-color;
but this on the other hand:
background-color: $darken(#ff00ff, 30);
makes a lot more sense.
Basically it's an issue of syntax, not necessarily performance, as the performance could be solved by just passing raw parameters to the assembler.
from assembler.
Related Issues (13)
- Prerendering support HOT 3
- Plugins development HOT 2
- SM breakpoint applied for all breakpoints HOT 1
- Included plugins? HOT 2
- Add Pseudo-elements support HOT 1
- x-style is not a valid HTML5 attribute HOT 1
- Question
- [bug] Render bug HOT 1
- Explain the way of working
- Ideas HOT 3
- Assembler CSS Play? HOT 6
- Turn on discussions HOT 2
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 assembler.