Вы не можете использовать комбинатор для нацеливания псевдоэлемента относительно элементов, отличных от его генерирующего элемента.
Это потому, что они псевдоэлементы , а не фактические элементы, икомбинаторы работают только путем установления отношений между фактическими элементами.Псевдоэлемент, с другой стороны, может быть применен только к объекту селектора (самый правый составной селектор), и это происходит только после того, как сопоставление обработано на реальных элементах.Другими словами, сопоставление сначала выполняется так, как если бы псевдоэлемента там не было, затем псевдоэлемент, если он указан в селекторе, применяется к каждому совпадению.
В вашем коде следующееселектор:
a[href^="http"] img ~ :after
На самом деле не ищет псевдоэлемент :after
, который следует после img
в a
, даже если он выглядит так, поскольку оба они отображаются как дочерние элементыa
элемент.
Его можно переписать следующим образом:
a[href^="http"] img ~ *:after
Обратите внимание на селектор *
, который подразумевается.Подобно тому, как вы можете опустить *
до того, как будут подразумеваться любые другие простые селекторы, пропуск *
из псевдоэлемента также подразумевает его присутствие там.См. spec для деталей.
Теперь, даже если кажется, что *:after
должен все равно соответствовать a:after
(так как a
будет соответствовать *
), он все еще неработать таким образом.Если вы удалите псевдоэлемент :after
из селектора:
a[href^="http"] img ~ *
Вы заметите, что значение селектора полностью меняется:
Выберите любой элемент
который выглядит как следующий брат или сестра img
, который является потомком a
(чей href
начинается с "http").
Так как img
является последним дочерним элементом элемента a
в вашем HTML, нет следующих одноуровневых элементов для сопоставления, и поэтому псевдоэлементы :after
не могут быть сгенерированы.
В случае :before
или:after
псевдоэлемент, можно подумать о сопоставлении порождающего элемента псевдоэлемента относительно «родственного элемента» псевдоэлемента, но, как правильно указал OP, родительского селектора нет, поэтомуим тоже не повезло.