W3docs

CSS-свойство outline

Свойство CSS outline — это сокращение для outline-width, outline-style, outline-color. Смотрите значения и примеры.

Outline — это линия, нарисованная вокруг элемента, сразу за краем его рамки. В отличие от border, outline не занимает место в потоке документа и одинакова со всех четырёх сторон — задать её отдельно для каждой стороны невозможно. На этой странице рассматривается сокращённое свойство outline, его отличия от border и его роль в обеспечении доступности для клавиатурных пользователей.

Свойство outline является сокращением и задаёт следующие полные свойства одним объявлением:

  • outline-width — толщина линии.
  • outline-style — стиль линии (solid, dashed, dotted, …). Обязателен для отображения outline.
  • outline-color — цвет линии.
  • outline-offset — отступ между outline и краем рамки. (Задаётся отдельно; не входит в сокращение outline.)

По умолчанию стиль outline равен none, поэтому одно лишь задание outline-color не даст эффекта — необходимо также указать стиль. Поскольку outline рисуется за пределами элемента и игнорируется блочной моделью, она никогда не сдвигает соседний контент и не изменяет размеры элемента в потоке.

Outline и border

Outline и border похожи внешне, но ведут себя по-разному:

  • Поток документа: border является частью блочной модели и сдвигает соседний контент; outline рисуется поверх и не занимает пространства.
  • Стороны: border можно стилизовать отдельно для каждой стороны (border-top, border-left, …); outline всегда одинакова со всех четырёх сторон.
  • Форма: в большинстве браузеров outline строго прямоугольна и не скругляется под воздействием border-radius, даже если border скруглена.
  • Положение: outline рисуется за пределами края border, поэтому при наличии обеих outline располагается снаружи border.
Начальное значениеmedium none currentcolor
Применяется кВсем элементам. Также применяется к ::first-letter.
НаследуетсяНет.
АнимируемоДа. Outline элемента поддаётся анимации.
ВерсияCSS2
DOM-синтаксисobject.style.outline = "#eee dashed 10px";

Синтаксис

CSS outline

outline: outline-width | outline-style | outline-color | outline-offset | initial | inherit;

Пример свойства outline:

Пример кода CSS outline

<!DOCTYPE html>
<html>
  <head>
    <title>Title of the document</title>
    <style>
      p.dotted {
        outline: dotted;
      }
      p.dashed {
        outline: dashed;
      }
    </style>
  </head>
  <body>
    <h2>Outline property example</h2>
    <p class="dotted">Lorem Ipsum is simply dummy text of the printing... </p>
    <p class="dashed">Lorem Ipsum is simply dummy text of the printing...</p>
  </body>
</html>

Результат

CSS outline и border вместе

В данном примере outline-style первого элемента — dotted, а второго — dashed.

В следующем примере у первого элемента нет border, у второго — есть. Обратите внимание, что outline второго элемента находится снаружи его border:

Пример свойства outline для элемента с border:

Пример кода CSS outline и border вместе

<!DOCTYPE html>
<html>
  <head>
    <title>Title of the document</title>
    <style>
      div.ex1 {
        outline-style: solid;
        outline-width: thick;
      }
      div.ex2 {
        border: 1px solid #fc7f01;
        outline-style: solid;
        outline-width: thick;
      }
    </style>
  </head>
  <body>
    <h2>Outline property example</h2>
    <div class="ex1">Lorem Ipsum is simply dummy text of the printing...</div>
    <br />
    <div class="ex2">Lorem Ipsum is simply dummy text of the printing...</div>
  </body>
</html>

В следующем примере outline находится снаружи border второго элемента.

Пример свойства outline-color вместе с outline-style:

Пример кода CSS outline с цветом

<!DOCTYPE html>
<html>
  <head>
    <title>Title of the document</title>
    <style>
      div.blue {
        outline-style: solid;
        outline-color: #1c87c9;
      }
      div.green {
        border: 1px solid black;
        outline-style: solid;
        outline-color: #8ebf42;
      }
    </style>
  </head>
  <body>
    <h2>Outline property example</h2>
    <div class="blue">Lorem Ipsum is simply dummy text of the printing...</div>
    <br />
    <div class="green">Lorem Ipsum is simply dummy text of the printing...</div>
  </body>
</html>

Отступ outline с помощью outline-offset

По умолчанию outline вплотную прилегает к краю border. Свойство outline-offset отодвигает её (или, при отрицательном значении, вдвигает внутрь). Это отдельное свойство, не входящее в сокращение outline:

button {
  outline: 2px solid #1c87c9;
  outline-offset: 4px; /* 4px gap between the border and the outline */
}

Outline и доступность с клавиатуры

Наиболее важное практическое применение outline — индикатор фокуса. Когда пользователь перемещается по странице с помощью клавиши Tab, браузер рисует outline по умолчанию вокруг сфокусированного элемента, чтобы было видно, где находится фокус. Удаление outline без замены — серьёзная проблема доступности:

/* Do NOT do this — keyboard users lose track of focus */
button:focus {
  outline: none;
}

Если стандартный focus ring не вписывается в дизайн, его следует переоформить, а не убирать:

button:focus-visible {
  outline: 2px solid #1c87c9;
  outline-offset: 2px;
}

Здесь используется состояние :focus в сочетании с современным псевдоклассом :focus-visible, который показывает outline только при взаимодействии с клавиатурой — таким образом клики мышью не вызывают появления кольца, а клавиатурные пользователи всегда видят, где находится фокус.

Значения

ЗначениеОписание
outline-widthОпределяет ширину outline.
outline-styleОпределяет стиль outline.
outline-colorЗадаёт цвет outline.
outline-offsetЗадаёт отступ outline от края border.
initialУстанавливает для свойства значение по умолчанию.
inheritНаследует свойство от родительского элемента.

Связанные свойства

  • outline-style — обязательный компонент стиля в сокращении.
  • outline-width — управляет толщиной outline.
  • outline-color — управляет цветом outline.
  • outline-offset — задаёт отступ outline от border.
  • border — аналог в блочной модели, влияющий на поток документа.

Практика

Практика
Что из следующего верно относительно CSS-свойства outline?
Что из следующего верно относительно CSS-свойства outline?
Was this page helpful?