Flex applications are made up of many individual components. The two kinds of components you'll be concerned with are controls and containers. Controls are familiar user interface items like Button, CheckBox, and ComboBox. Containers are components that contain other controls, like Accordion, TabNavigator, and Panel. (There are other kinds of containers that help lay out controls, like HBox and VBox, but these don't typically have a visual appearance of their own, so they aren't skinnable.)
Each skinnable component has a set of named "skin parts." For most components, like Button, these skin parts represent different visual states:
Other components have a more complex set of skin parts. For example, a ScrollBar has a set of up/over/down/disabled skins for its up arrow, a similar set of skins for its down arrow, and skins for its thumb and track.
Regardless of the component's complexity, however, each of these skin parts is a simple graphical asset. You can create skin parts as individual bitmaps in any graphic design tool, or as a set of symbols in a Flash movie. In some ways, this is similar to creating, say, a rollover image in HTML; you create one GIF or JPEG for the image's normal state and a different one for the rollover state. Unlike HTML, however, Flex 2 assigns skin parts to various components using CSS.
This might all sound rather tedious and complex: creating a bunch of little graphical files and then having to write a bunch of CSS to tie it all together. Well, that's why I wrote this article!
However, before getting on with it, it's worth discussing one important concept: scalability.