There is a bit of work to client-proofing a rich text editor.
The biggest problem comes from the fact that CSS selectors behave differently on the web page than they do in the RTE. Why? Unless you have managed to keep your CSS architecture very simple, you’re going to have certain selectors that relate to the content area of your page. When the content sits inside TinyMCE, and you’ve specified the same stylesheet that your webpage uses, the content is now in a different context than it is on the page. You might have a bunch of rules whos selectors start with #contentarea because your content sits inside a div tag with id="contentarea". You pull that content up in TinyMCE, and it’s not sitting in that div anymore. It’s sitting right off the body tag.
FCKeditor is different - you can configure it to set the editable area to any class (or id? I can’t recall) so you get pretty good translation of existing styles into the editor just by doing that. (hmm, maybe this can be done with TinyMCE, but I haven’t seen it.)
There are two ways you can get TinyMCE to pick up the proper styling for WYSIWYG.
First, you can create an alternate stylesheet just for TinyMCE to use - redefining your content area styles in the context of the body tag.
Second, you can update your existing stylesheet to add TinyMCE-specific selectors to your content area selectors. (TinyMCE’s editor body tag has a class of "mceContentBody"). Like this:
#contentarea, .mceContentBody {
font-size:160px;
}
#contentarea ul, mceContentBody ul {
border: 10px solid purple;
}
Either way, this takes some careful consideration and is not the most elegant thing to have to do. But for me, it’s been the only way to be able to hand over rich text editing to clients.
As far as unlikeable and unnecessary code, the other suggestions here are great. Customize the toolbar to reduce the number of formatting options your client has, use template variables for laying out trickier elements. Tables are always tricky in the RTE unless you trust your client not to send the table into outer space.