Without too much hacking, there are two HTML5-compliant ways to approach this problem in Summer '13:
- Include a style element with the scoped attribute
- Use JavaScript in a script to insert link elements to stylesheets stored in static resources
<style scoped>...</style>
This approach is simple, and any styles defined should be applied to the div id="contentWrapper" element into which the community's HTML header and footer are inserted. The parent div pretty much includes all of the visual content on the page, which makes this approach fairly comprehensive in the scope of its effects.
JavaScript script to insert link elements
Typically in Visualforce, styles are applied through dynamic links to CSS stylesheets stored as static resources. However, to build that dynamic URL in static HTML requires manual construction based on knowledge of Salesforce's URL conventions.
A relative URL to a CSS stylesheet stored within a .zip file loaded as a static resource has the following components:
- CommunityName: The keyword appended after ServerName, if applicable. This may be blank for a particular community.
- ResourceNumber: A unique number assigned to a static resource by Salesforce
- ResourceName: The name (case-sensitive) of the static resource
- InsidePath: The path inside the .zip file to the CSS stylesheet
The full URL is then constructed by concatenating the following: '/' + CommunityName + '/resource/' + ResourceNumber + '/' + ResourceName + '/' + InsidePath
A few sample URL's are shown below:
- /cirruscommunity/resource/1378136101000/CirrusStaticResource/styles/layout.css
- /slalomcommunity/resource/1379138201002/SlalomStaticResource/css/common.css
ResourceNumber can be ascertained by opening the static resource and looking for the string of numbers in the "View file" link's URL. Right-clicking the "View file" link and copying the link address should easily grab the ResourceNumber for you.
Lastly, the following JavaScript script can be edited to add all of the stylesheets you want to the community.
<script type="text/javascript"> function appendLinkToHead(path) { var link = document.createElement("link"); link.setAttribute("rel", "stylesheet"); link.setAttribute("type", "text/css"); link.setAttribute("href", path); var head = document.getElementsByTagName("head")[0]; head.appendChild(link); } // function appendCommunityLink(String) var communityName = "community"; var resourceNo = "1378136101000"; var resourceName = "CommunityResource"; var resourcePath = "/" + communityName + "/resource/" + resourceNo + "/" + resourceName + "/"; var stylesheets = [ "library/css/brand.css", "library/css/layout.css", "library/css/reset.css"]; for (var i = 0; i < stylesheets.length; i++) appendLinkToHead(resourcePath + stylesheets[i]); </script>