|  |  |  | GTK+ 3 Reference Manual |  | 
|---|
There are some features in GtkStyleContext that were not available in GtkStyle, or were made available over time for certain widgets through extending the detail string in obscure ways. There is a lot more information available when rendering UI elements, and it is accessible in more uniform, less hacky ways. By going through this list you'll ensure your widget is a good citizen in a fully themable user interface.
gtk_style_context_add_region(). These regions can be
        referenced in CSS and the :nth-child pseudo-class may be used to match
        the elements depending on the flags passed.
        Example 131. Theming widget regions
| 1 2 3 4 5 6 7 | GtkNotebook tab { background-color: #f3329d; } GtkTreeView row::nth-child (even) { background-color: #dddddd; } | 
          If your container renders child widgets within different regions,
          make it implement GtkContainer::get_path_for_child(). This function
          lets containers assign a special GtkWidgetPath to child widgets
          depending on their role/region. This is necessary to extend the
          concept above throughout the widget hierarchy.
        
For example, a GtkNotebook modifies the tab labels' GtkWidgetPath so the "tab" region is added. This makes it possible to theme tab labels through:
Example 132. Theming a widget within a parent container region
| 1 2 3 | GtkNotebook tab GtkLabel { font: Sans 8; } | 
gtk_style_context_set_junction_sides(). It is of course up to the
        theme to make use of this information or not.
      
          GtkStyleContext supports implicit animations on state changes for
          the most simple case out-of-the-box: widgets with a single animatable
          area, whose state is changed with gtk_widget_set_state_flags() or
          gtk_widget_unset_state_flags(). These functions trigger animated
          transitions for the affected state flags. Examples of widgets for
          which this kind of animation may be sufficient are GtkButton or
          GtkEntry.
        
          If your widget consists of more than a simple area, and these areas
          may be rendered with different states, make sure to mark the rendered
          areas with gtk_style_context_push_animatable_region() and
          gtk_style_context_pop_animatable_region().
        
          gtk_style_context_notify_state_change() may be used to trigger a
          transition for a given state. The region ID will determine the
          animatable region that is affected by this transition.