Pseudo-classes are used to define special states of CSS elements. They allow styling elements when a user mouses over, focuses on, visits, or activates them. Common pseudo-classes include :hover, :focus, :visited, and :active. Pseudo-classes can be used with CSS classes and selectors like :first-child to style specific elements, such as styling the first <p> element or changing the color of a link on hover. Pseudo-elements like ::before and ::after allow inserting content before or after elements.