As for CSS 2.1, see http://www.w3.org/TR/CSS21/selector.html#attribute-selectors
Executive summary:
Attribute selectors may match in four ways:
[att]
Match when the element sets the "att" attribute, whatever the value of the attribute.
[att=val]
Match when the element's "att" attribute value is exactly "val".
[att~=val]
Match when the element's "att" attribute value is a space-separated list of
"words", one of which is exactly "val". If this selector is used, the words in the
value must not contain spaces (since they are separated by spaces).
[att|=val]
Match when the element's "att" attribute value is a hyphen-separated list of
"words", beginning with "val". The match always starts at the beginning of the
attribute value. This is primarily intended to allow language subcode matches
(e.g., the "lang" attribute in HTML) as described in RFC 3066 ([RFC3066]).
CSS3 also defines a list of selectors, but the compatibility varies hugely.
There’s also a nifty test suite that that shows which selectors work in your browser.
As for your example,
a[href^=http]
{
background: url(external-uri);
padding-left: 12px;
}
should do the trick. Unfortunately, it is not supported by IE.