concatenate(value, ..., value) may be used to specify a dynamically evaluated property value anywhere a static property value is allowed.
A dynamic property value is evaluated just before building the view corresponding to the subject of the selector:
The value arguments are converted to strings and concatenated together. Note that pseudo-functions such as attr() or xpath() are evaluated in order to obtain their string values.
The result of the evaluation is a string which is parsed as a property value.
Example 1 (XHTML), simple table formatting could be implemented using this feature:
td, th {
display: table-cell;
text-align: concatenate(attr(align));
vertical-align: concatenate(attr(valign));
row-span: concatenate(attr(rowspan));
column-span: concatenate(attr(colspan));
border: 1 inset gray;
padding: 2;
}Example 2 (custom DTD) image name is the concatenation of a basename obtained from attribute name and an extension obtained from attribute format (see above to have a description of pseudo-function image()):
image {
content: concatenate("image('", attr(name), ".", attr(format), "',-400,-200)");
}