CSS for a Javascript developer
Introduction
A week ago, I completed the CSS for JavaScript Developers course, and it was a fun journey into the world of CSS. Throughout the course, I took copious notes to capture the key points and valuable insights that I gained. Here are my notes:
Styled-components
styled-components is a React library for CSS-in-JS.
Uses tagged template literals for defining styled components.
Automatically adds vendor prefixes for browser compatibility.
"&" is the placeholder for referencing the generated class.
Component names don't need to be globally unique.
Supports CSS Nesting with the "&" selector.
Offers benefits in specificity and scoping.
Component Libraries:
Reusable components for multiple applications.
Ensures consistency and speeds up development.
Can be used in both large organizations and small web apps.
Design systems and design tokens play a role.
CSS knowledge may become less critical.
Pre-existing libraries like Material Design are available.
Alternatives include Radix Primitives, Headless UI, Ariakit, and React Aria.
Breadcrumbs:
Navigation links showing content structure.
Commonly found on e-commerce listing pages.
Help navigate to parent or grandparent categories.
Can be implemented as a React component.
Components:
Core options: variant and size props for specific styles.
Composition with styled() for style combinations.
Contextual styles based on component usage or nesting.
Tradeoffs between managing styles and code complexity.
Choose the appropriate styling method for the situation.
Understanding the impact of styles on elements is crucial.
Flexbox:
CSS layout mode for controlling element distribution.
Useful for aligning and spacing elements in one dimension.
Complements CSS Grid for different layout needs.
Activated by setting display: flex.
Better browser support compared to CSS Grid.
Grid:
display: grid;
By default, grid creates an implicit grid based on the number of children elements.
Implicit grids fill the available space and stretch elements horizontally.
Grid height can be fixed to control the behavior of rows.
Grid auto flow property changes the flow direction of elements in the grid.
Grid construction involves explicitly defining columns and their widths using the
grid-template-columns
property.Columns can have fixed widths or be flexible using the
fr
unit.Self-alignment properties
align-self
andjustify-self
can be used on individual grid items.Understanding grid tracks and lines helps in understanding the grid structure.
Align:
Flexbox provides alignment options like align-items and align-self.
align-items: baseline aligns elements based on their baseline.
Combining baseline and center alignment requires creative approaches.
align-self allows specific children to have different alignment settings.
Flexbox lacks justify-self for the primary axis.
Chat interface example demonstrates Flexbox for conversation layout.
Calc:
calc()
function for mathematical operations in CSS.Good browser support, even in older versions.
Useful for unit conversion and dynamic color palettes.
Allows fine-grained control over CSS gradients.
Circular hue values in
calc()
calculations.
CSS Transitions:
Fundamental tool for creating smooth animations.
Transition property glides elements between states.
Control animation effects with properties and durations.
Timing functions determine animation pace and style.
Custom timing curves using cubic bézier functions.
Transition delays solve issues like "doom flicker."
Prevent unintended flickering with parent-child interactions.
CSS Keyframe Animations:
Defined using
@keyframes
at-rule.Specify intermediate states with keywords or percentages.
Applied using the
animation
property.Control animation duration, timing, delay, and iteration count.
Timing functions control animation acceleration and deceleration.
Looping, multi-step, and pauseable animations.
Shorthand syntax combines animation properties.
Dynamic Updates in Animations:
Trigger animations dynamically using the
animation
property.Update animation property with JavaScript.
Pausing animations with
animation-play-state
.Good browser support, including older versions.
Flexibility with
@keyframes
for various animations.Transitions suitable for smooth CSS value transitions.
Accessibility:
Animations can affect individuals differently.
Reduce or disable animations for accessibility.
Access user's animation preference using CSS media query "prefers-reduced-motion."
Adjust animations based on user preference.
Regular testing with reduced motion setting enabled.
Conclusion:
In the week since completing the CSS for JavaScript Developers course, I've gained a deeper understanding of CSS and its integration with JavaScript. Whether you're a fellow developer looking to enhance your frontend skills or simply seeking a quick CSS refresh, I hope these bullet points prove useful to you.