I’ve had a few questions/comments on using Custom Styles with FCK Editor, so here’s a style that I created that will format any link you apply it to as a red button that changes color on mouse over.

Add this CSS to the fck.css and portal.css files in you PORTALS folder.

/* Both variations --a.color-- and --span.color a--
    are needed to handle DNN's span applications
    not being consistent */

.red_button, a.red_button:link, a.red_button:visited,
 span.red_button a, span.red_button a:link,
 span.red_button a:visited {
        font-weight: bold;
	font-size:10px;
	color: #FFF;
	background-color:#C00;
	padding:4px 8px;
	text-decoration: none;
	border-top: 1px solid #DFDFDF;
	border-left: 1px solid #DFDFDF;
	border-bottom: 1px solid #333;
	border-right: 1px solid #333;
	}

a:hover span.red_button,
span.red_button a:hover {
	background-color:#900;
	border-top: 1px #31557f solid;
	border-left: 1px #31557f solid;
	border-bottom: 1px #666666 solid;
	border-right: 1px #666666 solid;
	text-decoration:none
}

Be sure to add the following to the fck.xml file, to append the style to the menu in the FCK editor.

<Style name="red_button" element="span">
  <Attribute name="class" value="red_button" />
</Style>

Hope this helps, post any questions in the comments.

I’ve been working on implementing DotNetNuke at work for a few weeks now. After finally getting the hand of skinning DotNetNuke and building a custom skin that mimicked the look of the design provided by Marketing, I wanted to create a set of styles for formatting text. This would allow users to format text (and other elements) with a pre-set look and not have to use font-size, font-color and other outdated markup, thereby creating uniformity and smaller page/code sizes.

Well, after trying many attempts using the FCK Editor settings, I found the steps necessary to implement a set of custom CSS styles in DotNetNuke using the FCK Editor.

  1. Add your customs styles to portal.css in the portal root (Site Settings > Style Sheet) and save. These styles will be applied to your module text outside of the editor.
  2. Create a text file: FCK.xml. Here is where you will define styles to appear in the style list inside the FCK editor.
  3. Using the information in the FCK Editor Wiki help site, create your custom styles in FCK.xml. There should be an entry for each style you want to appear in the editor and in the order you want them to appear. See example below.
  4. Create a text file: FCK.css. These styles give the formatting to the styles you defined in FCK.xml so text in the editor will be formatted properly.
  5. Add your custom styles to FCK.css. This file contains ONLY your custom styles which are exactly the same as the custom styles you added to portal.css. There should be an entry for each style in FCK.xml you want to format.
    Using these lists limits the styles that appear in the editor to only those you want, rather than the long list of styles in portal.css.
  6. Upload FCK.css and FCK.xml to your portal root using the File Manger.
  7. Log in to your portal as Host and edit an HTML/Text module with the FCK Editor.
  8. Select “Show custom editor options”
    Select “Portal” for Settings Type.
  9. Expand “List of available styles for the editor”
    Select “URL” for Style list generation mode. Do not choose “Dynamic” or you will get a style list of garbage.
    Select “File” for Custom XML file, and select FCK.xml you uploaded to the root.
  10. Expand “Editor area CSS”
    Select “URL” for CSS Generator mode. Again, do not select “Dynamic”.
    Select “File” for Custom CSS file, and select FCK.css you uploaded to the root.
  11. Confirm “Apply custom settings to: Portal” and click “Apply”
    Close the FCK Editor custom options page and Cancel module editing.

  12. Refresh your browser with Ctl-F5 to force a refresh of the cache.

The list of styles should appear in the editor now. If you don’t see your styles and the formatting is not right, you might try deleting files in your cache. Also, check for mistakes in FCK.xml, FCK.css and portal.css. They must all be in sync and correct.

Here is a sample FCK.xml adapted from FCK:

<?xml version="1.0" encoding="utf-8" ?>

<Styles>
 <Style name="Image on Left" element="img">
  <Attribute name="style" value="padding: 5px; margin-right: 5px" />
  <Attribute name="border" value="2" />

  <Attribute name="align" value="left" />
 </Style>
 <Style name="Image on Right" element="img">
  <Attribute name="style" value="padding: 5px; margin-left: 5px" />

  <Attribute name="border" value="2" />
  <Attribute name="align" value="right" />
 </Style>

 <Style name="Title" element="span">
  <Attribute name="class" value="Title" />
 </Style>
 <Style name="Topic" element="span">

  <Attribute name="class" value="Topic" />
 </Style>
 <Style name="Custom Bold" element="span">
  <Attribute name="style" value="font-weight: bold;" />

 </Style>
 <Style name="Custom Italic" element="em" />
 <Style name="Title" element="span">
  <Attribute name="class" value="Title" />

 </Style>
 <Style name="Code" element="span">
  <Attribute name="class" value="Code" />
 </Style>

 <Style name="Heading H1" element="H1" />
 <Style name="Heading H2" element="H2" />
 <Style name="Custom Ruler" element="hr">

  <Attribute name="size" value="1" />
  <Attribute name="color" value="#ff0000" />
 </Style>

</Styles>

And corresponding FCK.css:

body, td {
font-family: Verdana, Sans-Serif;
font-size: 13px;
}

.Title {
font-family: Ariel, sans-serif;
font-size: 16px;
font-weight: bold;
color: red;
}

.Topic {
font-family: Ariel, sans-serif;
font-size: 14px;
font-weight: bold;
color: red;
font-style: italic;
}

.Bold {
font-weight: bold;
}

H1 {
font-family: arial, sans-serif;
font-size: 1.7em;
font-weight: bold;
color: #006699;
}

H2 {
font-family: arial, sans-serif;
font-size: 1.3em;
font-weight: bold;
color: #006699;
}

Those steps worked perfectly. Now I’ve just got to create the XML file to match the CSS file. I’ll go ahead and complain. It seems like there should be an easier way. Second, I don’t like the way it applies the styles. If I have a style “.red” (to make the text a specific shade of red) and I’ve got a style .bold (to make the font-weight:bold), DotNetNuke applies each one in a separate SPAN tag. I guess chaining CSS styles (span class=”red bold”) is too complicated.

Ugh! I guess this is the trade off. Moving the tedious task of menial updates to the users means uglier code underneath.

Playing around with DotNetNuke again today for work and the CSS implementation leaves a lot to be desired. For some reason (open source? – multiple contributors?) the CSS has hundreds of redundant definitions and the code base itself adds unnecessary or at least unwanted IDs or CLASS tags to everything.

Rather than have a single FONT-FAMILY declaration, it was declared on almost every style. Instead of BORDER, BORDER-RIGHT, BORDER-LEFT, BORDER-TOP, and BORDER-BOTTOM are used. It’s really insane. Almost every element of content gets assigned with CLASS=”Normal” and put inside a DIV with a uniqe ID ending with ModuleContent.

All of this rambling led to a cool way to assign CSS properties to certain elements based on Wild Card characters. This only works with Firefox, but if you’re trying get Firefox to display something differently than IE, it can be a big help.

/* all DIV tags with an ID ending in ModuleContent */
div[id$=’ModuleContent’] {
border:2px #000 solid;
}

/* all A tags whose HREF attribute ends in .pdf */
a[href$=’.pdf’] {
border:2px #000 solid;
}

Works great for debugging browser differences as well. Anyway, back to cleaning up the DotNetNuke default.css file. I’ve already got it pared down to 14k (from the original 18k).

I managed to stumble across two great examples of Form Field styling using CSS and JavaScript.

Ask the CSS Guy has a nice breakdown of how to recreate the Vox Registration form and it’s CSS Span hints. It’s pretty cool, but I think I’ll get rid of the <dd> and <dt> tags in the markup.

Also, Uni-Form is worth checking out as well. Using CSS, the form can easily be styled in one of two common ways. Great way to display a valid XHTML form in a variety of ways without changing your code.

Finally, Ill mention a Prototype Form validation set that I’ve been using for a while on work projects. I need to switch it over to jQuery,
but I’ve been lazy about it. I’ve created quite a few custom validators for it and the new release
makes it even easier to combine and change options on the form fields. I’ve not found something in jQuery that is as robust, yet.