ð¥ ä»é±ã®äž»èŠããŒã
- ææ°ã®CSSæ©èœã§ããã«ã¹ã±ãŒãã¬ã€ã€ãŒ(Cascade Layers)ãš
if()
颿°ã掻çšããŠãCSSã®æ§é åãšæ¡ä»¶ä»ãã¹ã¿ã€ãªã³ã°ãæ¹åããæ¹æ³ãæ¢ããReactãšJavaScriptãšã³ã·ã¹ãã ã®äž»èŠãªãªãªãŒã¹ãã¢ãŒã·ã§ã³ãã¶ã€ã³ã·ã¹ãã ã®æ§ç¯æŠç¥ãªã©ãããã³ããšã³ãéçºã®æ§ã ãªææ°ååãèŠãŠãããŸãã
1. ð æ·±æã
-
CSS Cascade Layers Vs. BEM Vs. Utility Classes: Specificity Control (åºå ž: CSS Weekly #614)
Cascade Layers
- èæ¯: CSSã®ä»æ§è©³çŽ°åºŠ(Specificity)ã®ç®¡çã¯ãå€§èŠæš¡ãããžã§ã¯ãã«ãããŠåžžã«å°é£ãªèª²é¡ã§ãããBEMããŠãŒãã£ãªãã£ã¯ã©ã¹ã®ãããªæ¹æ³è«ãããã解決ããããšè©Šã¿ãŠããŸããããã«ã¹ã±ãŒãã¬ã€ã€ãŒã®ç»å Žã¯ã仿§è©³çŽ°åºŠã®å¶åŸ¡ã«å¯Ÿããæ ¹æ¬çãªè§£æ±ºçãæç€ºããŸãã
- äž»ãªæ©èœ: ã«ã¹ã±ãŒãã¬ã€ã€ãŒã¯
@layer
ã«ãŒã«ã䜿çšããŠãã¹ã¿ã€ã«ã·ãŒããè€æ°ã®éå±€ã«åå²ããŸãããã®éå±€ã®é åºã«ãã£ãŠã¹ã¿ã€ã«ã®åªå é äœã決å®ããããããã»ã¬ã¯ã¿ã®ä»æ§è©³çŽ°åºŠããœãŒã¹é åºãžã®äŸå床ãäœããªããŸããããã«ããããµãŒãããŒãã£ã®ã©ã€ãã©ãªãããŒãããŠãŒãã£ãªãã£ãã³ã³ããŒãã³ãã®ã¹ã¿ã€ã«ãäœç³»çã«ç®¡çããäºæž¬å¯èœã«ããããšãã§ããŸãã - ã³ãŒãäŸ:
@layer reset, base, components, utilities; @layer base { p { max-width: 65ch; } } @layer components { .card { background-color: grey; } }
- å®åã§ã®é©çš: ãã¶ã€ã³ã·ã¹ãã ãå€§èŠæš¡ã¢ããªã±ãŒã·ã§ã³ã§ã¹ã¿ã€ã«ã®è¡çªãé²ããCSSã¢ãŒããã¯ãã£ãåçŽåããã®ã«éåžžã«åœ¹ç«ã¡ãŸããBEMãšãŠãŒãã£ãªãã£ã¯ã©ã¹ãã¬ã€ã€ãŒå ã§äœµçšããåæ¹æ³è«ã®é·æã掻ããããšãã§ããŸãã
- 泚æäºé : ã¬ã€ã€ãŒã®é åºã仿§è©³çŽ°åºŠã«å€§ããªåœ±é¿ãäžããããããããžã§ã¯ãã®åææ®µéã§å šäœçãªã¬ã€ã€ãŒæ§é ãæ éã«èšèšããããšãéèŠã§ãã
-
CSS Conditionals with the New
if()
Function (åºå ž: Frontend Focus #700)
CSS if() Function
- èæ¯: CSSã«
if()
颿°ãå°å ¥ãããã¡ãã£ã¢ã¯ãšãªãã³ã³ããã¯ãšãªãsupports()
ã«ãŒã«ãšå ±ã«ã€ã³ã©ã€ã³æ¡ä»¶æã䜿çšå¯èœã«ãªããCSSã¢ãŒããã¯ãã£ã«æ°ããªå¯èœæ§ãéãããŸããã - äž»ãªæ©èœ:
if()
颿°ã䜿çšãããšãç¹å®ã®æ¡ä»¶ã«å¿ããŠCSSããããã£ã®å€ãåçã«å€æŽã§ããŸããäŸãã°ããã¥ãŒããŒãã®å¹ ã«å¿ããŠç°ãªãè²ã®å€ãé©çšããããšãããã£ãäžè¡ã§ç°¡æœã«åŠçã§ããŸãã - ã³ãŒãäŸ:
.element { --is-large: if(container(width > 40em), 1, 0); padding: calc(var(--is-large) * 2rem + 1rem); }
- å®åã§ã®é©çš: ã¬ã¹ãã³ã·ããã¶ã€ã³ã§è€æ°ã®ã¡ãã£ã¢ã¯ãšãªãããã¯ã䜿çšããããè€éãª
calc()
颿°ã䜿çšããããã代ããã«ãã³ãŒããããç°¡æœã§çŽæçã«ããããšãã§ããŸãã - 泚æäºé : Chrome 137以äžã§ãµããŒããããŠãããããããã°ã¬ãã·ããšã³ãã³ã¹ã¡ã³ãæŠç¥ãšäœµçšããå¿ èŠããããŸããå šãŠã®ãã©ãŠã¶ã§ãµããŒãããããŸã§ã«ã¯æéããããå¯èœæ§ããããŸãã
- èæ¯: CSSã«
èŠéããªãã³ã³ãã³ã
- Grainy Gradients (åºå
ž: CSS Weekly #614)
- èŠçŽ: CSSã°ã©ããŒã·ã§ã³ã§çºçããã«ã©ãŒãã³ãã£ã³ã°çŸè±¡ããSVGã®å€äœãã£ã«ã¿ãŒ(displacement map)ã䜿çšããŠåŸ®çްãªãã€ãºãã¯ã¹ãã£ã远å ããããšã§è§£æ±ºããæ¹æ³ã玹ä»ããŸããããã«ãããæ»ããã§èªç¶ãªã°ã©ããŒã·ã§ã³ãäœæã§ããŸãã
- CSS Intelligence: Speculating on the Future of a Smarter Language (åºå
ž: Frontend Focus #700)
- èŠçŽ: CSSã«
if()
ã®ãããªè«ççãªæ©èœã远å ãããããšã§ãèšèªãã©ã®ããã«ãããè³¢ããé²åããŠããããæ¢æ±ããŸããCSSã®æªæ¥ãè€éæ§ã®å¢å ã«å¯Ÿããæžå¿µããããŠéçºè ããããã®å€åã«ã©ãåå¿ããŠãããã«ã€ããŠã®æŽå¯ãæäŸããŸãã
- èŠçŽ: CSSã«
2. ð ïž ããŒã« & ã©ã€ãã©ãª
-
Milkdown: A Plugin-Driven WYSIWYG Markdown Editor Framework (åºå ž: JavaScript Weekly #743)
Milkdown Editor
- æŠèŠ: ãã©ã°ã€ã³ã·ã¹ãã ãåºç€ãšããWYSIWYGããŒã¯ããŠã³ãšãã£ã¿ãã¬ãŒã ã¯ãŒã¯ã§ããé«åºŠãªã«ã¹ã¿ãã€ãºãå¯èœã§ãå ¬åŒããã¥ã¡ã³ãèªäœãMilkdownã§ã¬ã³ããªã³ã°ãããã»ã©åŒ·åã§ãã
- äœ¿çšæ³: ReactãVueãSvelteãªã©æ§ã
ãªãã¬ãŒã ã¯ãŒã¯ãšå
±ã«äœ¿çšã§ããã³ã¢ããžãã¯ã¯ãã¬ãŒã ã¯ãŒã¯ã«äŸåããŸããããã©ã°ã€ã³ã远å ããŠæ©èœãç°¡åã«æ¡åŒµã§ããŸãã
import { Editor, rootCtx, defaultValueCtx } from '@milkdown/core'; import { commonmark } from '@milkdown/preset-commonmark'; Editor.make() .config((ctx) => { ctx.set(rootCtx, document.querySelector('#editor')); ctx.set(defaultValueCtx, '# Hello world'); }) .use(commonmark) .create();
- å®è·µã®ãã³ã: ãªã¢ã«ã¿ã€ã ã³ã©ãã¬ãŒã·ã§ã³ãããŒãã«ç·šéãæ°åŒå ¥åãªã©ãæ§ã ãªé«åºŠãªæ©èœããã©ã°ã€ã³ãéããŠå®è£ ã§ããããŒãã¢ããªãããã¥ã¡ã³ãããŒã«ãããã°ãšãã£ã¿ãªã©ã«é©ããŠããŸãã
-
BlockNote 0.33: A 'Notion-Like' Block-Based Text Editor (åºå ž: React Status #435)
BlockNote Editor
- æŠèŠ: ProseMirrorãšTipTapãåºç€ãšãããNotionã¹ã¿ã€ã«ãã®ãããã¯ããŒã¹ããã¹ããšãã£ã¿ã§ãããã©ãã°ïŒããããããªã¢ã«ã¿ã€ã ã³ã©ãã¬ãŒã·ã§ã³ãAIæ©èœãã«ã¹ã¿ã ãã¹ã©ãã·ã¥ã³ãã³ããã¡ãã¥ãŒãªã©ãæäŸãã匷åãªç·šéç°å¢ãæ§ç¯ã§ããŸãã
- äœ¿çšæ³: Reactã§äœ¿ããããããã«èšèšãããŠããŸãã
useBlockNote
ããã¯ã䜿çšããŠãšãã£ã¿ã€ã³ã¹ã¿ã³ã¹ãäœæããBlockNoteView
ã³ã³ããŒãã³ãã§ã¬ã³ããªã³ã°ããŸããimport { BlockNoteView, useBlockNote } from "@blocknote/react"; import "@blocknote/react/style.css"; export default function App() { const editor = useBlockNote(); return <BlockNoteView editor={editor} />; }
- å®è·µã®ãã³ã: ãªã¢ã«ã¿ã€ã ã³ã©ãã¬ãŒã·ã§ã³ææžããŒã«ãããã°ãšãã£ã¿ãããŒãã¢ããªãªã©ãæ§ã ãªã¢ããªã±ãŒã·ã§ã³ã«ç°¡åã«åã蟌ãã§äœ¿çšã§ãããã©ã°ã€ã³ã«ããæ©èœæ¡åŒµã容æã§ãã
èŠéããªãã³ã³ãã³ã
- Kelp (åºå
ž: CSS Weekly #614)
- èŠçŽ: HTMLãæããéçºè ã®ããã®UIã©ã€ãã©ãªã§ãææ°ã®CSSãšãŠã§ãã³ã³ããŒãã³ããåºç€ãšããŠããŸããçŽç²ãªHTMLã ãã§ã䜿çšã§ãããããç°¡åãªãããžã§ã¯ãããããã¿ã€ãã«åœ¹ç«ã¡ãŸãã
- snapDOM 1.8: Captures DOM Nodes as Images (åºå
ž: JavaScript Weekly #743)
- èŠçŽ: DOMããŒããã¹ã¿ã€ã«ããã©ã³ããèæ¯ç»åãªã©ãä¿æãããŸãŸãæ¡åŒµå¯èœãªSVGç»åãšããŠãã£ããã£ãããé«éã§æ£ç¢ºãªã©ã€ãã©ãªã§ãããŠã§ããµã€ãã§æ§ã ãªäŸã確èªã§ããŸãã
3. ð ããããèšäº & ããã
- The ultimate guide to proper use of animation in UX (åºå
ž: Smashing Newsletter #515)
Animation in UX
- äž»èŠãªã€ã³ãµã€ã: åªããUIã¢ãã¡ãŒã·ã§ã³ã¯ããŠãŒã¶ãŒã®æ³šæãæ£æŒ«ã«ãããããšãªããèªç¶ã«æããããã¹ãã§ãããã®ã¬ã€ãã¯ãã¢ãã¡ãŒã·ã§ã³ã®æç¶æéãé床ãã€ãŒãžã³ã°ãã³ã¬ãªã°ã©ãã£ãªã©ãUXã§ã¢ãã¡ãŒã·ã§ã³ãæ£ãã䜿çšããããã®æ®éçãªååã説æããŸããç»é¢ãµã€ãºããã©ãããã©ãŒã ã«å¿ããŠã¢ãã¡ãŒã·ã§ã³ã調æŽãããŠãŒã¶ãŒã®èŠç·ãèªå°ããæ¹æ³ãåŠã¶ããšãã§ããŸãã
- Building a motion design system for a product company (åºå
ž: Smashing Newsletter #515)
Motion Design System
- äž»èŠãªã€ã³ãµã€ã: ã¢ãŒã·ã§ã³ã·ã¹ãã ãæ§ç¯ããããšã¯ãã«ã©ãŒãã¬ãããã¿ã€ãã°ã©ãã£ã¹ã±ãŒã«ãå®çŸ©ããããšãšå€§å·®ãããŸããããã®èšäºã¯ãã¢ãŒã·ã§ã³ç£æ»ã®èšç»ãšå®è¡ããå§ãŸããã¢ãŒã·ã§ã³ãã©ã¡ãŒã¿ã®å®çŸ©ãã³ã³ããŒãã³ãã®ã€ã³ã¿ã©ã¯ã·ã§ã³ã®ããã®ã¢ãŒã·ã§ã³ããŒã¯ã³ã®å®è£ ãŸã§ãå šããã»ã¹ãæ±ãã±ãŒã¹ã¹ã¿ãã£ã§ããè±å¯ãªäŸãéããŠãã¢ãŒã·ã§ã³ãã·ã¹ãã åããããã«å¿ èŠãªè²Žéãªè³æãæäŸããŸãã
- What Every React Developer Should Know About Signals (åºå
ž: React Status #435)
- äž»èŠãªã€ã³ãµã€ã: SolidJSã®åµå§è ã§ããRyan Carniatoããææ°ã®JavaScriptã³ãŒãã«ãããã·ã°ãã«(Signals)ã®çŸç¶ã説æãããããReactã®ã¢ãããŒããšæ¯èŒããŸããã·ã°ãã«ãã©ã®ããã«ç¶æ 管çãããå¹ççã«ã§ãããã«ã€ããŠãæ·±ãæŽå¯ãåŸãããšãã§ããŸãã
èŠéããªãã³ã³ãã³ã
- Writing alt text with AI (åºå
ž: CSS Weekly #614)
- èŠçŽ: LLM(å€§èŠæš¡èšèªã¢ãã«)ãšé©åãªããã³ããã䜿çšããŠãç»åã«æçšãªä»£æ¿ããã¹ã(alt text)ãäœæããè² æ ã軜æžããæ¹æ³ã説æããŸããã¢ã¯ã»ã·ããªãã£åäžã«AIãæŽ»çšããå ·äœçãªäºäŸã§ãã
- Respecting Usersâ Motion Preferences (åºå
ž: Smashing Newsletter #515)
- èŠçŽ: ãŠãŒã¶ãŒã®åãã«é¢ããèšå®ãå°éããããšããªãéèŠãªã®ãããããŠ
prefers-reduced-motion
ã¡ãã£ã¢ã¯ãšãªãšæç€ºçãªã¢ãŒã·ã§ã³ãã°ã«ã䜿çšããŠãããã©ã®ããã«å®è£ ã§ãããã説æããŸãã
- èŠçŽ: ãŠãŒã¶ãŒã®åãã«é¢ããèšå®ãå°éããããšããªãéèŠãªã®ãããããŠ
- 'Tailwind is the Worst Form of CSS, Except for all the Others' (åºå
ž: Frontend Focus #700)
- èŠçŽ: Tailwind CSSã«å¯Ÿããæ¹å€çãªèŠç¹ãšå ±ã«ãããã«ãããããããªãå€ãã®éçºè ãä»ã®ä»£æ¿æ¡ãããTailwindãéžæããã®ãã«ã€ããŠã®çŸå®çãªèå¯ãçã蟌ãã§ããŸãã
4. âš ã¢ã€ãã¢
- How to Create Kinetic Image Animations with React Three Fiber (åºå
ž: React Status #435)
Kinetic Image Animations
- ç¹åŸŽ: React Three Fiberã䜿çšããŠå¹»æ³çãªãããã£ãã¯(kinetic)ç»åã¢ãã¡ãŒã·ã§ã³å¹æãäœæããæ¹æ³ãæè¡çã«è©³çްã«èª¬æããŸãããŠã§ãã§ãã©ãããã¯ãªèŠèŠäœéšãå®è£ ãããéçºè ã«ãšã£ãŠã倧ããªã€ã³ã¹ãã¬ãŒã·ã§ã³ãšãªãã§ããããã©ã€ããã¢ã§çŽæ¥ç¢ºèªã§ããŸãã
- Road Trip to Surf Beach - Pure CSS (åºå
ž: CSS Weekly #614)
Pure CSS Animation
- ç¹åŸŽ: CSSã®ã¿ã§å®è£ ãããçŸããã¢ãã¡ãŒã·ã§ã³ãã¢ã§ããJavaScriptãªãã§ãè€éã§å°è±¡çãªèŠèŠå¹æãçã¿åºããããšã瀺ãçŽ æŽãããäŸã§ãã
5. â¡ïž ããããŒã
- State of CSS 2025 survey is now open. (åºå
ž: CSS Weekly #614)
- èŠçŽ: æ¯å¹ŽæäŸã®State of CSS 2025ã¢ã³ã±ãŒããéå§ãããŸãããåå ããŠCSSã®æªæ¥ãå ±ã«äœããŸãããã
- Let's Encrypt has issued its first certificate for an IP address. (åºå
ž: Frontend Focus #700)
- èŠçŽ: Let's Encryptãå²äžåããŠIPã¢ãã¬ã¹ã«å¯ŸããèšŒææžãçºè¡ããŸããããã®ãªãã·ã§ã³ã¯ãä»å¹Žã®æ®ãã®æéã§æ®µéçã«æ¡å€§ãããäºå®ã§ãã
- TypeScript 5.9 Beta has been released. (åºå
ž: React Status #435)
- èŠçŽ: TypeScript 5.9ããŒã¿çããªãªãŒã¹ãããŸãããæ°æ©èœããã¡æ©ã確èªã§ããŸãã
- Vercel has acquired NuxtLabs, the company maintaining Nuxt. (åºå
ž: React Status #435)
- èŠçŽ: VercelãVue.jsãšã³ã·ã¹ãã ã®æ žå¿ã§ããNuxtãç¶æç®¡çããNuxtLabsãè²·åããŸãããããã«ãããNext.jsãSvelteã«ç¶ããNuxtãVercelãšç·å¯ãªé¢ä¿ãçµã¶ããšã«ãªããŸãã
- The Microsoft Edge team has reached a major milestone of achieving a global First Contentful Paint (FCP) below 300ms. (åºå
ž: Frontend Focus #700)
- èŠçŽ: Microsoft EdgeããŒã ããå šäžçã§300msæªæºã®FCP(First Contentful Paint)ãéæãããšããäž»èŠãªãã€ã«ã¹ããŒã³ã«å°éããŸããã
6. ð ãªãªãŒã¹
- Deno 2.4 (åºå
ž: JavaScript Weekly #743)
- ã¢ããããŒã: ãµãŒããŒããã³ã¯ã©ã€ã¢ã³ããµã€ãçšã®åäžãã¡ã€ã«ãã³ãã«ãçæãã
deno bundle
ã³ãã³ããåå°å ¥ãããŸãããnpmããã³JSRã®äŸåé¢ä¿ããµããŒãããèªåããªãŒã·ã§ã€ãã³ã°æ©èœãå«ãŸããŸãã
- ã¢ããããŒã: ãµãŒããŒããã³ã¯ã©ã€ã¢ã³ããµã€ãçšã®åäžãã¡ã€ã«ãã³ãã«ãçæãã
- Rspack 1.4 (åºå
ž: JavaScript Weekly #743)
- ã¢ããããŒã: RustããŒã¹ã®é«éãŠã§ããã³ãã©ãWebAssemblyã®ãããã§ããã©ãŠã¶ã§ãå®è¡å¯èœã«ãªããŸããã
- Unistyles 3.0 (åºå
ž: React Status #435)
- ã¢ããããŒã: React Nativeã¢ããªã®ããã®åŒ·åãªã¹ã¿ã€ãªã³ã°ã©ã€ãã©ãªããã€ãã£ãã³ãŒããšC++ã䜿çšããŠããã©ãŒãã³ã¹ãæå€§åããReact Nativeã®æ°ããã¢ãŒããã¯ãã£(Fabric)ã«å®å šã«çµ±åãããŸããã
- Electron 37.0 (åºå
ž: JavaScript Weekly #743)
- ã¢ããããŒã: ã¯ãã¹ãã©ãããã©ãŒã ãã¹ã¯ãããã¢ããªããŒã«ãããã®æ°ããããŒãžã§ã³ã
- React DayPicker 9.8 (åºå
ž: React Status #435)
- ã¢ããããŒã: ã«ã¹ã¿ãã€ãºå¯èœãªæ¥ä»éžæã³ã³ããŒãã³ããããŒããŒãããã²ãŒã·ã§ã³æ©èœãæ¹åãããŸããã
- React Chessboard 5.1 (åºå
ž: React Status #435)
- ã¢ããããŒã: ãã§ã¹ç€ãã¬ã³ããªã³ã°ããReactã³ã³ããŒãã³ãã
- ESLint 9.30.0 (åºå
ž: JavaScript Weekly #743)
- ã¢ããããŒã: JavaScriptãªã³ã¿ãŒããŒã«ã®ææ°ããŒãžã§ã³ã
- Material UI 7.2 (åºå
ž: React Status #435)
- ã¢ããããŒã: ãããªã¢ã«ãã¶ã€ã³ã䜿çšããç¬ç«ããReactã³ã³ããŒãã³ãã©ã€ãã©ãªã
- snapDOM 1.8 (åºå
ž: Frontend Focus #700)
- ã¢ããããŒã: DOMããŒããç»åãšããŠãã£ããã£ããã©ã€ãã©ãªãHTMLèŠçŽ ãã¹ã¿ã€ã«ãç¶æãããŸãŸSVGç»åãšããŠãã£ããã£ããŸãã
- Babel 7.28.0 (åºå
ž: JavaScript Weekly #743)
- ã¢ããããŒã: JavaScriptã³ã³ãã€ã©ã®ææ°ããŒãžã§ã³ã
âïž ãããã«
ä»é±ã¯ãCSSã®æ§é çãªçºå±ãå£éèŠãããšãã§ããã«ã¹ã±ãŒãã¬ã€ã€ãŒãšãæ¡ä»¶ä»ãããžãã¯ãåçŽåããif()
颿°ãç¹ã«å°è±¡çã§ããããããã®æ©èœã¯ãè€éãªã¹ã¿ã€ã«ã·ãŒããããäœç³»çã§äºæž¬å¯èœã«ããé·æçãªã¡ã³ããã³ã¹ã³ã¹ãã倧å¹
ã«åæžããŠãããã§ãããããŸãããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãè±ãã«ããã¢ãŒã·ã§ã³ãã¶ã€ã³ã«äœç³»çã«ã¢ãããŒãããæ¹æ³è«ã¯ãåãªãèŠèŠå¹æãè¶
ããäžè²«æ§ã®ããå®æåºŠã®é«ã補åãäœãäžã§äžå¯æ¬ ãªèŠçŽ ã§ããããšãæ¹ããŠæãèµ·ããããŠãããŸããåºæ¬ã«ç«ã¡è¿ãã€ã€ããæ°ããããŒã«ãç©æ¥µçã«æŽ»çšããŠãããè¯ããŠã§ããç¯ããŠããäžé±éã«ãªãããšãé¡ã£ãŠããŸãã