diff --git a/src/panels/lovelace/cards/hui-iframe-card.js b/src/panels/lovelace/cards/hui-iframe-card.js
new file mode 100644
index 0000000000..a3260d8433
--- /dev/null
+++ b/src/panels/lovelace/cards/hui-iframe-card.js
@@ -0,0 +1,71 @@
+import { html } from '@polymer/polymer/lib/utils/html-tag.js';
+import { PolymerElement } from '@polymer/polymer/polymer-element.js';
+
+class HuiIframeCard extends PolymerElement {
+ static get properties() {
+ return {
+ config: {
+ type: Object,
+ observer: '_configChanged'
+ }
+ };
+ }
+
+ static get template() {
+ return html`
+
+
+
+
+
+
+
+
+
+ `;
+ }
+
+ _computeTitle(config) {
+ if (!config.url) return 'Error: URL not configured';
+ return config.title || '';
+ }
+
+ _configChanged(config) {
+ this.shadowRoot.querySelector('.wrapper').style.paddingTop = config.aspect_ratio || '50%';
+ }
+
+ getCardSize() {
+ return 1 + (this.offsetHeight / 50);
+ }
+}
+customElements.define('hui-iframe-card', HuiIframeCard);
diff --git a/src/panels/lovelace/common/compute-card-element.js b/src/panels/lovelace/common/compute-card-element.js
index da0caab0ac..722c71cd61 100644
--- a/src/panels/lovelace/common/compute-card-element.js
+++ b/src/panels/lovelace/common/compute-card-element.js
@@ -10,6 +10,7 @@ import '../cards/hui-picture-glance-card';
import '../cards/hui-plant-status-card.js';
import '../cards/hui-weather-forecast-card';
import '../cards/hui-error-card.js';
+import '../cards/hui-iframe-card.js';
const CARD_TYPES = [
'camera-preview',
@@ -18,6 +19,7 @@ const CARD_TYPES = [
'entity-picture',
'glance',
'history-graph',
+ 'iframe',
'markdown',
'media-control',
'picture-glance',