Directives are markers in DOM elements that tell Angular's compiler to attach behaviors to elements or transform elements. Angular has built-in directives like ngBind and ngModel. Developers can create custom directives that Angular will use. The compiler matches directives against elements by name, attribute, class, or comment. Creating a directive involves registering it on a module with a factory function that returns configuration options. Best practices include prefixing custom directives to avoid conflicts.