The evolution of the web has involved numerous workarounds and hacks that helped developers manage inconsistent browser behaviors. Cascading Style Sheets (CSS), the language used to style web pages, has historically been used in ways that extended beyond its original specifications to address these challenges.

Early versions of Internet Explorer (IE) introduced several parsing quirks that developers exploited to target specific browsers. For example, the "star hack" involved prefixing CSS properties with an asterisk (*) to apply styles only in IE7 and earlier. Similarly, prefixing properties with an underscore (_) or hyphen (-) targeted IE6. These hacks arose because conditional comments could not be used directly within CSS files to limit styles to certain browsers.

Internet Explorer also misinterpreted the !important declaration, treating any string prefixed with an exclamation mark as !important. This allowed developers to create IE-specific overrides using arbitrary strings like !ie, which other browsers ignored.

At the document level, CSS selectors were crafted to detect browsers, such as using * html {} for IE6 and earlier, or *:first-child+html {} for IE7. These selectors enabled browser-specific styling but often resulted in complex and fragile code.

One notable IE-specific concept was "hasLayout," an internal flag determining how elements rendered. Developers used the zoom property set to 1 to trigger hasLayout, fixing issues like collapsing parent containers when children were floated—a common layout technique at the time.

Cursor styling also differed, with IE versions before 6 supporting only the non-standard cursor value hand instead of pointer, leading to CSS declarations that included both to ensure compatibility.

CSS Expressions, introduced in IE5, allowed JavaScript execution within CSS to simulate missing features like position: fixed or min/max-width. While powerful, these expressions were performance-intensive and were discontinued in IE8.

To address visual effect limitations, IE implemented proprietary filters based on DirectX. These filters enabled opacity control, gradients, and transparent PNG support but often caused rendering and interactivity issues. The filter syntax evolved over time, with support removed in IE10 as standard CSS properties gained adoption.

IE also allowed scrollbar customization through proprietary properties starting in version 5.5, enabling detailed color control of scrollbar components. Though rarely used professionally, this feature was popular among users customizing personal profiles on platforms like MySpace.

HTML Components, unique to IE, permitted attaching scripting behavior to elements via CSS, enabling features like hover effects on non-link elements before broader CSS support existed. This functionality was deprecated by IE10.

Other hacks included the Box Model Hack, which exploited parsing bugs to handle IE’s incorrect box model implementation in versions 5 and 5.5, and the Holly Hack, which targeted IE for Mac’s unique rendering engine.

The "double margin float" bug in IE caused floated elements’ margins to double unless a display:inline declaration was added, illustrating the many layout inconsistencies developers had to navigate.

Some browser extensions like the Skype and Ask toolbars introduced unwanted UI elements that developers attempted to hide using CSS hacks.

Vendor prefixes such as -webkit-, -moz-, and -ms- were originally intended for experimental CSS features but became entrenched in production code, forcing browsers to maintain support for outdated implementations. Modern browsers now favor feature flags over prefixes, though some prefixes remain for unstandardized features.

While many of these quirks are now obsolete due to modern standards and browser improvements, they highlight the complex history of CSS and browser compatibility. Understanding these past challenges provides context for the web’s ongoing evolution and the importance of standards compliance.