Как масштабировать изображение внутри iframe с помощью css

Случай использования

У меня есть опрос, который я провожу с помощью Google Forms. Результаты опроса агрегируются в Google Sheets. У меня есть ряд графиков, которые динамически обновляются по мере поступления новых результатов. У меня есть веб-сайт Squarespace, на котором я хочу опубликовать графики. Я могу встроить диаграммы с блоком кода, в который я копирую и вставляю код встраивания iframe, созданный Google Sheets.

Проблема

Как вы, наверное, знаете, фреймы не полностью адаптивны. Я видел ряд статей с различными методами создания адаптивного iframe. Примеры, которые я узнал из всех, используют видеоплееры YouTube в качестве примера для того, чтобы сделать их масштабируемыми для полностью адаптивного веб-сайта. Я следовал примерам и, насколько я могу судить, у меня есть iframe, реагирующий на размер области просмотра, но не на изображение внутри iframe.

Я посоветовался с двумя друзьями, которые управляют магазинами веб-разработки, но я не могу просить о слишком большой помощи, так как я бы попросил их работать бесплатно, а я не прошу своих друзей о бесплатной работе.

Ссылка на JSFiddle

https://jsfiddle.net/ArgyleAnalytics/z4rcv7hp/4/

Вот мой HTML

<div class='embed-container'>
    <iframe src='https://docs.google.com/spreadsheets/d/e/2PACX-1vRPFtRq4MyzyU-MgDlL3duebxBNAHL6ySq2e_jatydzOseVyAzAHuoSA6VXAcalDkYMG1litTyKPkEn/pubchart?oid=501231490&format=image' scrolling="no" seamless frameboarder="0">
    </iframe>
</div>

Вот мой CSS

<style>.embed-container {
    position: relative;
    padding-bottom: 56.25%;
    height: 0;
    overflow: hidden;
    max-width: 100%;
    border: 0;
    }

.embed-container iframe,
.embed-container object,
.embed-container embed {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    border: 0;
    transform: scale(1.00);
    transform-orgin: ()
    }
</style>

Примечания к моему коду

Я использую подход, который я видел во многих блогах, а базовый код взят с http://embedresponsively.com. Один из моих друзей указал мне на эту ветку SO, где у меня появилась идея для transform: scale, которую вы видите в .embed-container iframe. transform: scale, кажется, частично помогает мне в этом. Когда я настраиваю свой код на transform: scale(0.25), он сжимает график, чего я и хочу, но это слишком неэлегантный вариант для того, чего я пытаюсь достичь. Прямо сейчас мой CSS использует абсолютное значение масштаба вместо того, чтобы использовать края iframe в качестве точки отсчета (я думаю, это то, чего мне нужно добиться).

Желаемый результат

Я хотел бы, чтобы изображение внутри iframe уменьшалось относительно края iframe. Squarespace автоматически изменит размещение блоков кода в зависимости от области просмотра. Если я смогу найти способ привязать transform: scale к краям iframe, я думаю, это даст мне то, что мне нужно.

Ограничения

Я хотел бы добиться этого без какого-либо JS, но я проявляю гибкость, если это необходимо, поскольку я могу запустить <scripts> внутри блока кода Squarespace. Если бы мои навыки PHP были достаточно сильными, я бы, вероятно, просто вручную кодировал свои графики с помощью набора Google Chart Visualization, но у меня нет времени, чтобы учиться до такого уровня мастерства.

Я не против услышать, что то, что я хочу сделать, не может быть сделано из-за ограничений в Google Sheets, но я не уверен, что куплюсь на это. Я могу масштабировать изображение на основе абсолютного значения, я надеюсь, что кто-нибудь найдет способ помочь мне масштабировать мое изображение внутри iframe на основе размера iframe.


person Kevin Taylor    schedule 13.07.2018    source источник
comment
@pnuts Ya'll — волонтеры, предлагающие помощь незнакомцам. Друзья, которых я упомянул, — это те, кого я могу в конечном итоге измотать, если буду слишком часто просить их о помощи.   -  person Kevin Taylor    schedule 16.07.2018


Ответы (1)


Я не думаю, что возможно повлиять на CSS iframe на странице. Вам нужно будет добавить адаптивный CSS на страницу, которую вы пытаетесь встроить. Поскольку это изображение, сгенерированное Google, маловероятно, что у вас будет доступ для этого. Что вы можете попробовать, так это просто загрузить изображение и разместить его на сайте квадратного пространства как изображение, а не как iframe.

Я не уверен, что данные изображения являются динамическими, что может повлиять на то, что вы можете сделать. Думали ли вы поискать другие графические сервисы? Там может быть что-то, что будет связано с таблицами Google, или, если вы достаточно знаете javascript, вы можете построить свои собственные графики с помощью Google API.

person tec4    schedule 13.07.2018
comment
Извините, но я думаю, что это невозможно, потому что здесь возникают проблемы с изображением, которое находится в iframe, поэтому мы не можем его стилизовать, если вы можете задать стиль, тогда, пожалуйста, укажите встроенный стиль для изображения, например max-width: 100%; высота: авто; также в мобильном представлении вам нужно указать минимальную высоту для iframe, иначе изображение будет выглядеть на маленьком устройстве. - person Bharat Makvana; 13.07.2018
comment
@tec4. Спасибо за ваш ответ. Данные очень динамичны, и я пытаюсь создать веб-страницу, которая всегда будет получать обновленные числа при загрузке страницы. - person Kevin Taylor; 16.07.2018
comment
@KevinTaylor Да, в этом случае вам, возможно, придется погрузиться в какой-нибудь Javascript или найти сервис, который свяжет с ним листы Google и позволит вам встроить динамический график из этого сервиса. - person tec4; 17.07.2018