Ширина виджета HTML/CSS для Twitter
Код, который Twitter вставляет в HTML, выглядит следующим образом:
<a class="twitter-timeline" href="https://twitter.com/username" data-widget-id="248169276782018560">Tweets by @username</a>
<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="//platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>
Они позволяют вам установить высоту, которую я установил на 600. При размещении на моем сайте я получаю это (при просмотре источника):
<iframe id="twitter-widget-6" classname="twitter-timeline twitter-timeline-rendered" scrolling="no" frameborder="0" style="border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; " width="220" height="600"></iframe>
Ширина 220 - это то, что меня убивает. Я хочу, чтобы ширина была полной шириной контейнера, что составляет 100% (для мобильного сайта). В настоящее время ширина 220 немного превышает половину страницы и отображает ужасную полосу прокрутки.
Итак, почему он устанавливает ширину в 220, и как я могу заставить его расширяться до его родительской ширины?
14 ответов
Я использую адаптивную тему, и этот код CSS работает нормально. Спасибо Хьюстер.
#twitter-widget-0 {
width: 100% !important;
}
Twitter позволяет настраивать ширину и высоту виджета временной шкалы с помощью атрибутов ширины и высоты HTML, НО минимальная ширина, которую они принимают, 220 pixels
ПРИМЕР: width="220"
, height="350"
Со страницы разработчиков Twitters: минимальная ширина временной шкалы составляет 220 пикселей, а максимальная - 520 пикселей. Минимальная высота 350px.
Вы можете изменить ширину виджета, установив его значение в определении класса "twitter-timeline", как упомянуто здесь:
https://dev.twitter.com/docs/embedded-timelines
Например, виджет временной шкалы Twitter с шириной 280 и высотой 300 выглядит примерно так:
<a class="twitter-timeline" width="280" height="300" href="https://twitter.com/YOURTWITTERUSERNAMEHERE" data-widget-id="YOURWIDGETIDHERE">Tweets by @YOURTWITTERUSERNAMEHERE</a>
<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="//platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>
Если мы разместим ниже CSS, то мы можем установить ширину виджета в соответствии с требованием.
<style type="text/css"> iframe[id^='twitter-widget-']{ width:100%;} </style>
#twitter-widget-6 {
width:600px;
}
Вышеуказанное работает, я предполагаю, что числа соответствуют тому, сколько виджетов вы создали. Является ли ширина единственной вещью, которую мы можем изменить, а как насчет шрифтов, я не могу изменить это? Виджет Твиттера настолько уродлив, что трудно заставить его сидеть в любом макете.
Если вы просто используете
#twitter-widget-0 {
width: 100% !important;
}
это будет работать, но будет отключено на устройствах iOS (еще не тестировалось на Android). Чтобы это исправить, вам нужно добавить ширину и высоту в тэг Twitter-timeline следующим образом:
<a class="twitter-timeline" width="280" height="300" href="https://twitter.com/YOURTWITTERUSERNAMEHERE" data-widget-id="YOURWIDGETIDHERE">Tweets by @YOURTWITTERUSERNAMEHERE</a>
Я перепробовал все приведенные выше ответы, но не повезло,
Так реализовал ниже сам код и работал на меня
<script type="text/javascript">
$(window).on('load', function () {
$('iframe[id^=twitter-widget-]').each(function () {
var head = $(this).contents().find('head');
if (head.length) {
head.append('<style>.timeline { max-width: 100% !important; width: 100% !important; } .timeline .stream { max-width: none !important; width: 100% !important; }</style>');
}
$('#twitter-widget-0').append($('<div class=timeline>'));
})
});
</script>
Включают
Данные ширина ="100%"в якорных тегах. Это работает для меня.
Мне нужно было использовать класс twitter-timeline-render вместо id #twitter-widget-0. Таким образом, виджет изменяется после рендеринга.
.twitter-timeline-rendered {
width: 100% !important;
}
С недавним обновлением (или сбой) твиттер заставил все виджеты каналов автоматически отображать изображения при загрузке, независимо от того, какие параметры установлены в настройках твиттера.
Теперь я использую их собственную ленту виджетов на html-сайте и хочу отключить загрузку изображений. Я не возражаю против того, чтобы начинать все сначала, но кто-нибудь может посоветовать мне, где я могу найти настраиваемый твиттер в формате HTML и JS, который не будет включать изображения.
Вот как я это сделал, используя почти ту же логику, которую использовал Chandrakant для вставки стиля в iframe.
Прежде всего: добавьте твиттер-виджет правильно
<script type="text/javascript">
// https://dev.twitter.com/web/javascript/loading
window.twttr = (function(d, s, id) {
var js, fjs = d.getElementsByTagName(s)[0],
t = window.twttr || {};
if (d.getElementById(id)) return t;
js = d.createElement(s);
js.id = id;
js.src = "https://platform.twitter.com/widgets.js";
js.async = true;
fjs.parentNode.insertBefore(js, fjs);
t._e = [];
t.ready = function(f) {
t._e.push(f);
};
return t;
}(document, "script", "twitter-wjs"));
</script>
Теперь у вас есть хороший массив window.twttr._e, который может содержать все, что будет работать после загрузки twitter widget.js.
Обратите внимание, что я добавил js.async = true;
Теперь вы можете в том же сценарии или потом сделать:
<script type=text/javascript">
// https://dev.twitter.com/web/javascript/events
window.twttr.events.bind('loaded', function (e) {
e.widgets.forEach(function (widget) {
// js to support twitter 100% if present
$(widget).contents().find('head').append('<style>.timeline { max-width: 100% !important; width: 100% !important; }</style>');
});
});
</script>
Обратите внимание, что я использовал способ jquery для добавления стиля в конец содержимого заголовка iframe. Вы можете сделать это классическим способом, но это дольше.
<script type="text/javascript">
// ...
widget.contentDocument.getElementsByTagName('head')[0]...
// ...
</script>
Это работает для меня:
.twitter-timeline {
height: 180px !important;
width: 100% !important;
}