Spec-Zone.ru › Web APIs

CSSContainerRule

Базовая версия 2023
Новая функция

С февраля 2023 года эта функция работает на последних версиях устройств и браузеров. Возможно, эта функция не будет работать на старых устройствах или браузерах.

  • Подробнее
  • Полная совместимость
  • Отправить отзыв

Интерфейс CSSContainerRule представляет собой отдельное правило CSS @container.

Объект этого типа может использоваться для получения условий запроса для @container, а также имени контейнера, если оно определено. Обратите внимание, что имя контейнера и запрос вместе определяют «текст условия», который можно получить, используя CSSConditionRule.conditionText.

CSSRule CSSGroupingRule CSSConditionRule CSSContainerRule

Свойства экземпляра

Наследует свойства от своих предков CSSConditionRule, CSSGroupingRule и CSSRule.

CSSContainerRule.containerName Только для чтения

Возвращает строку, представляющую имя @container, или пустую строку.

CSSContainerRule.containerQuery Только для чтения

Возвращает строку, представляющую набор функций или «условий контейнера», которые оцениваются для определения, применяются ли стили в связанном @container.

Методы экземпляра

Нет специфических методов; наследует методы от своих предков CSSConditionRule, CSSGroupingRule и CSSRule.

Примеры

Правило контейнера без имени

В примере ниже определено правило @container без имени и отображаются свойства связанного CSSContainerRule. CSS идентичен примеру @container Настройка стилей на основе размера контейнера.

Первая часть кода просто создает список для регистрации свойств правила контейнера, а также JavaScript-метод log() для упрощения добавления свойств.

<div id="log">
  <h2>Log</h2>
  <ul></ul>
  <hr />
</div>
// Store reference to log list
const logList = document.querySelector("#log ul");
// Function to log data from underlying source
function log(result) {
  const listItem = document.createElement("li");
  listItem.textContent = result;
  logList.appendChild(listItem);
}

Затем мы определяем HTML для card (<div>) внутри post.

<div class="post">
  <div class="card">
    <h2>Card title</h2>
    <p>Card content</p>
  </div>
</div>

CSS для примера показан ниже. Как описано в соответствующем примере @container, CSS для элемента контейнера задаёт тип контейнера. Затем @container применяет новую ширину, размер шрифта и цвет фона к карточке, если ширина меньше 650px.

<style id="example-styles">
  /* A container context based on inline size */
  .post {
    container-type: inline-size;
  }

  /* Apply styles if the container is narrower than 650px */
  @container (width < 650px) {
    .card {
      width: 50%;
      background-color: gray;
      font-size: 1em;
    }
  }
</style>

Приведенный ниже код получает HTMLStyleElement, связанный с примером по его id, а затем использует его свойство sheet для получения StyleSheet. Из StyleSheet мы получаем набор cssRules, добавленных в лист. Так как мы добавили @container в качестве второго правила выше, мы можем получить связанное CSSContainerRule, используя второй элемент (с индексом «1») в cssRules. Наконец, мы регистрируем свойства containerName, containerQuery и conditionText (унаследованные).

const exampleStylesheet = document.getElementById("example-styles").sheet;
const exampleRules = exampleStylesheet.cssRules;
const containerRule = exampleRules[1]; // a CSSContainerRule representing the container rule.
log(`CSSContainerRule.containerName: "${containerRule.containerName}"`);
log(`CSSContainerRule.containerQuery: "${containerRule.containerQuery}"`);
log(`CSSContainerRule.conditionText: "${containerRule.conditionText}"`);

Примечание: Стиль для этого примера определён в элементе HTML style со значением id, чтобы код легко мог найти соответствующий лист. Вы также можете найти нужные листы для каждого примера, проиндексировав по длине (например, document.styleSheets[document.styleSheets.length-1]), но это усложняет определение правильного листа для каждого примера.

Выходной код примера показан ниже. В разделе регистрации отображается containerName, которое равно пустой строке, так как имя не определено. Строки containerQuery и conditionText также регистрируются и имеют одинаковое значение, поскольку имя не определено. Карточка должна изменять цвет фона по мере изменения ширины страницы через 650px.

Правило контейнера с именем

В примере ниже определено правило @container с именем и отображаются свойства связанного CSSContainerRule. CSS очень похож на пример @container Создание контекстов контейнеров с именами.

Сначала мы определяем HTML для card (<div>) внутри post (в примере код регистрации не показан, так как он такой же, как в предыдущем примере).

<div class="post">
  <div class="card">
    <h2>Card title</h2>
    <p>Card content</p>
  </div>
</div>

Как описано в @container, CSS для элемента контейнера задаёт тип контейнера и может также задавать имя контейнера. Карточка имеет стандартный размер шрифта, который переопределяется для @container с именем sidebar при минимальной ширине больше 700px.

<style id="example-styles">
  .post {
    container-type: inline-size;
    container-name: sidebar;
  }

  /* Default heading styles for the card title */
  .card h2 {
    font-size: 1em;
  }

  @container sidebar (min-width: 700px) {
    .card {
      font-size: 2em;
    }
  }
</style>

Код для получения листа и правил почти идентичен предыдущему примеру. Единственное отличие в том, что в этом примере у нас три правила CSS, поэтому для получения связанного CSSContainerRule мы получаем третий элемент в cssRules.

const exampleStylesheet = document.getElementById("example-styles").sheet;
const exampleRules = exampleStylesheet.cssRules;
const containerRule = exampleRules[2]; // a CSSContainerRule representing the container rule.
log(`CSSContainerRule.containerName: "${containerRule.containerName}"`);
log(`CSSContainerRule.containerQuery: "${containerRule.containerQuery}"`);
log(`CSSContainerRule.conditionText: "${containerRule.conditionText}"`);

В выходном коде примера ниже отображаются строки containerName и containerQuery. Строка conditionText также регистрируется и показывает комбинацию этих двух строк. Размер заголовка в разделе карточки должен удваиваться по мере превышения ширины страницы 700px.

Спецификации

Спецификация
CSS Conditional Rules Module Level 5
# the-csscontainerrule-interface

Совместимость с браузерами

Рабочие столы Мобильные устройства
Chrome Edge Firefox Opera Safari Chrome Android Firefox для Android Opera Android Safari на iOS Samsung Internet WebView Android
CSSContainerRule 105 105 110 91 16 105 110 72 16 20.0 105
containerName 111 111 110 97 17 111 110 75 17 22.0 111
containerQuery 111 111 110 97 17 111 110 75 17 22.0 111

См. также

  • CSS container-name, container-type, и container сокращённые свойства
  • Модуль CSS-содержимого
  • Запросы по контейнерам
  • Использование запросов к размеру и стилю контейнера

© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/CSSContainerRule

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API