/* Constrain size of casually posted images. 1: Don't trash the layout sideways. 2: Limit height to fit inside the viewport. (UNLESS the aspect ratio is greater than 1:2, in which case it's probably a tall comic.) 3: Defend the native aspect ratio. 4: Respect the width/height HTML attributes as the maximum size (in CSS pixels) for the "zoomed in" state, since the image might be huge to support high DPI devices. 5: Let the user expand an individual image to max size by clicking (UNLESS it's inside a link). (js/jquery.imageshrink.js) 6: Use a zoom-in/zoom-out cursor to show when users can zoom. 7: Omit zoom cursor for images that are actual size in their unexpanded state (.imageshrink-actualsize; relies on JS for comparing extrinsic and intrinsic sizes). 8: Ignore all of the above for: a: Images inside tables or inline-styled divs. (.imageshrink-exempt; relies on JS for heavy lifting.) b: Images with a style attribute. */ @supports (object-fit: contain) { .entry-content, .comment-content, .InboxItem_Content .Body { img:not(.imageshrink-exempt):not([style]) { // A height or width value can be overridden, but it can never be truly // *removed,* which means you lose the ability to default to the // height/width HTML attributes as soon as you touch those CSS properties. // That's why we're using this :not() selector -- once // .imageshrink-expanded gets added to an image, it retroactively never // had that "height: auto;" property, and thus the zoomed-in state can // respect the height/width attributes. &:not(.imageshrink-expanded) { cursor: zoom-in; height: auto; // If the image shrank, this prevents gross empty space above/below it. max-width: 100%; max-height: 95vh; object-fit: contain; object-position: left; // Tall comics don't need to fit inside the viewport. &.imageshrink-tall { max-height: unset; } } &.imageshrink-expanded { cursor: zoom-out; } } } a img, .poll-response img, img.imageshrink-actualsize { cursor: unset !important; } }