Hi, Derek,
My perception about browser sniffing is quite different than yours: it does not seem to me that it is dead or dying or even marginal; perhaps it will become marginal when IE6 will be dead, but when such blessed times will come? It seems that as long there will be browsers which interpret the same code differently there will be need for browser sniffing.
I will present some examples from my experience where I am using browser sniffing:
1. IE6 and less does not support css property position: fixed. Using browser sniffing I pass position: absolute to IE6 and less and position: fixed to modern browsers and IE7.
2. IE does not support css property display: table-row and display: table-cell. Using browser sniffing I pass display: table-row and display: table-cell to modern browsers and display: block to IE.
3. IE has quite useful object called “Dialog helper”. Using browser sniffing I embed into html page Dialog helper if browser is IE and flash object having similar functionality if browser is not IE.
These examples may not be representative about what in real world browser sniffing is used for.
What I believe is representative, is this kind of workflow: you develop using Firefox for
display of the code you are writing and when everything works OK in Firefox you test on other browsers. Quite often something does not work correctly (usually in IE). Then you search for a technique which might work equally well on all supported browsers. If such technique does not come to mind, you fork the code.
For code forking there are essentially three options: server-side browser sniffing, client-side browser sniffing and css hacks, such as *html hack. Of these options server-side browser sniffing is most universal and powerful since css hacks invalidate the code and using client-side browser sniffing there may be a danger of displaying ugly page before browser specific code is applied.