Я хотел бы использовать медиа-запросы для изменения размера элементов в зависимости от размера div
элемента, в котором они находятся. Я не могу использовать размер экрана, поскольку div
он используется просто как виджет на веб-странице, и его размер может варьироваться.
Обновить
Похоже, что над этим сейчас ведется работа: https://github.com/ResponsiveImagesCG/cq-demos
css
media-queries
Yazz.com
источник
источник
Ответы:
Нет, медиазапросы не предназначены для работы на основе элементов на странице. Они предназначены для работы на основе устройств или типов носителей ( и, следовательно , почему они называются медиа - запросы).
width
,height
, И другие средства измерения на основе имеет все относятся к размерам либо видового экрана или экрана устройства в экране на основе средств массовой информации. Их нельзя использовать для ссылки на определенный элемент на странице.Если вам нужно применять стили в зависимости от размера определенного
div
элемента на вашей странице, вам придется использовать JavaScript, чтобы наблюдать изменения в размере этогоdiv
элемента вместо медиа-запросов.источник
@element
запросы. В W3C есть хорошая документация о рифме / причине@media
запросов: w3.org/TR/css3-mediaqueries/#width (по этой ссылке вы переходите к разделу, в котором обсуждаются widths - width типа media, а не элементы, содержащиеся в нем)Я только что создал javascript shim для достижения этой цели. Посмотрите, если хотите, это подтверждение концепции, но будьте осторожны: это ранняя версия, и она все еще нуждается в доработке.
https://github.com/marcj/css-element-queries
источник
min-width
обновить атрибуту; мне нужно вручную написать список css-класса, отмеченные элементы, включенные дляmin-width
обновления?Медиа-запрос внутри iframe может функционировать как запрос элемента. Я успешно реализовал это. Идея пришла из недавнего поста об Адаптивной рекламе от Zurb. Нет Javascript!
источник
В настоящее время это невозможно только с помощью CSS, как @BoltClock написал в принятом ответе, но вы можете обойти это, используя JavaScript.
Я создал запрос контейнера (aka element query) prolyfill, чтобы решить эту проблему. Он работает немного иначе, чем другие скрипты, поэтому вам не нужно редактировать HTML-код ваших элементов. Все, что вам нужно сделать, это включить скрипт и использовать его в вашем CSS следующим образом:
https://github.com/ausi/cq-prolyfill
источник
Я столкнулся с той же проблемой пару лет назад и финансировал разработку плагина, чтобы помочь мне в моей работе. Я выпустил плагин с открытым исходным кодом, чтобы другие тоже могли его использовать, и вы можете скачать его на Github: https://github.com/eqcss/eqcss
Существует несколько способов применения различных адаптивных стилей в зависимости от того, что мы можем знать об элементе на странице. Вот несколько запросов к элементам, которые плагин EQCSS позволит вам написать в CSS:
Итак, какие условия поддерживаются для адаптивных стилей с EQCSS?
Весовые Запросы
px
%
px
%
Высота запросов
px
%
px
%
Количество запросов
Специальные селекторы
В запросах элементов EQCSS вы также можете использовать три специальных селектора, которые позволяют более конкретно применять ваши стили:
$this
(элемент (ы), соответствующий запросу)$parent
(родительский элемент (ы) элемента (ов), соответствующего запросу)$root
(корневой элемент документа,<html>
)Запросы элементов позволяют вам составить свой макет из индивидуально реагирующих дизайнерских модулей, каждый из которых имеет немного «самосознания» о том, как они отображаются на странице.
С помощью EQCSS вы можете создать один виджет, который будет хорошо выглядеть от ширины 150 пикселей до ширины до 1000 пикселей, а затем вы можете уверенно поместить этот виджет в любую боковую панель на любой странице, используя любой шаблон (на любом сайте), и
источник
С точки зрения макета, это возможно с использованием современных методов.
Это сделано (я полагаю) Хейдоном Пикерингом. Он детализирует процесс здесь: http://www.heydonworks.com/article/the-flexbox-holy-albatross
Крис Койер поднимает его и работает с демонстрацией здесь: https://css-tricks.com/putting-the-flexbox-albatross-to-real-use/
Чтобы повторить проблему, ниже мы видим 3 одинаковых компонента, каждый из которых состоит из трех оранжевых элементов с метками
a
,b
иc
.Блоки вторых двух отображаются вертикально, потому что они ограничены горизонтальным пространством, тогда как верхние компоненты 3 блока расположены горизонтально.
flex-basis
Для создания этого эффекта используются свойство CSS и переменные CSS.демонстрация
Статья Хейдона состоит из 1000 слов, подробно объясняющих ее, и я очень рекомендую ее прочитать.
источник
Вопрос очень расплывчатый. Как говорит BoltClock, медиазапросы знают только размеры устройства. Однако вы можете использовать медиазапросы в сочетании с селекторами по убыванию для выполнения настроек.
Единственное другое решение требует JS.
источник
Единственный способ, которым я могу думать, что вы можете выполнить то, что вы хотите чисто с помощью CSS, - это использовать контейнер для жидкости для вашего виджета. Если ширина вашего контейнера составляет процент от экрана, вы можете использовать медиазапросы для стилизации в зависимости от ширины вашего контейнера, так как теперь вы будете знать для каждого размера экрана, каковы размеры вашего контейнера. Например, допустим, вы решили сделать свой контейнер 50% ширины экрана. Тогда для ширины экрана 1200 пикселей вы знаете, что ваш контейнер составляет 600 пикселей
источник
Я также думал о медиа-запросах, но потом я нашел это:
Просто создайте оболочку
<div>
с процентным значением дляpadding-bottom
, например так:В результате получится
<div>
высота, равная 75% ширины контейнера (соотношение сторон 4: 3).Этот метод также может сочетаться с медиа-запросами и некоторыми специальными знаниями о макете страницы для еще более детального контроля.
Этого достаточно для моих нужд. Что может быть достаточно для ваших нужд.
источник
Вы можете использовать ResizeObserver API. Это все еще в первые дни, так что он еще не поддерживается всеми браузерами (но есть несколько полифилов, которые могут помочь вам в этом).
По сути, этот API позволяет вам присоединить прослушиватель событий к изменению размера элемента DOM.
Демо 1 - Демо 2
источник
Для моего я сделал это, установив максимальную ширину div, следовательно, для маленького виджета это не будет затронуто, а большой виджет будет изменен из-за стиля max-width.
источник
.widget
это просто образец в качестве класса для div виджета.