Gradient Borders Will Be the Death of Me ![rw-book-cover](https://i.ytimg.com/vi/s1ZrF7PdV1Y/maxresdefault.jpg) Full Document Contents/Articles/Gradient Borders Will Be the Death of Me.md, Gradient Borders Will Be the Death of Me, Syntax. ## Document Notes --- tags: [css, web-design, ui-components] author: Kevin Powell source: YouTube reference: https://www.youtube.com/watch?v=s1ZrF7PdV1Y date created: 2024-12-28 14:32 --- # ๐Ÿท๏ธ Title: Gradient borders will be the death of me ## ๐Ÿงฐ Action Inbox - [H1] Create reusable gradient button component system โ€” CSS variables for extensibility #css #components - [H2] Implement proper gradient border technique โ€” wrapper element strategy #css #gradients - [H3] Add smooth hover transitions with @property โ€” color-mix animation limitations #css #animation ## ๐Ÿงญ Table of Contents - [๐Ÿ“ Summary](#-summary) - [๐Ÿ“– Main Content](#-main-content) - [๐Ÿ—’๏ธ Notes](#๏ธ-notes) - [๐Ÿ“š References](#-references) - [๐Ÿ—ฃ๏ธ Paraphrase](#๏ธ-paraphrase) - [๐Ÿ“ฐ Newsletter](#-newsletter) - [โœ… Action Items](#-action-items) - [๐Ÿงช Hypotheses](#-hypotheses) - [๐Ÿ“Š Methodology](#-methodology) - [โ“ Questions](#-questions) - [๐Ÿ”ฎ Future Research](#-future-research) - [๐Ÿ’ก Implications](#-implications) - [๐Ÿง  Learning Styles Assessment](#-learning-styles-assessment) - [๐Ÿ“Š Accessibility Assessment](#-accessibility-assessment) - [๐ŸŒ DEIB Assessment](#-deib-assessment) - [โœ… Logical Validity](#-logical-validity) - [๐Ÿ›ก๏ธ DARVO Analysis](#-darvo-analysis) - [๐ŸŽฏ Conclusion](#-conclusion) ### ๐Ÿ”— References - [Source Video](https://www.youtube.com/watch?v=s1ZrF7PdV1Y) - [MDN CSS @property](https://developer.mozilla.org/en-US/docs/Web/CSS/@property) ## ๐Ÿ“ Summary - Kevin Powell takes on a CSS speed challenge to recreate gradient buttons in under 30 minutes - Demonstrates advanced CSS techniques including CSS variables, color-mix, gradient borders, and hover states - Shows real-world problem-solving including pivot from direct border approach to wrapper element strategy - Creates extensible button system with warning, error, success, and ghost variants - Completes challenge in approximately 29 minutes with functional, interactive buttons ## ๐Ÿ“– Main Content This video showcases a practical CSS coding session where Kevin Powell attempts to rapidly recreate a set of stylized gradient buttons. The challenge involves multiple advanced CSS concepts including linear gradients for backgrounds, inset box shadows for depth, gradient borders (notoriously difficult in CSS), and interactive hover/active states. The key technical challenge centers on gradient borders, which cannot be achieved with standard CSS border properties. Powell initially attempts a direct approach but pivots to using wrapper elements - a span inside each button - to achieve the layered gradient effect. This requires restructuring the HTML mid-stream and redistributing CSS properties between the button and span elements. The solution leverages modern CSS features like color-mix() for color manipulation and CSS custom properties for creating an extensible system where button variants can be created by simply changing a single color variable. The final implementation includes smooth hover effects and click animations for enhanced user experience. ## ๐Ÿ—’๏ธ Notes #### โฑ๏ธ [00:00](https://youtu.be/s1ZrF7PdV1Y?t=0) โ€” [H1] Challenge setup and initial structure - Key idea: Speed challenge to recreate gradient buttons with real-world constraints - Evidence: "I'm going to be trying to not only get this done as fast as possible, but make these things actually buttons that I would want to use in my real code" #### โฑ๏ธ [01:30](https://youtu.be/s1ZrF7PdV1Y?t=90) โ€” [H2] Basic container and button layout - Key idea: Flexbox container with column direction and gap for button spacing - Evidence: "display flex, flex direction column, gap of something just like 40 pixels" #### โฑ๏ธ [03:15](https://youtu.be/s1ZrF7PdV1Y?t=195) โ€” [H2] CSS custom properties for extensible design - Key idea: Using CSS variables for color system to enable easy variant creation - Evidence: "I'm using CSS variables for this obviously because that way we can just override the variables" #### โฑ๏ธ [04:45](https://youtu.be/s1ZrF7PdV1Y?t=285) โ€” [H2] Linear gradient background implementation - Key idea: Creating depth with gradient using relative color syntax - Evidence: "linear gradient to bottom, from var color to RGB from var color with 0.2 opacity" #### โฑ๏ธ [07:30](https://youtu.be/s1ZrF7PdV1Y?t=450) โ€” [H2] Border radius and spacing adjustments - Key idea: Fine-tuning visual proportions with border-radius and padding - Evidence: "border radius 25 pixels... padding of one rem and then something like 10 pixels" #### โฑ๏ธ [09:45](https://youtu.be/s1ZrF7PdV1Y?t=585) โ€” [H2] Inset box shadow for glass effect - Key idea: Adding inner highlight with inset box shadow for depth - Evidence: "box shadow inset RGB 255 255 255 forward slash 0.3... two pixel blur" #### โฑ๏ธ [12:00](https://youtu.be/s1ZrF7PdV1Y?t=720) โ€” [H2] Button variant classes and color system - Key idea: Semantic class names for different button states and purposes - Evidence: "warning for yellow, error for red, success for green, ghost for gray" #### โฑ๏ธ [15:30](https://youtu.be/s1ZrF7PdV1Y?t=930) โ€” [H1] Gradient border challenge recognition - Key idea: Realizing gradient borders require wrapper element strategy - Evidence: "gradient border is not very chill right now... I hate gradient borders" #### โฑ๏ธ [17:45](https://youtu.be/s1ZrF7PdV1Y?t=1065) โ€” [H1] HTML restructure with wrapper spans - Key idea: Adding span elements inside buttons to enable gradient border technique - Evidence: "I am going to do a wrapper in my HTML... I have a span" #### โฑ๏ธ [20:15](https://youtu.be/s1ZrF7PdV1Y?t=1215) โ€” [H2] Color-mix vs relative color syntax - Key idea: Discovering color-mix provides better control than relative color syntax - Evidence: "I think in this particular case, let's do color-mix... mixing the color and white" #### โฑ๏ธ [23:30](https://youtu.be/s1ZrF7PdV1Y?t=1410) โ€” [H2] Interactive hover states implementation - Key idea: Creating hover effects by modifying color-mix percentages - Evidence: "if we hover, top purr is now going to be equal to 90%" #### โฑ๏ธ [25:45](https://youtu.be/s1ZrF7PdV1Y?t=1545) โ€” [H3] CSS @property for animation attempts - Key idea: Exploring modern CSS animation techniques for gradient transitions - Evidence: "@property and this will be top... syntax is not going to be an angle, it's going to be a percent" #### โฑ๏ธ [27:30](https://youtu.be/s1ZrF7PdV1Y?t=1650) โ€” [H2] Click states and final touches - Key idea: Adding active states with transform and refined hover effects - Evidence: "when we click it active, we can do a translate zero one pix... nice little push" #### โฑ๏ธ [29:00](https://youtu.be/s1ZrF7PdV1Y?t=1740) โ€” [H1] Challenge completion and extensibility demo - Key idea: Demonstrating the power of the CSS variable system for variants - Evidence: "If I wanted to make these things purple, bingo, bango, we got a purple button that just works" ## ๐Ÿ“š References - [Original Video](https://www.youtube.com/watch?v=s1ZrF7PdV1Y) - [CSS color-mix() MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/color_value/color-mix) - [CSS @property MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/@property) - [CSS Custom Properties MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/--*) ## ๐Ÿ—ฃ๏ธ Paraphrase - Powell demonstrates rapid prototyping of complex CSS components under time pressure, showing real problem-solving process - The gradient border problem illustrates why certain CSS techniques require structural HTML changes, not just styling - Modern CSS features like color-mix() and custom properties enable more maintainable and flexible component systems ## ๐Ÿ“ฐ Newsletter **Quick CSS Challenge: Mastering Gradient Buttons in 30 Minutes** Ever wondered how to tackle those tricky gradient borders that make even experienced developers want to pull their hair out? Kevin Powell just completed a lightning-fast CSS challenge that showcases some brilliant techniques for creating professional-grade button components. The key breakthrough? Sometimes the best CSS solution requires rethinking your HTML structure. Powell's pivot from direct border styling to wrapper elements demonstrates how real-world problem-solving often involves strategic compromises. **What you'll learn:** - Advanced gradient techniques with modern color-mix() - CSS cust > [!note]+ Document Notes > tags: [css, web-design, ui-components] > author: Kevin Powell > source: YouTube > reference: https://www.youtube.com/watch?v=s1ZrF7PdV1Y > date created: 2024-12-28 14:32 > > # ๐Ÿท๏ธ Title: Gradient borders will be the death of me > <!-- deep-read:sections start --> ## ๐Ÿงฐ Action Inbox - [H1] Create reusable gradient button component system โ€” CSS variables for extensibility #css #components - [H2] Implement proper gradient border technique โ€” wrapper element strategy #css #gradients - [H3] Add smooth hover transitions with @property โ€” color-mix animation limitations #css #animation ## ๐Ÿงญ Table of Contents - [๐Ÿ“ Summary](#-summary) - [๐Ÿ“– Main Content](#-main-content) - [๐Ÿ—’๏ธ Notes](#๏ธ-notes) - [๐Ÿ“š References](#-references) - [๐Ÿ—ฃ๏ธ Paraphrase](#๏ธ-paraphrase) - [๐Ÿ“ฐ Newsletter](#-newsletter) - [โœ… Action Items](#-action-items) - [๐Ÿงช Hypotheses](#-hypotheses) - [๐Ÿ“Š Methodology](#-methodology) - [โ“ Questions](#-questions) - [๐Ÿ”ฎ Future Research](#-future-research) - [๐Ÿ’ก Implications](#-implications) - [๐Ÿง  Learning Styles Assessment](#-learning-styles-assessment) - [๐Ÿ“Š Accessibility Assessment](#-accessibility-assessment) - [๐ŸŒ DEIB Assessment](#-deib-assessment) - [โœ… Logical Validity](#-logical-validity) - [๐Ÿ›ก๏ธ DARVO Analysis](#-darvo-analysis) - [๐ŸŽฏ Conclusion](#-conclusion) ### ๐Ÿ”— References - [Source Video](https://www.youtube.com/watch?v=s1ZrF7PdV1Y) - [MDN CSS @property](https://developer.mozilla.org/en-US/docs/Web/CSS/@property) ## ๐Ÿ“ Summary - Kevin Powell takes on a CSS speed challenge to recreate gradient buttons in under 30 minutes - Demonstrates advanced CSS techniques including CSS variables, color-mix, gradient borders, and hover states - Shows real-world problem-solving including pivot from direct border approach to wrapper element strategy - Creates extensible button system with warning, error, success, and ghost variants - Completes challenge in approximately 29 minutes with functional, interactive buttons ## ๐Ÿ“– Main Content This video showcases a practical CSS coding session where Kevin Powell attempts to rapidly recreate a set of stylized gradient buttons. The challenge involves multiple advanced CSS concepts including linear gradients for backgrounds, inset box shadows for depth, gradient borders (notoriously difficult in CSS), and interactive hover/active states. The key technical challenge centers on gradient borders, which cannot be achieved with standard CSS border properties. Powell initially attempts a direct approach but pivots to using wrapper elements - a span inside each button - to achieve the layered gradient effect. This requires restructuring the HTML mid-stream and redistributing CSS properties between the button and span elements. The solution leverages modern CSS features like color-mix() for color manipulation and CSS custom properties for creating an extensible system where button variants can be created by simply changing a single color variable. The final implementation includes smooth hover effects and click animations for enhanced user experience. ## ๐Ÿ—’๏ธ Notes #### โฑ๏ธ [00:00](https://youtu.be/s1ZrF7PdV1Y?t=0) โ€” [H1] Challenge setup and initial structure - Key idea: Speed challenge to recreate gradient buttons with real-world constraints - Evidence: "I'm going to be trying to not only get this done as fast as possible, but make these things actually buttons that I would want to use in my real code" #### โฑ๏ธ [01:30](https://youtu.be/s1ZrF7PdV1Y?t=90) โ€” [H2] Basic container and button layout - Key idea: Flexbox container with column direction and gap for button spacing - Evidence: "display flex, flex direction column, gap of something just like 40 pixels" #### โฑ๏ธ [03:15](https://youtu.be/s1ZrF7PdV1Y?t=195) โ€” [H2] CSS custom properties for extensible design - Key idea: Using CSS variables for color system to enable easy variant creation - Evidence: "I'm using CSS variables for this obviously because that way we can just override the variables" #### โฑ๏ธ [04:45](https://youtu.be/s1ZrF7PdV1Y?t=285) โ€” [H2] Linear gradient background implementation - Key idea: Creating depth with gradient using relative color syntax - Evidence: "linear gradient to bottom, from var color to RGB from var color with 0.2 opacity" #### โฑ๏ธ [07:30](https://youtu.be/s1ZrF7PdV1Y?t=450) โ€” [H2] Border radius and spacing adjustments - Key idea: Fine-tuning visual proportions with border-radius and padding - Evidence: "border radius 25 pixels... padding of one rem and then something like 10 pixels" #### โฑ๏ธ [09:45](https://youtu.be/s1ZrF7PdV1Y?t=585) โ€” [H2] Inset box shadow for glass effect - Key idea: Adding inner highlight with inset box shadow for depth - Evidence: "box shadow inset RGB 255 255 255 forward slash 0.3... two pixel blur" #### โฑ๏ธ [12:00](https://youtu.be/s1ZrF7PdV1Y?t=720) โ€” [H2] Button variant classes and color system - Key idea: Semantic class names for different button states and purposes - Evidence: "warning for yellow, error for red, success for green, ghost for gray" #### โฑ๏ธ [15:30](https://youtu.be/s1ZrF7PdV1Y?t=930) โ€” [H1] Gradient border challenge recognition - Key idea: Realizing gradient borders require wrapper element strategy - Evidence: "gradient border is not very chill right now... I hate gradient borders" #### โฑ๏ธ [17:45](https://youtu.be/s1ZrF7PdV1Y?t=1065) โ€” [H1] HTML restructure with wrapper spans - Key idea: Adding span elements inside buttons to enable gradient border technique - Evidence: "I am going to do a wrapper in my HTML... I have a span" #### โฑ๏ธ [20:15](https://youtu.be/s1ZrF7PdV1Y?t=1215) โ€” [H2] Color-mix vs relative color syntax - Key idea: Discovering color-mix provides better control than relative color syntax - Evidence: "I think in this particular case, let's do color-mix... mixing the color and white" #### โฑ๏ธ [23:30](https://youtu.be/s1ZrF7PdV1Y?t=1410) โ€” [H2] Interactive hover states implementation - Key idea: Creating hover effects by modifying color-mix percentages - Evidence: "if we hover, top purr is now going to be equal to 90%" #### โฑ๏ธ [25:45](https://youtu.be/s1ZrF7PdV1Y?t=1545) โ€” [H3] CSS @property for animation attempts - Key idea: Exploring modern CSS animation techniques for gradient transitions - Evidence: "@property and this will be top... syntax is not going to be an angle, it's going to be a percent" #### โฑ๏ธ [27:30](https://youtu.be/s1ZrF7PdV1Y?t=1650) โ€” [H2] Click states and final touches - Key idea: Adding active states with transform and refined hover effects - Evidence: "when we click it active, we can do a translate zero one pix... nice little push" #### โฑ๏ธ [29:00](https://youtu.be/s1ZrF7PdV1Y?t=1740) โ€” [H1] Challenge completion and extensibility demo - Key idea: Demonstrating the power of the CSS variable system for variants - Evidence: "If I wanted to make these things purple, bingo, bango, we got a purple button that just works" ## ๐Ÿ“š References - [Original Video](https://www.youtube.com/watch?v=s1ZrF7PdV1Y) - [CSS color-mix() MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/color_value/color-mix) - [CSS @property MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/@property) - [CSS Custom Properties MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/--*) ## ๐Ÿ—ฃ๏ธ Paraphrase - Powell demonstrates rapid prototyping of complex CSS components under time pressure, showing real problem-solving process - The gradient border problem illustrates why certain CSS techniques require structural HTML changes, not just styling - Modern CSS features like color-mix() and custom properties enable more maintainable and flexible component systems ## ๐Ÿ“ฐ Newsletter **Quick CSS Challenge: Mastering Gradient Buttons in 30 Minutes** Ever wondered how to tackle those tricky gradient borders that make even experienced developers want to pull their hair out? Kevin Powell just completed a lightning-fast CSS challenge that showcases some brilliant techniques for creating professional-grade button components. The key breakthrough? Sometimes the best CSS solution requires rethinking your HTML structure. Powell's pivot from direct border styling to wrapper elements demonstrates how real-world problem-solving often involves strategic compromises. **What you'll learn:** - Advanced gradient techniques with modern color-mix() - CSS custom property systems for component scalability - Why gradient borders need wrapper elements (and how to implement them) - Interactive state management with hover and active effects **Try it yourself:** The original challenge design is linked in Powell's video description. Time yourself and see how your approach compares! Resources: [Learn WordPress](https://learn.wordpress.org/), [Developer Docs](https://developer.wordpress.org/), [WP-CLI](https://wp-cli.org/) ## โœ… Action Items #### DevRel - Developer advocacy: Create gradient border tutorial series showing multiple techniques - Education: Workshop on modern CSS color functions and their performance implications - Developer experience: Document gradient border patterns in component library - Developer marketing: Social media series on CSS challenges and time-boxing development - Community management: Facilitate CSS speedrun challenges in developer community #### WordPress - Core: Evaluate gradient border components for block editor interface elements - Design: Create design system documentation for gradient button patterns - Documentation: Add advanced CSS tutorials to WordPress developer resources - Training: Include modern CSS techniques in WordPress theme development courses ## ๐Ÿงช Hypotheses - Color-mix() provides better maintainability than relative color syntax for component systems - Wrapper element strategy for gradient borders is more reliable than pseudo-element approaches - CSS custom properties enable more scalable component architectures than preprocessor variables - Time-constrained development reveals the most practical CSS techniques ### ๐Ÿ“Š Methodology - A/B test color-mix vs relative color syntax in production components - Performance benchmarking of different gradient border implementation strategies - User testing of button interaction feedback and animation preferences ### โ“ Questions - How do gradient border techniques perform across different browsers and devices? - What's the accessibility impact of complex gradient and shadow combinations? - Can CSS container queries improve responsive behavior of gradient components? ### ๐Ÿ”ฎ Future Research - CSS Houdini custom properties for animatable gradient transitions - Web Components integration with advanced CSS gradient techniques - Performance optimization strategies for complex CSS visual effects ### ๐Ÿ’ก Implications - Practice: Gradient borders require HTML structure planning, not just CSS solutions - Policy: Component libraries need documentation for complex visual effect implementation - Education: Modern CSS features change optimal development approaches and require updated training - Performance: Complex gradients and shadows can impact rendering performance on lower-end devices ### ๐Ÿง  Learning Styles Assessment Reading level estimate: Flesch-Kincaid Grade Level 8 #### ๐Ÿ‘€ Visual learners - Present: Live coding demonstration, before/after comparisons, visual debugging - Improve: Gradient technique comparison charts, CSS property visualization diagrams #### ๐Ÿ”Š Aural learners - Present: Real-time narration of problem-solving process - Improve: Audio summary of key techniques and decision points #### ๐Ÿ—ฃ๏ธ Verbal learners - Present: Clear explanations of CSS terminology, reasoning for each approach - Improve: Glossary of gradient-related CSS terms and concepts #### ๐Ÿงฉ Kinesthetic learners - Present: Hands-on coding challenge format, interactive debugging - Improve: Step-by-step coding exercises, downloadable starter files #### ๐Ÿง  Logical learners - Present: Problem identification, solution comparison, systematic approach - Improve: Decision tree for gradient border technique selection #### ๐Ÿง‘โ€๐Ÿคโ€๐Ÿง‘ Social learners - Present: Community challenge format, sharing results encouragement - Improve: Code review sessions, collaborative technique development #### ๐Ÿง˜โ€โ™€๏ธ Solitary learners - Present: Self-paced challenge format, independent problem solving - Improve: Reflection prompts on technique selection rationale #### ๐ŸŒฟ Naturalistic learners - Present: Organic problem-solving process, adaptive technique selection - Improve: Pattern recognition exercises for CSS architecture decisions ### ๐Ÿ“Š Accessibility Assessment #### Screen reader semantics - Present: Semantic button elements maintained throughout refactoring - Improve: ARIA labels for button variants, role descriptions for complex interactions #### Keyboard navigation - Present: Native button focus behavior preserved - Improve: Custom focus indicators that work with gradient designs #### Contrast and readability - Present: Attention to color contrast in gradient implementations - Improve: Systematic contrast testing across all button variants #### Text resizing and reflow - Present: Responsive design considerations mentioned - Improve: Testing at 200% zoom, rem-based sizing validation #### Media and captions - Present: Live coding with narration - Improve: Time-stamped technique summaries, downloadable transcripts #### Forms and interactions - Present: Proper button semantics, hover and focus states - Improve: Reduced motion preferences for gradient animations ### ๐ŸŒ DEIB Assessment #### Cultural breadth - Present: Accessible coding challenge format - Improve: International color perception considerations for gradient choices #### Inclusive language - Present: Technical explanations avoid jargon where possible - Improve: Define CSS terminology for newer developers #### Neurodiversity support - Present: Step-by-step problem solving, clear structure - Improve: Technique summary cards, visual progress indicators #### Representation - Present: Focus on technical skills over personal characteristics - Improve: Diverse example use cases for button components #### Psychological safety - Present: Honest mistake-making and problem-solving process - Improve: Normalize debugging and iteration in learning materials ### โœ… Logical Validity #### Strong reasoning - Deductive strength: CSS gradient limitations logically lead to wrapper element necessity - Inductive strength: Multiple technique attempts build toward optimal solution - Causal reasoning: Clear cause-effect between CSS properties and visual outcomes - Analogical strength: Comparison between different gradient approaches shows trade-offs #### Fallacies - Appeal to tradition: Brief dismissal of alternative gradient techniques without full exploration - False dilemma: Limited consideration of pseudo-element gradient approaches #### Tone of voice - Overall tone: Authentic, problem-solving focused, encouraging experimentation with honest acknowledgment of complexity ### ๐Ÿ›ก๏ธ DARVO Analysis - Deny: No denial patterns present - Attack: No attack patterns present - Reverse victim/offender: No reversal patterns present - Emotional cues and rhetoric: Positive, educational tone focused on skill development ## ๐ŸŽฏ Conclusion - Kevin Powell successfully demonstrates advanced CSS gradient techniques under time pressure, completing the challenge in 29 minutes - The key insight is that gradient borders often require structural HTML changes, not just CSS solutions - wrapper elements enable the layered effects needed - Modern CSS features like color-mix() and custom properties create more maintainable component systems than older approaches - The real-world problem-solving process, including mistakes and pivots, provides valuable learning for developers tackling similar challenges ## ๐Ÿงฑ Refactor Appendix ### ๐Ÿ“š Literature Split Pad Purpose: Stage CEE units that become Literature notes. Split level: H3 ### [H1] CSS gradient borders require wrapper elements for reliable implementation > [!quote] [Gradient borders will be the death of me](https://www.youtube.com/watch?v=s1ZrF7PdV1Y) by [[Kevin Powell]] via [[YouTube]]. Published 2024. Accessed 2024-12-28. > "I am going to do a wrapper in my HTML... I have a span." Demonstrates the structural HTML requirements for complex CSS visual effects --- ## Full Transcript [00:00] I'm challenging myself to a lightning<br>[00:02] round CSS battle where I'm going to see<br>[00:04] how fast I can get these buttons done.<br>[00:08] Now, these buttons come from Thiago<br>[00:10] Alexandrino. The starting code that I<br>[00:12] have is just five buttons. I'm going to<br>[00:14] be trying to not only get this done as<br>[00:17] fast as possible, but make these things<br>[00:19] actually buttons that I would want to<br>[00:21] use in my real code. And I'm going to be<br>[00:23] doing all of this with just CSS,<br>[00:25] obviously. Now, I've got my stopwatch<br>[00:28] here. I'm going to hit go on this thing<br>[00:30] and see how fast I can get this done.<br>[00:32] I'll link this up in the description if<br>[00:35] you want to see how fast you can get<br>[00:37] these buttons done. We're going to be<br>[00:38] working on the Honor system here, but<br>[00:40] use that image. Uh, get these buttons<br>[00:42] done. Do a custom hover seat on these<br>[00:44] bad boys and let me know how fast you<br>[00:46] were able to do it. Even better if you<br>[00:48] record yourself, share that video and<br>[00:51] we'll check it out. Let's get going on<br>[00:53] this thing. Uh, I have all the stuff<br>[00:55] here. I do have a div wrapping all of<br>[00:57] these buttons and so I can just target<br>[00:59] that div just itself. We're going to do<br>[01:00] a display flex. We're going to do flex<br>[01:02] direction column, not a flood color. Uh<br>[01:05] what in the world? We're going to have a<br>[01:07] gap of something just like 40 pixels<br>[01:09] here. And we are going to right now have<br>[01:12] a max width of this entire thing as like<br>[01:15] a 600 pixels. Now that's not going to<br>[01:17] determine the max width of these buttons<br>[01:19] by any means. So let's go ahead and get<br>[01:21] our initial button kind of style down.<br>[01:24] I'm actually going to start with this<br>[01:27] kind of gray one right here, or maybe<br>[01:29] even just the blue one. We're going to<br>[01:30] have a default button styling. Now,<br>[01:32] let's zoom in on these to get a good eye<br>[01:35] of what's going on. Of course, there's<br>[01:38] plenty of pixels in this, so we're<br>[01:39] getting a lot of pixels. I'm going to<br>[01:41] actually pick the color. And the blue<br>[01:43] one will be the default. So, we'll just<br>[01:44] have this button color. We'll say this<br>[01:47] is going to be the main color. And it is<br>[01:49] going to just be at this point this<br>[01:51] blue. Now we'll say color is equal to<br>[01:54] vary color. I'm using CSS variables for<br>[01:58] this obviously because that way we can<br>[02:00] just override the variables. But not<br>[02:02] only that, they'll be able to do some<br>[02:03] cool stuff. Like for instance, we have<br>[02:06] this border. We have an inset border. So<br>[02:09] let's take a look at what we have. We<br>[02:11] have a light gradient that's going from<br>[02:12] something to something here. We do have<br>[02:14] a white on the inset here. And we do<br>[02:18] have a border that also has what appears<br>[02:21] to be a gradient. And the border<br>[02:23] gradient is a tough thing to do. There's<br>[02:26] a number of different strategies you can<br>[02:27] do with a border gradient. Let's go<br>[02:29] ahead and first and foremost get this<br>[02:30] background going. So we're going to do a<br>[02:32] background. We're going to do a linear<br>[02:34] gradient. We're going to go from or<br>[02:37] we'll say to bottom and comma. We're<br>[02:41] going to start from right now vary<br>[02:44] color. That will change. And then we're<br>[02:46] going to go to varyen<br>[02:49] color. And we're going to use relative<br>[02:51] color syntax on this thing. I'm going to<br>[02:53] eyeball this for the most part. The easy<br>[02:54] way to do this would be do a color<br>[02:56] picker and just pick this hex value. But<br>[02:58] that's not how I would do it in real<br>[02:59] life. So I don't want to do it that way.<br>[03:01] We're going to say RGB from and we're<br>[03:03] going to say from the color RGB, we're<br>[03:05] going to get RGB and then forward slash<br>[03:08] and we'll say something like 0.2. So<br>[03:11] from that to that. And actually, I'm<br>[03:13] just going to straight up duplicate this<br>[03:14] line and say we're going to go from 0 to<br>[03:16] 0.5 here. Okay, that honestly, we're<br>[03:20] saying two bottom from top to bottom.<br>[03:22] That actually doesn't look terrible<br>[03:24] right off the jump, even just zooming in<br>[03:26] here. So, I'm going to keep that for<br>[03:28] right now. We're also going to say this<br>[03:30] has a border of var. Actually, instead<br>[03:32] of var, I'm going to grab this one right<br>[03:35] here. We're going to worry about the<br>[03:37] gradient border after this. We're going<br>[03:38] to say solid 1 pix. There we go. And the<br>[03:41] border radius on these things is pretty<br>[03:44] severe. If you do border radius 50% on<br>[03:50] this, it makes it look like this. So,<br>[03:52] you have to use a pixel value for<br>[03:53] something. And it's hard to give this a<br>[03:56] pixel value just straight up. Even<br>[03:58] though I just did it uh 25 pixels and it<br>[04:00] just looks great here, it's hard to do<br>[04:02] this and, you know, not know what the<br>[04:04] size of these buttons is going to be.<br>[04:06] But, uh, we'll just keep it at this for<br>[04:07] right now. If I zoom in on mine, there's<br>[04:10] some funniness going on with the border<br>[04:12] and the background gradient. If we do<br>[04:14] overflow hidden, I actually don't know<br>[04:17] if that will fix. Doesn't fix. Overflow<br>[04:19] hidden does not fix. That's interesting<br>[04:21] is because we currently have a border<br>[04:24] that has transparency in it. It's<br>[04:27] overlapping with the linear gradient. I<br>[04:29] actually don't know about that. That's<br>[04:31] interesting. Also, this is what they<br>[04:33] look like right now. So, let's actually<br>[04:36] give these a font size of something<br>[04:38] considerably larger for right now. 24<br>[04:40] pixels. That at least looks a little bit<br>[04:42] better here. That way, we're not zoomed<br>[04:44] in super high. And we have some space<br>[04:46] here. I'm not going to worry too much<br>[04:48] about the font. We have some space. The<br>[04:50] spacing on these is always interesting<br>[04:52] because what you end up getting, you<br>[04:53] want buttons that are all the same<br>[04:55] width. Uh I'll worry about the width<br>[04:56] part later, but let's do just a padding<br>[04:58] of something like one rim and then<br>[05:00] something like 10 pixels. And this is<br>[05:03] going to give them considerably more<br>[05:04] space. Let's do something like 0.75 RAM.<br>[05:07] Me just uh typing in values till it<br>[05:09] looks nice. Now, honestly, you could<br>[05:10] just measure all this and do it all in<br>[05:12] pixels. And that's probably fine, too.<br>[05:14] The border definitely needs to be more<br>[05:16] than one pixel, but probably not that<br>[05:18] much more. Like two pixels, pretty good<br>[05:21] here um in terms of what this actually<br>[05:23] looks like. And now I'm going to<br>[05:25] actually do the inset box shadow because<br>[05:28] these have an inset box shadow. You can<br>[05:29] see already that our our 25 border<br>[05:31] radius that we had doesn't work. Um,<br>[05:33] let's bump it up to 35. So, we'll say<br>[05:35] box shadow inset and we're going to say<br>[05:39] RGB 255 255 255 uh forward/0.3.<br>[05:44] Save this. Actually, this is going to do<br>[05:46] nothing. I typically put the word inset<br>[05:48] at the end too, just for consistency<br>[05:51] sake. And the distance on this thing is<br>[05:53] going to be 0 0. And let's do like a two<br>[05:56] pixel blur and a two pixel distance on<br>[05:59] it. In fact, let's make this right now.<br>[06:02] Sometimes I do this. I want to see what<br>[06:04] it looks like. We'll have it be very<br>[06:06] non-transparent. So the two pixel blur<br>[06:08] might actually be a little bit much. The<br>[06:10] one pixel blur looks pretty good. The<br>[06:12] two pixel like this looks pretty decent.<br>[06:14] And then if you bounce out, okay, that<br>[06:16] might be too much. Again, bump it back<br>[06:18] down. We're getting pretty close there.<br>[06:20] But I do have to feel like if we look at<br>[06:22] these, it is the two pixel blur I think<br>[06:24] was better representative of their<br>[06:26] style. So already getting pretty close.<br>[06:29] Okay, so the way we have these is that<br>[06:31] there's several buttons. We can add some<br>[06:33] classes to these. So class and the first<br>[06:36] one will just be I like to call yellow<br>[06:38] stuff warning and then we'll say error<br>[06:41] for the red. We'll say success<br>[06:46] for the green and then ghost for the<br>[06:49] gray. Why did I just pick these names?<br>[06:51] Well, I don't know. I I could have just<br>[06:53] done edit remove except declined. I<br>[06:55] could have just done that, but instead I<br>[06:57] did warning error, success, and ghost<br>[06:58] because that's what I like to work in.<br>[07:00] So, uh warning and then<br>[07:04] errors success ghost. Now the reason the<br>[07:07] whole reason we did this with CSS<br>[07:10] variables in this way is because you can<br>[07:12] just reassign this color variable here.<br>[07:16] We can use the color picker. We can pick<br>[07:18] this color. We can paste it in here and<br>[07:22] we'll be able to see that this now all<br>[07:24] of a sudden gets us way closer really<br>[07:26] quickly. In terms of time here, what am<br>[07:28] I at? I'm at 9 minutes. Okay. Um I was<br>[07:30] hoping to have this done faster than 9<br>[07:32] minutes. Uh but you know me, I'm always<br>[07:35] way too optimistic. I see this and I<br>[07:37] could say, I could do this in a<br>[07:38] 10-minute CSS battle, no problem. And<br>[07:40] then the time comes by and next thing<br>[07:42] you know, you're this far. But, ooh,<br>[07:45] it's looking really good already. Now,<br>[07:47] with these buttons, I do like to have a<br>[07:50] padding on the side. But like, if we<br>[07:52] were to say the width of these is<br>[07:54] something like 200 pixels, right? It<br>[07:56] gets them all a little bit more similar.<br>[07:58] Now, the big problem ends up being when<br>[08:00] you do that, you end up having long<br>[08:03] buttons. You got to worry about that.<br>[08:05] Yeah, it it's something that you do have<br>[08:06] to be cautious about because the buttons<br>[08:08] in the example are all the same width no<br>[08:10] matter what. You could have that be a<br>[08:12] max width. Um that would be no max width<br>[08:16] wouldn't work either cuz then they<br>[08:17] minimum width would would say that<br>[08:19] wouldn't work either cuz like if we did<br>[08:22] min width, they're now going to go way<br>[08:24] far. I think just straight up width on<br>[08:26] these is fine for right now. And I do<br>[08:29] honestly think it's probably way more<br>[08:31] accurate when I define that width than I<br>[08:33] was expecting. So, you know what? I I<br>[08:35] feel like I'm kind of doing a decent job<br>[08:37] here getting these buttons going pretty<br>[08:39] quickly. The big thing that we don't<br>[08:40] have right now is the gradient border. I<br>[08:43] hate gradient borders, which mine still<br>[08:46] looks funky. The gradient border is not<br>[08:48] very chill right now. Uh I do have the<br>[08:51] inset shadow is looking pretty chill.<br>[08:54] And everything else kind of looks right.<br>[08:57] Honestly, I think the intensity of the<br>[08:59] gradient for the button itself could<br>[09:02] maybe be dialed down, but they look<br>[09:04] pretty glassy and and kind of cool.<br>[09:06] Okay, let's keep moving. They do have a<br>[09:08] box shadow on. I don't know if you can<br>[09:10] see this. We'll say zero for X, but for<br>[09:12] the Y, it was like something pretty<br>[09:15] decent, like 20 pixels. The blur is<br>[09:17] massive. Uh, we'll say 20 pixels for<br>[09:19] that and zero for the spread. We'll say<br>[09:22] RGB. We'll give this black because 0000<br>[09:25] you can always add more opacity to black<br>[09:27] which is what we'll be doing. Okay,<br>[09:29] because that's a pretty heavy box shadow<br>[09:32] relative to what they actually have in<br>[09:34] their one. But if we did something like<br>[09:36] 05, this looks way more close to what<br>[09:38] they have. Okay, let's add an align<br>[09:41] items center on this just for fun. Yeah,<br>[09:44] this is looking pretty good. This<br>[09:45] gradient border, man, what is the<br>[09:47] strategy that people use for gradient<br>[09:49] borders? There's a number of ways you<br>[09:50] could do gradient borders. I've done<br>[09:51] gradient borders so many times in CSS<br>[09:54] and it feels like I always dislike the<br>[09:57] strategy because what you can do is you<br>[09:59] can have a background and then you have<br>[10:01] like a span on it. So you have a wrapper<br>[10:03] element is a very common way to do this.<br>[10:05] The way that I've always done this is<br>[10:07] with a wrapper. So I guess I am going to<br>[10:10] do a wrapper in my HTML. I'm not talking<br>[10:12] about uh Kendrick Lamar here. Sorry for<br>[10:15] that joke folks. I am a father of two.<br>[10:17] Okay. I have a span. I hate this because<br>[10:20] I just did all this work and now I'm<br>[10:22] going to have to say, "Oh, dear God,<br>[10:24] Scott." Okay, I'm trying to go fast. I'm<br>[10:26] trying to go very fast. Very fast. Very<br>[10:28] fast. Very fast.<br>[10:30] Okay, so uh obviously that just totally<br>[10:33] screws it all up quite a bit. The<br>[10:36] background of the button is going to be<br>[10:37] a gradient. So, we will want to have a<br>[10:40] gradient for the background of the<br>[10:42] button. What other things do we need to<br>[10:43] have on the button itself? We'll want to<br>[10:45] have the font size. We'll want to have<br>[10:48] even like the color is fine to move on<br>[10:50] to the button itself. There we go. The<br>[10:53] border<br>[10:55] well the border will in fact live on the<br>[10:57] button although it's not going to be a<br>[10:58] border. The border radius will live on<br>[11:00] the button. The box shadow will live on<br>[11:04] the span but the inset will live on the<br>[11:08] span and the noninset will live on the<br>[11:13] wrapper. Okay. So, I should have done<br>[11:15] this from the start. I instead of being<br>[11:17] like, "Oh, I'll solve this later." I<br>[11:18] should have solved this from the dang<br>[11:20] start. Okay. Okay. Width will be on the<br>[11:22] button and then padding will be on the<br>[11:25] span. Okay. Why does this look so<br>[11:28] terrible? We'll need to give the spans<br>[11:30] display block or they got to be inline<br>[11:33] block. It doesn't really matter. Maybe<br>[11:35] block. Why is there a border on Oh, cuz<br>[11:39] I don't have color defined on this.<br>[11:40] Okay, this is going to fix things right<br>[11:42] here. Okay, that gets a little bit<br>[11:44] better. Now, why is the first one so<br>[11:46] much worse? Is this for real? Let me<br>[11:48] refresh this. Why is the first one so<br>[11:50] much worse? Oh no. This one gets a<br>[11:52] color. This gets a color. That overrides<br>[11:54] all that stuff. Why exactly does this<br>[11:57] one not have a span in it? I didn't put<br>[11:59] a span in the first one.<br>[12:01] What was I thinking? Okay, save that.<br>[12:04] Good. We do need to have the same border<br>[12:06] radius, I suppose, on the span. This<br>[12:09] feels wrong now. This feels very wrong<br>[12:11] because we have the padding on there.<br>[12:14] The button itself is having some default<br>[12:16] padding. So, we'll just say padding<br>[12:18] zero. Or is it because of the width side<br>[12:21] of things? If we give this a width, does<br>[12:23] that fix it? No, it doesn't. Let's do<br>[12:25] computed. The button has a two pixel<br>[12:28] border on it. Okay, let's get rid of the<br>[12:30] border. Okay, border none. Let's zoom in<br>[12:33] on these things. Of course, I've like<br>[12:34] ruined this whole thing by adding this.<br>[12:37] What I don't understand is where this<br>[12:39] additional padding is coming from. We'll<br>[12:41] just say padding is zero. Do buttons<br>[12:45] have default padding on them? I guess<br>[12:46] they do. The only difference is is that<br>[12:48] when we do the gradient for this part,<br>[12:50] we want it to be reversed. We want it to<br>[12:52] start light and go dark. Start light, go<br>[12:56] dark. And how dark should it go? It<br>[12:57] should go much darker. Like that darker.<br>[13:01] Like that. Really feels pretty good. The<br>[13:04] top one needs to be quite a bit darker<br>[13:07] as well. The problem now is that we're<br>[13:10] doing a linear gradient and we now have<br>[13:13] double the color. So, this all feels<br>[13:16] like you're having one gradient and then<br>[13:19] another gradient and since we're doing<br>[13:21] opacity here. So, that really screws me<br>[13:23] up for a number of reasons. So, we're<br>[13:25] using relative color syntax here to do<br>[13:30] opacity, which does in fact work<br>[13:32] decently well on a white background for<br>[13:36] these things. But if we do color mix, we<br>[13:39] do color mix and mix it with white. I've<br>[13:43] been for weeks here, I've been thinking<br>[13:45] to myself, man, relative color really<br>[13:48] rules compared to color mix. I have been<br>[13:51] reaching for relative color kind of<br>[13:53] non-stop. I think I might be wrong. I<br>[13:56] think in this particular case, let's do<br>[13:58] color hyphen mix. Color mix is just<br>[14:01] something I haven't been doing. We're<br>[14:02] going to say in RGB, we're mixing the<br>[14:07] hyphen<br>[14:09] color and we're mixing white. So, that<br>[14:12] just mixes the two. What is the If we<br>[14:14] want to give this a percentage, how do<br>[14:16] we do that? And it looks like I seem to<br>[14:18] need to be using sRGB<br>[14:21] apparently.<br>[14:23] And I think I need to say something like<br>[14:25] we're going to do 90% white here. Does<br>[14:28] that work? It works. Okay. So, this is<br>[14:31] already kind of solving some of the<br>[14:33] problems that I was having. And instead<br>[14:34] of doing relative color, which was a<br>[14:37] great guess and a great thing that I<br>[14:38] like to do, I can do color mix and I can<br>[14:43] get us Oh, is this is it's more subtle.<br>[14:48] I'm I'm doing it way way too much. Oh my<br>[14:50] god. Zoom. What in the world? Zooming<br>[14:54] in. Oh my dear lord. Okay, so now we<br>[14:56] have a gradient on the top, which<br>[14:58] doesn't actually uh that could probably<br>[15:01] be color mix as well. We do have a nice<br>[15:04] little thing here. What I'm noticing is<br>[15:06] that the color is looking pretty decent<br>[15:09] on these things. And overall, I think I<br>[15:13] kind of crushed this. Now, this one does<br>[15:15] look a little bit darker. Looks a little<br>[15:17] bit darker. And a little bit darker<br>[15:19] here, too. So, let's bump this down to<br>[15:21] 85 and let's bump this down to 95. Maybe<br>[15:24] even bump this down to 80 even and get<br>[15:28] some more depth in here. This looks<br>[15:30] pretty stinking good. I'm going to close<br>[15:32] this. I'm going to bump this up side by<br>[15:33] side. Let's get some interactive states<br>[15:35] in here and just like really make these<br>[15:37] things feel nice. So, if we want to<br>[15:39] hover on these bad boys, what would we<br>[15:41] want to have happen? So, if we were to<br>[15:43] say like we're going to hover on these,<br>[15:46] what do you see happening? Like<br>[15:48] typically if a button it maybe in a<br>[15:50] hover state it can like get lighter. So<br>[15:53] you could always say that color mix<br>[15:55] percentage is changing. Like for<br>[15:58] instance if we had the top<br>[16:01] purr which is going to be like 80%. If<br>[16:04] we have that top purr right here at 80%<br>[16:08] var and you'll say top I don't know why<br>[16:12] I named it top purr. That's a terrible<br>[16:14] name but hey sometimes we just do name<br>[16:16] things like that. If we hover, we could<br>[16:18] say top purr is now going to be equal to<br>[16:20] 90%. And when we hover over these, they<br>[16:23] all should get a little bit lighter.<br>[16:24] Now, the big problem with this is that<br>[16:26] this is a a gradient and like<br>[16:28] transitioning gradient values is<br>[16:30] difficult. You could do that with at<br>[16:33] property. We'll see if this actually<br>[16:35] works. I I don't know if you can<br>[16:36] transition a color mix. So, we'll say<br>[16:39] add property and this will be top and<br>[16:42] I'm going to change this to hyphen top<br>[16:44] property. The syntax is not going to be<br>[16:46] an angle. It's going to be a percent, I<br>[16:48] believe. Let's see. Percent. Is that one<br>[16:50] of them? Is percent. One of the things<br>[16:53] you can have as an at property. Just<br>[16:55] give me the MDN docs, please. Percent.<br>[16:58] It is percent. Percent edge. Inherits is<br>[17:00] going to be true. Initial is going to be<br>[17:03] 80%. And let's get rid of this one.<br>[17:05] Okay. Now, no, doesn't animate. That's<br>[17:09] fine. We don't have a transition on this<br>[17:11] bad boy anyways. Also, I still use the<br>[17:14] word top per underscore in here instead<br>[17:17] of top hyphen per. It's always fun to<br>[17:19] change a variable name. And I'm just<br>[17:20] going to put a classic transition 0.3<br>[17:24] sec ease all. Just do a a a blanket<br>[17:28] attachment of all here just to see if I<br>[17:30] can get any transition on this thing.<br>[17:32] Yeah, I just don't I don't know if you<br>[17:34] can even with that percentage change<br>[17:37] linear gradient progress. So, I'm<br>[17:40] modifying the percentage value inside of<br>[17:43] color mix and it is not animating or<br>[17:48] transitioning. And honestly, that's<br>[17:50] okay. I'm going to do a cursor pointer<br>[17:52] on this thing. I know I know that's<br>[17:53] controversial. People like cursor<br>[17:54] pointer. The shadow can get darker. This<br>[17:56] is quite a bit darker. No.<br>[18:01] Okay. And then when we click it active,<br>[18:05] we can just do a translate zero one pix.<br>[18:10] Got a nice little push in there. And for<br>[18:13] this one, the top purr will be actually<br>[18:17] getting darker when you click it. Let's<br>[18:19] do a straight up 80% when you click it.<br>[18:21] Or is that where it is currently? It<br>[18:23] starts at 80. Let's do all the way down<br>[18:26] to 50%. When you click it,<br>[18:30] that's too much. That's way too much.<br>[18:32] Let's do 70. Perfect. It feels a little<br>[18:36] floaty because of that transition on<br>[18:38] here. And if that transition isn't<br>[18:39] actually doing anything beyond the<br>[18:41] shadow, we could say we want to<br>[18:43] transition the uh not all but box<br>[18:46] shadow. Okay. So the the top little<br>[18:49] feels snappier. Perfect. I think this is<br>[18:53] pretty good. I think I crushed this. And<br>[18:55] I think it looks pretty dang good. And<br>[18:56] when you click them, you hover over<br>[18:58] them, they get a nice little state. They<br>[19:00] get clearly highlighted here. Click it.<br>[19:02] Click it. Click it. Click it. Feels<br>[19:04] nice. I kind of like these buttons.<br>[19:07] Cool. The only thing I wish I was<br>[19:09] working on here would be the transition<br>[19:10] on that gradient. Either way, let me<br>[19:12] know what you thought of this speedrun.<br>[19:14] Let me top this off. Again, I probably<br>[19:16] could have finished this earlier, but<br>[19:18] here we are with 29 and I'm going to<br>[19:21] finish it just under 30 minutes. Knocked<br>[19:23] these bad boy buttons out. And again,<br>[19:25] they're nice and extendable because what<br>[19:27] we can do is just change their color. If<br>[19:29] I wanted to make these things purple,<br>[19:32] bingo, bango, we got a purple button<br>[19:34] that just works. Let me know how fast<br>[19:35] you got these buttons done. Post your<br>[19:37] links below. <!-- deep-read:sections end --> ## Highlights - have a default button styling. Now, let's zoom in on these to get a good eye of what's going on. Of course, there's plenty of pixels in this, so we're getting a lot of pixels. I'm going to actually pick the color. And the blue one will be the default. So, we'll just have this button color. We'll say this is going to be the main color. And it is going to just be at this point this blue. Now we'll say color is equal to vary color. I'm using CSS variables for this obviously because that way we can ([View Highlight](https://read.readwise.io/read/01khfp95jqgh68bzb69pbgpc2t)) - Tags: ๐Ÿ‘ป ai highlighted - background going. So we're going to do a background. We're going to do a linear gradient. We're going to go from or we'll say to bottom [music] and comma. We're going to start from right now vary color. That will change. And then we're going to go to varyen color. And we're going to use relative color syntax on this thing. I'm going to eyeball this for the most part. The easy way to do this would be do a color picker and just pick this hex value. But that's not how I would do it in real life. So I don't want to do it that way. ([View Highlight](https://read.readwise.io/read/01khfp95jyq0j1x770wgrn15dq)) - Tags: ๐Ÿ‘ป ai highlighted - has a border of var. Actually, instead of var, I'm going to grab this one right here. We're going to worry about the gradient border after this. We're going to say solid 1 pix. There we go. And the border radius on these things is pretty severe. If you do border radius 50% on this, it makes it look like this. So, you have to use a pixel value for something. And it's hard to give this a pixel value just straight up. Even though I just did it uh 25 pixels and it ([View Highlight](https://read.readwise.io/read/01khfp95kd9eckvx2k7e4bgqs2)) - Tags: ๐Ÿ‘ป ai highlighted - accurate when I define that width than I was expecting. So, you know what? I I feel like I'm kind of doing a decent job here getting these buttons going pretty quickly. The big thing that we don't have right now is the gradient border. I hate gradient borders, which mine still looks funky. The gradient border is not very chill right now. Uh I do have the inset shadow is looking pretty chill. And everything else kind of looks right. Honestly, I think the intensity of the gradient for the button itself could ([View Highlight](https://read.readwise.io/read/01khfp95mh1qn7vyjpn45rhr9a)) - Tags: ๐Ÿ‘ป ai highlighted