Markup
All 3G phones can handle XHTML fine. CSS is less consistently supported.
au
Pay special attention with au that markup is syntactically valid. While it is best to always do this, au browsers will perform especially strange when bad markup is encountered. For instance
<form> <div> </form> </div>
will cause the browser to go back (as though the user has pressed the back button).
Another issue is with wallpaper/image download links. You cannot have it surrounded by font tags. Like:
<font color="blue "> <wml:anchor> <wml:spawn href="device:data/dnld?url=http://dl.serv.er/cool_wallpaper.jpg&name=mycoolwallpaper&size=62288&disposition=devjaww&title=mycoolwallpaper&checkout=1">Download now</wml:spawn> <wml:catch/> </wml:anchor> </font>
This will cause odd behaviour.
bug
There is an input bug on some browsers (W52S, W64S) where, if you try to input text in an input form while the page images are still loading, the form will be emptied after you have finished typing your text and return.
Special Markup
There are several proprietary extensions to access special features of the handsets:
Resources
XHTML Mobile Profile/XHTML MP Tutorial. This is an excellent and detailed guide to XHTML-MP.
Syntax Rules of XHTML MP. From the above tutorial, a quick guide to how to change your HTML to make it XHTML-compatible.
Openwave used to have good docs. If anyone knows where to find them now, feel free to post.