Stop shipping "dumb" keyboard shortcuts that ignore your user's OS. I’m currently building fscomp - a free, open-source UI library for devs who are tired of "dumb" CSS skins. Today, I finished the Kbd (Keyboard) component, and it’s more than just a styled box. Most Kbd components are static. This one is platform-aware. What’s under the hood: ⚡ Platform Intelligence: It auto-detects the user's OS. Pass keys={["mod", "K"]} and it renders ⌘ + K on Mac or Ctrl + K on Windows instantly. No more manual mapping. 🎨 7 Pro Variants: From "Mac-style", gradients and "Modern", blurs to "Glassmorphism." It fits any design system out of the box. 🧠 Built-in Logic: Native "Click to Copy" functionality and "Active" states for real-time keypress feedback-zero extra boilerplate needed. The Tech Stack: - CVA & Tailwind: Perfectly balanced for flexible styling. - TypeScript: Fully type-safe key symbols. - Micro-interactions: Smooth scales and success-rings on copy. Current Status: 26/27 atoms completed. 🚀 I’m building for a "Beauty with Brains" aesthetic - premium looks paired with robust logic. The library isn't live yet, but we’re getting closer every day. Devs: What’s the most annoying part of handling shortcuts in your UI? I'll bake the solution into these atoms. 👇 Follow to follow the fscomp journey. (fscomp - Beauty with Brains) #BuildingInPublic #OpenSource #ReactJS #TailwindCSS #DesignSystems #WebDev #TypeScript
More Relevant Posts
-
🛑 Stop fighting the specificity wars in your stylesheets. CSS @layer is a game-changer for architectural control. It allows you to define explicit layers of the cascade, letting you manage specificity order independently of selector weight. By grouping styles into layers (e.g., reset, base, components, utilities), you guarantee that styles in a higher layer override those in lower ones, regardless of how specific the selectors are. The magic lies in the order of definition. If you declare `@layer base, theme;`, the `theme` layer always wins over `base`, even if `base` uses an ID selector and `theme` uses a class. This eliminates the need for hacky workarounds like `!important` or convoluted selector chaining. @layer base, components, overrides; @layer base { h1 { color: red; } } /* This wins even though h1 has lower specificity */ @layer overrides { .text-blue { color: blue; } } 🏗️ Pro tip: Wrap third-party library styles in their own layer (e.g., `@layer vendor`) to easily override their defaults. This keeps your custom code clean and ensures your design system always wins. How are you currently managing specificity in your large-scale apps? Drop a comment below! 👇 #CSS #FrontendDev #WebArchitecture #WebDev
To view or add a comment, sign in
-
DAY 9: The "Stacking Cards" Effect (Awwwards Style). If you want to present 5 features or portfolio items, a standard long scroll is boring. The "Sticky Stack" keeps the user focused. It feels like shuffling through a deck of high-quality photos. The Engineering: Pinning: I used ScrollTrigger with pinSpacing: false. This allows the next section to physically slide over the current one, instead of pushing it down. Depth Perception: As Card B rises, Card A scales down (0.9) and darkens. This creates a 3D Z-axis effect purely with CSS transforms. Dynamic Math: The pin duration is calculated dynamically based on the array length. 4 cards? 300% scroll distance. 10 cards? 900%. It scales automatically. The result: A high-retention layout that works perfectly on Mobile and Desktop. 👇 Watch the shuffle: Notice how the background card darkens just before it gets covered? That’s the detail that makes it feel premium. #gsap #frontend #webdesign #reactjs #javascript #creativecoding #uiux #parallax
To view or add a comment, sign in
-
Built a fully functional calculator using HTML, CSS, and JavaScript! Features include: Basic arithmetic operations: +, −, ×, ÷ Intuitive UI with buttons & display screen Real-time result display & input handling Bonus: Keyboard support and enhanced styling A simple yet effective project demonstrating frontend interactivity and UI design skills at CodeAlpha Github link: https://lnkd.in/gJh_QUE2 #JavaScript #WebDevelopment #Frontend #Calculator #MiniProject
To view or add a comment, sign in
-
Day 5 of 15 –Learn Frontend in 1 Minute width looks harmless. It’s one of the biggest reasons layouts break. When you set width: 400px, you’re locking the element. It won’t care if the screen is smaller. It won’t care about content. That’s fine for icons or buttons. It’s risky for containers. This is why experienced developers lean on max-width. max-width says: “Grow up to this point, but don’t force it.” -So on large screens, layouts breathe. -On small screens, they adapt instead of breaking. A simple rule that saves hours: -Fixed things → width -Flexible layouts → max-width Most responsive bugs don’t come from media queries. They come from this choice.
To view or add a comment, sign in
-
-
𝐀𝐫𝐞 𝐲𝐨𝐮𝐫 𝐑𝐞𝐚𝐜𝐭 𝐜𝐨𝐦𝐩𝐨𝐧𝐞𝐧𝐭𝐬 "𝐟𝐥𝐢𝐜𝐤𝐞𝐫𝐢𝐧𝐠" 𝐛𝐞𝐟𝐨𝐫𝐞 𝐭𝐡𝐞𝐲 𝐬𝐞𝐭𝐭𝐥𝐞? 𝐘𝐨𝐮 𝐦𝐢𝐠𝐡𝐭 𝐛𝐞 𝐮𝐬𝐢𝐧𝐠 𝐭𝐡𝐞 𝐰𝐫𝐨𝐧𝐠 𝐞𝐟𝐟𝐞𝐜𝐭 𝐡𝐨𝐨𝐤. I recently debugged an annoying layout shift in a `Next.js` modal component. We were using `useEffect` to measure the modal's height and adjust its position dynamically. The problem? A brief, noticeable flash where the modal appeared at its initial position before snapping to the correct, adjusted one. The fix was to switch from `useEffect` to `useLayoutEffect`. Here's why it matters: * `useEffect` runs asynchronously after the browser has painted the screen. If your effect code (like DOM measurements or style changes) modifies elements that were just painted, the user sees the initial paint, then a re-paint after your effect runs. Hello, flicker! * `useLayoutEffect` runs synchronously after all DOM mutations but before the browser paints. This means any DOM-read/write operations happen before the user sees anything, preventing those visual inconsistencies. Think of it: if you need to perform DOM measurements or make critical visual updates before the user sees the element, `useLayoutEffect` is your friend. If you just need to fetch data or subscribe to an event, `useEffect` is usually fine. When have you had to reach for `useLayoutEffect`? Share your "flicker fix" stories below! #React #Frontend #WebDevelopment #ReactHooks #Performance
To view or add a comment, sign in
-
When a website uses a design system, it’s common to have many buttons sharing the same CSS class. That’s great for consistency. Until you need to ship ONE targeted accessibility fix like updating an aria-label and you don’t want to affect every other button on the site. A simple pattern that keeps fixes safe: • Keep the shared class • Add a unique attribute filter (often href) • Apply the change only to that exact element Example concept: • .hero__button--primary matches many buttons • .hero__button--primary[href="…"] matches only one Why it matters: • No template changes • No risky global overrides • No regressions across the UI Developer-first accessibility often comes down to small, precise interventions that improve real user outcomes without increasing risk. What do you usually use to target one element safely when classes are reused everywhere? #accessibility #a11y #WCAG #frontend #JavaScript #Pluro
To view or add a comment, sign in
-
-
Headline: 🎬 From Code to Component: Day 1 of 30! Following up on my earlier post, here is a quick walkthrough of my Day 1 task for the 30-day Frontend Challenge at QSpiders (Vasai-Virar). In this video, you can see: ✅ The HTML structure for a clean login layout. ✅ The CSS Media Queries in action to ensure the page is fully responsive. ✅ How the UI adapts seamlessly from desktop to mobile screens. Seeing the code come to life is the best part of web development! Onwards to Day 2. 🚀 #WebDevelopment #CodingInAction #QSpiders #Frontend #ResponsiveDesign #CSS #HTML #30DaysOfCode #TechJourney
To view or add a comment, sign in
-
Stop adding arbitrary wrapper classes just to style a parent element. 🛑 The CSS `:has()` pseudo-class is a total game-changer for dynamic UI design. Often referred to as the "parent selector," it allows you to select and style an element based on the presence or state of its descendants. This logic was previously impossible with pure CSS, often forcing us to rely on JavaScript to toggle parent classes or create messy DOM structures. Now, you can create robust, conditional layouts directly in your stylesheet. It essentially transforms the selector logic from "bottom-up" to "top-down," giving you immense power over component styling without touching the component logic. 💡 Use this for form validation. You can style the input field's container based on the `:invalid` state of the input itself without writing extra JS logic. How are you using the `:has()` selector in your projects? Let me know below! 👇 #CSS #CSS3 #WebDesign #WebDevelopment #Frontend #WebDev #JavaScript #Coding #Programming #Developer #SoftwareEngineering #Tech #100DaysOfCode #UIUX #FrontendDeveloper
To view or add a comment, sign in
-
-
I’ve been working on a Login & Authentication Page built with HTML and CSS. The focus of this project was on: Clean and structured form design Proper layout using Flexbox Responsive behavior across different screen sizes A UI that can be easily extended with real authentication logic I enjoy working on interfaces like this because they require attention to details: spacing, alignment, usability, and visual hierarchy. Simple projects are often the best way to reinforce fundamentals and build solid, extensible bases. 🔗 GitHub repository: https://lnkd.in/eveG7JbV 🔗 Portfolio: https://lnkd.in/e3Cxyrx3 #SoftwareEngineering #Frontend #HTML #CSS #WebDevelopment #UI #CleanDesign
To view or add a comment, sign in
-
-
Day 29 of #100DaysOfWeb: The "Pure CSS" 3D Theme Engine! Key Technical Features: 1. Zero-JS Logic: Used hidden radio buttons and the General Sibling Selector (~) to manage the state between Light, Dark, and Neutral themes. 2. 3D Perspective: Implemented perspective and rotateY to create a physical sense of depth when navigating. 3. Visual Hierarchy: Leveraged translateZ to make the product image "pop" out of the card container, creating a premium layer effect. 4: Dynamic Theming: Used CSS Variables (--var) to instantly swap color palettes across the entire component with one click. Check out the code here: https://lnkd.in/eqWDgu2d Don't forget to try this code: https://lnkd.in/eTxZKJi3 #WebDevelopment #HTML5 #CSS3 #CodingChallenge #100DaysOfCode #Frontend #UIUX #Programming
To view or add a comment, sign in
-
Explore content categories
- Career
- Productivity
- Finance
- Soft Skills & Emotional Intelligence
- Project Management
- Education
- Technology
- Leadership
- Ecommerce
- User Experience
- Recruitment & HR
- Customer Experience
- Real Estate
- Marketing
- Sales
- Retail & Merchandising
- Science
- Supply Chain Management
- Future Of Work
- Consulting
- Writing
- Economics
- Artificial Intelligence
- Employee Experience
- Workplace Trends
- Fundraising
- Networking
- Corporate Social Responsibility
- Negotiation
- Communication
- Engineering
- Hospitality & Tourism
- Business Strategy
- Change Management
- Organizational Culture
- Design
- Innovation
- Event Planning
- Training & Development