Can use normal HTML attributes, you can mix in JS if you want to, it supports states, nesting and media queries. And no, it will not all end up in style="" but create a “real” class= attribute and pull out the CSS into head, just like css-modules.
It even allows you to style custom components (not only HTML ones) if they only accept className as prop, so:
const Button = (props) => <button className={props.className}>{props.children}</button>
const CustomButton = styled(Button)
display: inline-block;
padding: 5px;
const Item = () => Click me!
Even though it's also have downside like other technology. Main thing is sharing code between multiple projects could become very harder
If your priority is the speed, glamorous or styled-components is exactly what you could use in your web apps. Writing styles in strings for styled-components may be something unusual, but the visitors will appreciate the fast loaded web page. If you decide to use styled-components, do not forget to install plugin to support syntax highlighting in strings or maybe help creating a new one.
Sass/css and inline styles are also pretty fast, but if you decide to reuse your code for your React Native app be prepared to rewrite your stylesheets. But on the other hand, css and other style preprocessors are a good choice for web applications.