I can’t figure out the best way to control the width of the rendered content when embedding in another site. All the examples I’ve found online are on single-column sites where they allow the Observable content to render at 100vw. I have a multi-column site and need to constrain the rendered content to one column (much like observablehq.com does!)
I’ve attached a screenshot showing my issue. As you can see, the rendered content is in the main column, but since I can’t figure out how to control the width, it flows out under the right column and off the page.
I need this to work across all screen sizes.
I’ve gone through the docs many times now and can’t get it straight in my head how I might defined a custom Library class with an overridden ‘width’ function.
Thanks in advance!
Note: To clarify, I know I can set static widths in my notebook, but I would like to avoid that in order to keep things responsive.
It’s certainly possible, but I think you’ll have to override the definition of width from the standard library, which is based on window.innerWidth. I don’t believe we’ve published any notebooks that demonstrate how to override the standard library, but I’ll try to put one together shortly.
1 Like
Thank you Mike! I’d tried to figure out how to do exactly that, but I don’t quite have my head around how all the various components play together just yet.
If I can hammer this out, I’d love to start playing with Observable on our site and have my dev team start experimenting with it, too.
Here you go:
The main “trick” is to define a custom library rather than using the stdlib. Here I extended the standard library to override the definition of width. (See live version.)
6 Likes
That looks like it should fit the bill! I’ll try to test it out tomorrow. I think this code snippet will be extremely useful for other folks in my situation trying to embed Observable content in existing sites. I can imagine this would be huge for the news industry (which I know you have a bit of a history in as well).
Thanks again!
This worked like a charm. Thank you!