Thanks for the replies. I am already using the allowedWidgets restrictions.
I could in theory create two identical widgets, with the display same name (but different class name), and set the allowed widget to use the appropriate one on each place holder. I want to avoid unnecessary duplicate code, but should be able to share the basic logic between the controllers.
I'll look into the widget JSON (I am already serialising this elsewhere), but I'm not sure I'll be able to identify the same widget between placeholders.
Regarding using CSS - this sadly isn't possible in my case - We're building an AMP website (https://www.ampproject.org/), and using the amp-image tag. This needs width and height properties which differ depending which place holder they're added to.
Right now, I've just added a property that the editor must change depending which place holder they added it to. I can then use this in the controller to create the Viewmodel as required.