Halo! Nama saya Andrey, saya telah mengembangkan antarmuka web secara profesional selama lebih dari 11 tahun dan selama setahun terakhir saya telah mengembangkan proyek Numl, yang dapat disebut bahasa markup dan gaya untuk web. Pada artikel ini, saya akan menunjukkan kepada Anda bagaimana, dalam upaya untuk mengatasi sejumlah fitur CSS dan menyederhanakan tata letak proyek web, kami berakhir dengan seluruh bahasa yang tidak hanya memenuhi semua kebutuhan gaya kami, tetapi juga memungkinkan kami untuk mengurangi jumlah kode JS dan meningkatkan aksesibilitas.
Sebagai permulaan, secara singkat tentang Numl dan bagaimana hal itu mungkin menarik bagi pengembang.
Numl adalah bahasa markup yang menggabungkan fungsi-fungsi kerangka CSS , kerangka JS tanpa komposisi dan Sistem Desain , dan menyediakan satu set elemen pra-dibangun, yang masing-masing memiliki serangkaian luas properti untuk penyesuaian. Bahasa ini didasarkan pada API browser Elemen Kustom asli dari spesifikasi Komponen Web, dan kompatibel dengan kerangka kerja JS populer seperti Vue , Svelte , Angular, dan React . Fitur khusus (dan saya bahkan akan mengatakan "unik") dari Numl adalah ia menghasilkan semua gaya untuk antarmuka saat runtimeuntuk mendapatkan hasil maksimal dari CSS Anda dan mencapai fleksibilitas besar dalam menata dan menyesuaikan elemen. Artikel ini adalah jawaban untuk pertanyaan tentang bagaimana hal itu terjadi dan mengapa pendekatan ini layak mendapatkan hak untuk hidup.
Minggu lalu, 4 Juli, proyek ini berusia tepat satu tahun dan telah lama melewati tahap pembuktian konsep . Skala penjualan proyek besar dan ekstensi peramban dari Sellerscale tertulis di dalamnya . Selain itu, menggunakan Numl, beberapa situs lainnya telah dibuat, termasuk halaman arahan dan Buku Cerita mereka sendiri. Seperangkat tautan lengkap akan ada di akhir.
Dasbor penjual. Stack: VueJS, Numl
Ekstensi skala penjualan. Stack: Svelte, Numl
Numl , HTML/CSS , -, CSS ARIA. , CSS , , -. Utility-First CSS? .
, Numl, numl.design, Storybook , Numl REPL.
22 , , Turbo Pascal, , , . , - . - HTML/CSS, JS- . , . , , , , CSS-, .
, , Modifier Value ( ). , , . , .
, , , CSS , . . , -, , . - , , , , . " CSS", :
- CSS . , Grid, . , ( ),
position
,top/right/bottom/left
transform
, JS, . - CSS , . ,
box-shadow
(/ ),transform
( ) .. , JS-, . - , .
!important
. - , .
.cls:hover
.cls:focus
. , , . CSS (.cls:hover:not(:focus)
..), , , . , - , . - , . , (
.btn.fancy-btn
) , " ". , , , "/ hover ". " ", ( touch-) CSS. - CSS Media Queries (
@media not all and (hover: none)
) , . - CSS+HTML, CCSOM+DOM . , , , .
- JS, CSS- . . runtime -
getComputedStyle()
, . - CSS . , .
, . , - . , breakpoints CSS-.
, , — . CSS , - , , CSS .
, .
...
, CSS, . , CSS . , , .
. , , MyGrid
MyFlex
display
, , item- (basis/width/height
) - ( ) . basis
, width
, height
, .
size
text
, . size
font-size/line-heigh
, ( css ), , ..
inline-. , , , , , .
, , DX (Developer Experience). / .
- , . .
. . , . , . :
<template>
<div :class="classes" :style="styles">
<slot></slot>
</div>
</template>
, !
.. . . :
<my-btn>
Button
<my-popup>Popup content</my-popup>
</my-btn>
, . , . MyDropdown
, . , , .
, , , , , , ( ). - - my-grid
, . Custom Elements. , ! Custom Elements, Open Source NUDE Elements, Numl. nu-
.
: NUDE – JS-, Numl .
. Numl . inline-. CSS . CSS . , : nu-grid
columns
1fr 1fr
. , columnsAttr('1fr 1fr')
, :
export function columnsAttr(val) {
return {
'grid-template-columns': val,
};
}
CSS:
nu-grid[columns="1fr 1fr"] {
grid-template-columns: 1fr 1fr;
}
… <style>
, <head>
. , CSS, .
( ), , , CSS.
, , - CSS ( Atomic CSS), CSS-in-JS , CSS .
CSS, , .
, Numl . , <nu-block border>
:
nu-block[border] {
border: var(--nu-border-width) solid var(--nu-border-color);
}
, .
place
. , .
<nu-card>
<nu-el place="outside-top">Float element</nu-el>
</nu-card>
grid/flex-, float-, fixed sticky. CSS .
. , transform
:
<nu-card move="2rem 2rem" scale="2">
Card
</nu-card>
, , :
<nu-block width="10x"></nu-block>
x
— gap.
gap'. Flexbox, :
<nu-flex gap="2x 1x" flow="row wrap">
<nu-block>Item 1</nu-block>
<nu-block>Item 2</nu-block>
<nu-block>Item 3</nu-block>
</nu-flex>
. API . - Numl , . , Numl .
?
, , . , — . CSS , . , 4 , , , , . : .
, . , , , . .
Numl. - <nu-attrs>
, -. , . , :
<nu-pane>
<nu-attrs for="btn" color="special"></nu-attrs>
<nu-btn>Button 1</nu-btn>
<nu-btn>Button 2</nu-btn>
</nu-pane>
, color="special"
. , ( !) <nu-attrs>
, . <nu-attrs>
, , . , .
- , , , . , ( ).
. , - , , . ( 0 359 HSL) Custom Properties , .
. (, ), , .
-. Sellerscale
, :
- . ( WCAG Contrast Ratio).
- , , .
- .
- API .
- , .
- , (, )
, . , . : tenphi.me ( ) Storybook. CodePen Numl.
numl.design
Storybook
, , hue()
, , , Numl HSC (, , ). .
. Numl. tenphi.me
Numl -, .
, , Numl. ...
( )
. , . ( ) : breakpoint', , |
( ), - . breakpoint' , :
<nu-root responsive="60rem|40rem">
...
</nu-root>
(, ). - . , |
:
<nu-root responsive="60rem|40rem">
<nu-grid columns="repeat(4, 1fr)|1fr 1fr|1fr">
...
</nu-grid>
</nu-root>
, . , , .
Sellerscale
, , . , , ( ), .
:
<nu-card shadow="0 :hover[1]">
Content
</nu-card>
, , , .
, :
<nu-card>
<nu-block color="^ text :hover[special]">Content</nu-block>
</nu-card>
. , :
nu-card[color="^:hover[special]"]:hover {
color: var(--nu-spcial-color);
}
nu-card[color="^:hover[special]"]:not(:hover) {
color: var(--nu-text-color);
}
. ? Numl . , ( text
). CSS , , ! , , , .
is-
. :
<nu-btn is-loading>
<nu-el show="^ y :loading[n]">Submit</nu-el>
<nu-icon name="loader" show="^ n :loading[y]"></nu-icon>
</nu-btn>
, , CSS :
- , , .
- " ", .
- .
- . , , hover. , , , hover touch-. ( Numl, API).
- Media Queries.
- Numl . runtime , , ,
getComputedStyle()
. . - . , . .
, , . :)
, , . : .
.
, ? , HTML, <button>
.
Numl, . . Numl Behaviors. . , nx-
.
<nu-el nx-action>Button</nu-el>
REPL — nu-el
.
, nu-btn
. Numl 35-. . , , , Markdown Numl!
Numl Storybook: Markdown->Numl
. , , , . ( !)
- , - .
Numl ARIA, .
. . , ID, . , ID button-23
.
Numl . ID , . , . , ID, ID, Numl ID. , , .
<nu-region labelledby="label">
<nu-block id="label"></nu-block>
</nu-region>
HTML, , .
Numl aria- . , , , ( aria-
), .
:
<nu-btn label="Turn on lights">
<nu-icon name="sun"></nu-icon>
</nu-btn>
. , .
, Numl ARIA , .
Numl - . , CSS JS "", . , , :
- . Numl 40, , , . , , , , Numl - JS . .
- . Numl , , , . , , UX .
- SSR. Numl SSR , . . SEO , prerender.io.
- . Numl , Custom Elements, Custom Properties CSS Grid. Numl Edge 15+ , ( ).
- Numl - , JS-. , . .
- Numl - , . .
, Numl , , :
- . , "-", , .
- DX, -. HTML, . (// / )
- " " , .
- . " CSS". .
- CSS- ( TailwindCSS) , .
- , .
- - , .
- ;)
Numl , . , , .
PRE-BETA (v0.11). , , experimental
v1 (, ). 2020.
:
- 1100+
- 200+ npm
- ~1300
- 85 GitHub (, , !)
Numl, , , , . ( !) .
! . :
- GitHub
- – numl.design) / (Stack: Numl + Parcel)
- Storybook / (Stack: Numl + Vue2)
- WIP
- WIP
- Telegram – @numldesign / Gitter
- Twitter – @numldesign
Numl:
- , Numl / (Stack: Numl + Vue3 + Vite)
- Sellerscale — , Numl ( v0.10)
- - @KatrinLuna / (Stack: Numl + Vue2)
,
REPL, Numl.
, , , JS CSS: