I get a serious case of impostors syndrome when it comes to CSS. 20+ years of HTML, 15+ of writing Javascript, loving ES6 but CSS gives me fits.
What I hate the most that there really is no clear parent - child abstraction.
This parent child abstraction (all the way down to turtles) is present in most reasonable UI frameworks. I'll take Windows Forms or Qt any day of the week over CSS.
In CSS this abstraction leaks all over the place. Elements can do whatever the hell they want (z-index, pos, box sizing before International Border-box Day, etc).
CSS Grid was supposed to solve layout. It still has a long way to go.
For example, teaching at a bootcamp I ran into the following:
https://learn.freecodecamp.org/responsive-web-design/css-gri...
By setting a hard limit in pixels(as required in the exercise) you break the grid for smaller sizes because items go outside parent.
So what do I tell my students? Avoid px whenever possible, use media queries, em/rem and percentages.
That's all good, but there is no coherent mental model to think about UI besides bunch of arbitrary boxes which can do ANYTHING.
In a good UI your child elements should stay within the parent(via scroll etc), not so with CSS. There are no guarantees whatsoever. Someone will come up with !important !important pretty soon.