Подтвердить что ты не робот

Могу ли я сделать CSS: после псевдоэлемента добавить контент вне элемента?

Я хочу отформатировать цепочку ссылок, используя объект HTML » между соседними ссылками, поэтому он выглядит так:

home & raquo; о нас & raquo; история & raquo; этой страницы

Я добавил правило к моему CSS:

nav#breadcrumb-trail a:after {
    content: " » ";
}

но это добавляет сущность INSIDE к ссылке, а не за ее пределами - то есть я получаю следующее:

home & raquo; о нас & raquo; история & raquo; на этой странице

Неужели я неправильно понимаю поведение псевдоэлемента CSS :after? Как представляется, документация подразумевает, что указанный элемент после добавляет указанный элемент, а не добавляет его во внутреннюю часть контейнера элементов. Любые идеи?

4b9b3361

Ответ 1

Обычно вы кодируете эти меню как упорядоченные списки, так что имеет смысл делать что-то вроде этого:

#breadcrumb-trail ol { 
    list-style: none; 
    margin: 0;
    padding: 0; 
}

#breadcrumb-trail li { 
    display: inline; 
}

#breadcrumb-trail li:after { 
    content: ' » '; 
}

#breadcrumb-trail li:last-child:after { 
    content: none; 
}
<nav id="breadcrumb-trail">
    <h1>My Amazing Breadcrumb Menu</h1>
    <ol>
        <li><a href="">about</a></li>
        <li><a href="">fos</a></li>
    </ol>
</nav>

Ответ 2

spec говорит:

Как показывают их имена, псевдовые элементы: before и: after определяют местоположение содержимого до и после содержимого дерева элементов документа.

Обратите внимание на ключевую фразу в конце этого предложения, которая ссылается на внутренний контент (или внутренний текст). Таким образом, псевдоэлементы вставляются в начало конца в пределах указанных элементов content. Поэтому правая двойная угловая цитата вставляется после текста ваших гиперссылок, а не после гиперссылок.

Здесь представлено визуальное представление дерева элемента DOM для одной такой ссылки с обоими псевдоэлементами:

a
  a:before
  content
  a:after

Я предполагаю, что обходной способ этого поведения состоит в том, чтобы обернуть каждую ссылку в span, а затем применить стили к nav#breadcrumb-trail span:after, но это приведет к ненужной разметке... в любом случае стоит сделать что-то в этом роде.

Ответ 3

Учитывая гибкость и awesomeness CSS, он выглядит в значительной степени способным. Пробовал это в текущем Chrome, FF и IE, и он выполняет задание так же, как ожидалось, без необходимости добавления дополнительной разметки:

#box {
  width: 100px;
  height: 100px;
  background: #eee;
  position: relative;
}

#box:after {
  content: '...appended text outside box';
  position: absolute;
  margin-left: 100%;
  left: 0;
  width: 200px;
}
<div id="box">
  Some Box
</div>