Comprehensive CSS Stylesheet

The following is an attempt to gradually build CSS for each TEI element, paralleling the default TEI stylesheets (while also potentially serving as a kind of discussion center for how the stylesheets ought to operate (see Formatting TEI documents on how there is a need for this despite TEI being agnostic as to output formatting), at least for issues pertaining solely to formatting as opposed to semantics), by indicating here necessary deviations from the XHTML stylesheets (due to CSS constraints) or potentially desirable alternatives, etc.).

Advantages of CSS over XSL might include:
 * 1) Simpler for maintenance/alteration (though CSS can still be combined with simpler XSL as needed)
 * 2) Downloading (and parsing?) is faster
 * 3) Wider browser support (and for browser caching?)
 * 4) Allows DOM and other manipulation directly on semantically-named TEI elements (though admittedly, use of frameworks like jQuery may make traversal of X/HTML as easy or easier)
 * 5) TEI could potentially be used as is in HTML (though empty self-closing elements will not be treated properly unless changed to  form and namespaces will not be present) in addition to true XHTML.

Disadvantages:
 * 1) Does not allow for certain kinds of transformations (though again, CSS can be combined with a simple XSL stylesheet which preserves TEI except in cases where needed)
 * 2) Is cumbersome for certain variable structures (e.g., for values varying by integer but not including the integer (e.g., space.extent => number of spaces) a separate rule must be created for each possible attribute value)
 * 3) (Another disadvantage of CSS in general is being unable to create certain kinds of output such as form controls, but in the case of TEI, we hardly need this.)

Per CSS Namespaces, one can use either @namespace "http://www.tei-c.org/ns/1.0"

or

@namespace tei "http://www.tei-c.org/ns/1.0"

...but we will use the former since we will presume the stylesheet will be primarily (if not exclusively) for TEI.

We will not be able to make equivalents for XSLT templates like rendToClass (e.g., ab) or applyRend (emph), applyRendition (emph) since we cannot (nor do we need to) add an id or class (though @rend or @rendition would be useful to utilize, there is no "eval"-like code in CSS; however, we could test against predefined values like "bold" (maybe as a global * or at least the elements using these in the stylesheets (emph, hi, ...))).

All fields below should be complete for an element, or otherwise noted that it is incomplete, so that it can otherwise be assumed that the CSS has been completely applied as far as possible (besides rend/rendition which may later be done globally for all elements, as these are indeed globals).

a
ab {display:block;} choice > expan + abbr:before {content:"("} choice > expan + abbr:after {content:")"} actor {display:inline; font-style: italic;} addrLine {display:block;} address {display:block; /* font-style:italic; If wish to appear as HTML addresses are rendered by default, at least in Firefox */} att {display:inline; font-weight:bold;} att:before {content:"@"}
 * accMat
 * acquisition
 * activity
 * add
 * addName
 * addSpan
 * additional
 * additions
 * adminInfo
 * affiliation
 * age
 * alt
 * altGrp
 * altIdent
 * altIdentifier
 * am
 * analytic
 * anchor
 * app
 * appInfo
 * application
 * arc
 * argument
 * attDef
 * attList
 * attRef
 * author
 * authority
 * availability

b
byline {display:block;}
 * back
 * bibl
 * biblFull
 * biblScope
 * biblStruct
 * bicond
 * binary
 * binaryObject
 * binding
 * bindingDesc
 * birth
 * bloc
 * body
 * broadcast

c
caesura:before {display:inline; content:"\a0\a0\a0\a0"; /* could be :after too */} camera {display:inline; font-style: italic;} caption {display:inline; font-style: italic;} castList {} /* Note: has additional rules: */ castList {display:block;} /* applies whether children are head or not */ /* Note: for this to mirror the XSL exactly, head would always need to be preceding other elements as a direct child castList */ castList > head {display:inline; font-style:italic;} castList > *:not(head) {margin-left: 40px;} /* If children of castList needed their own indents, then it should be relative to this (if possible) */
 * c
 * cRefPattern
 * case
 * castGroup
 * castItem

catRef {} /* Note: has additional rules: */ catRef + catRef:before {'\A'} /* Add line break if preceded by another catRef */ catRef:after {content:attr(scheme); display:inline; font-style:italic;} /* Add scheme in italics */ /* Commenting out as XPath not currently supported in CSS as needed by third 'after' catRef:after(2) {content:':'}*//* Requires CSS3 to add such additional 'after' content? (Firefox allows content: '123'attr(class)'456' at least); See http://www.w3.org/TR/css3-content/#nesting or http://www.w3.org/TR/css3-content/#inserting0 */ /* catRef:after(3) {content: } */ code {display:inline; font-family:monospace;}
 * catDesc (Only defined in XSL conditionally if using catRef)
 * catchwords
 * category
 * cb
 * cell
 * certainty
 * change
 * channel
 * char
 * charDecl
 * charName
 * charProp
 * choice
 * cit
 * cl
 * classCode (XSL has not yet covered (from header module))
 * classDecl
 * classSpec
 * classes
 * climate
 * closer
 * collation
 * collection
 * colloc
 * colophon
 * cond
 * condition
 * constitution
 * constraint
 * constraintSpec
 * content
 * corr
 * correction
 * country
 * creation
 * custEvent
 * custodialHist

d
del {display:inline; text-decoration: line-through;}
 * damage
 * damageSpan
 * datatype
 * date
 * dateline
 * death
 * decoDesc
 * decoNote
 * def
 * default
 * defaultVal
 * delSpan
 * depth
 * derivation
 * desc
 * dictScrap
 * dim
 * dimensions
 * distinct
 * distributor
 * district
 * div
 * div1
 * div2
 * div3
 * div4
 * div5
 * div6
 * div7
 * divGen
 * docAuthor
 * docDate
 * docEdition
 * docImprint
 * docTitle
 * domain

e
emph {display:inline; font-style:italic;} epigraph {display:block;} choice > expan + abbr:before {content:"("} choice > expan + abbr:after {content:")"}
 * eLeaf
 * eTree
 * edition
 * editionStmt
 * editor
 * editorialDecl
 * education
 * eg
 * egXML
 * elementSpec
 * email
 * encodingDesc
 * entry
 * entryFree
 * epilogue
 * equipment
 * equiv
 * etym
 * event
 * ex
 * exemplum
 * explicit
 * extent

f
foreign {display:inline;}
 * f
 * fDecl
 * fDescr
 * fLib
 * facsimile
 * factuality
 * faith
 * figDesc
 * figure
 * fileDesc
 * filiation
 * finalRubric
 * floatingText
 * floruit
 * foliation
 * forename
 * forest
 * forestGrp
 * form
 * formula
 * front
 * fs
 * fsConstraints
 * fsDecl
 * fsDescr
 * fsdDecl
 * fsdLink
 * funder
 * fvLib
 * fw

g
genName {display:inline;} geogName {display:inline;} gi:before {display:inline;content:"<"} gi:after {display:inline;content:">"} gloss {display:inline;}
 * g
 * gap
 * gen
 * geo
 * geoDecl
 * geogFeat
 * glyph
 * glyphName
 * gram
 * gramGrp
 * graph
 * graphic
 * group

h
hi {display:inline; font-weight:bold;}
 * handDesc
 * handNote
 * handNotes
 * handShift
 * head
 * headItem
 * headLabel
 * height
 * heraldry
 * history
 * hom
 * hyph
 * hyphenation

i
ident[type] {display:inline; font-weight:bold;} ident:not([type]) {display:inline; } /* Just as the stylesheet allows for different types; a specific type could be styled by ident[type="XXX"] */
 * iNode
 * iType
 * idno
 * if
 * iff
 * imprimatur
 * imprint
 * incident (speech module: XSL has not yet covered)
 * incipit
 * index
 * institution
 * interaction
 * interp
 * interpGrp
 * interpretation
 * item

j

 * join
 * joinGrp

k

 * keywords (XSL has not yet covered (from header module))
 * kinesic (speech module: XSL has not yet covered)

l
l {display:block;} label {display:inline;} lb {display:block;} lg {display:block;}
 * lacunaEnd
 * lacunaStart
 * lang
 * langKnowledge
 * langKnown
 * langUsage
 * language
 * layout
 * layoutDesc
 * lbl
 * leaf
 * lem
 * link
 * linkGrp
 * list
 * listBibl
 * listEvent
 * listNym
 * listOrg
 * listPerson
 * listPlace
 * listRef
 * listWit
 * localName
 * locale
 * location
 * locus
 * locusGrp

m
mentioned {display:inline;}
 * m
 * macroSpec
 * mapping
 * material
 * measure
 * measureGrp
 * meeting
 * memberOf
 * metDecl
 * metSym
 * milestone
 * moduleRef
 * moduleSpec
 * monogr
 * mood
 * move
 * msContents
 * msDesc
 * msIdentifier
 * msItem
 * msItemStruct
 * msName
 * msPart
 * musicNotation

n
name {display:inline;}
 * nameLink
 * namespace
 * nationality
 * node
 * normalization
 * note
 * notesStmt
 * num
 * number
 * numeric
 * nym

o

 * oRef
 * oVar
 * objectDesc
 * occupation
 * offset
 * opener
 * org
 * orgName
 * orig
 * origDate
 * origPlace
 * origin
 * orth

p
persName {display:inline;} placeName {display:inline;}
 * p
 * pRef
 * pVar
 * particDesc
 * pause (speech module: XSL has not yet covered)
 * pb
 * pc
 * per
 * performance
 * person
 * personGrp
 * phr
 * physDesc
 * place
 * population
 * pos
 * postBox
 * postCode
 * postscript
 * precision
 * preparedness
 * principal
 * profileDesc
 * projectDesc
 * prologue
 * pron
 * provenance
 * ptr
 * pubPlace
 * publicationStmt
 * publisher
 * purpose

q

 * q
 * quotation
 * quote

r
resp:after {content:" ";} respStmt {display:inline;} role {display:inline; font-style: italic;} roleDesc { margin-left: 40px; margin-right: 40px; } roleDesc > *:not(p) {display:block; margin-bottom:1em; /* Latter is to act like a paragraph*/} roleName {display:inline;}
 * rdg
 * rdgGrp
 * re
 * recordHist
 * recording
 * recordingStmt
 * ref
 * refState
 * refsDecl
 * reg
 * region
 * relatedItem
 * relation
 * relationGrp
 * remarks
 * rendition
 * repository
 * residence
 * respons
 * restore
 * revisionDesc
 * rhyme
 * root
 * row
 * rs
 * rubric

s
salute {text-align:left; display:block; margin-bottom:1em; /* Latter is to act like a paragraph*/} seg {display:inline;} set {display:inline; font-style: italic;} sic {display:inline;} sic:after {content: " (sic)"} signed {text-align:left; display:block; margin-bottom:1em; /* Latter is to act like a paragraph*/} soCalled:before {content:'‘'} soCalled {display:inline;} soCalled:after {content:'’'} /* Quote style is parameterized in XSL; note: content can also accept 'open-quote' and 'close-quote', but the default is as already included in the rule */ sound {display:inline; font-style: italic;} stage {font-style: italic; display:block; margin-bottom:1em; /* Latter is to act like a paragraph*/}
 * s
 * said
 * samplingDecl
 * schemaSpec
 * scriptStmt
 * seal
 * sealDesc
 * secFol
 * segmentation
 * sense
 * series
 * seriesStmt
 * setting
 * settingDesc
 * settlement
 * se x (XSL has not yet covered (namesdates module)) /* space-separated for spam filter! */
 * shift (speech module: XSL has not yet covered)
 * signatures
 * socecStatus
 * source
 * sourceDesc
 * sp
 * space
 * span
 * spanGrp
 * speaker
 * specDesc
 * specGrp
 * specGrpRef
 * specList
 * sponsor
 * stamp
 * state
 * stdVals
 * street
 * stress
 * string
 * stringVal
 * subc
 * subst
 * summary
 * superEntry
 * supplied
 * support
 * supportDesc
 * surface
 * surname
 * surplus
 * surrogates
 * syll
 * symbol

t
tech {display:inline; font-style: italic;} term {display:inline;}
 * TEI
 * table
 * tag
 * tagUsage
 * tagsDecl
 * taxonomy
 * teiCorpus
 * teiHeader
 * terrain
 * text
 * textClass
 * textDesc
 * textLang
 * then
 * time
 * timeline
 * title
 * titlePage
 * titlePart
 * titleStmt
 * tns
 * trailer
 * trait
 * tree
 * triangle
 * typeDesc
 * typeNote

u
unclear {display:inline;}
 * u (speech module: XSL has not yet covered)
 * unicodeName
 * usg

v
view {display:inline; font-style: italic;}
 * vAlt
 * vColl
 * vDefault
 * vLabel
 * vMerge
 * vNot
 * vRange
 * val
 * valDesc
 * valItem
 * valList
 * value
 * variantEncoding
 * vocal (speech module: XSL has not yet covered)

w

 * w
 * watermark
 * when
 * width
 * wit
 * witDetail
 * witEnd
 * witStart
 * witness
 * writing (speech module: XSL has not yet covered)

x

 * xr

y
(none)

z
z


 * zone

References used

 * http://math.ut.ee/~kaarel/NLP/TEI/visualization/ (on rationales)