- From: Tab Atkins Jr. via GitHub <sysbot+gh@w3.org>
- Date: Tue, 01 Aug 2023 21:46:04 +0000
- To: public-css-archive@w3.org
Yup, `a p` is what you want, and you can use `:is()` as @Loirooriol said if you need to impose multiple ancestor conditions that aren't related to each other.
Note tho that your first example:
```
<div>
  <a href="http://example.org/">
    <p>I match
  </a>
</div>
```
won't match the selector because, due to the way HTML parsing is defined, inline elements are auto-closed by a `p` and then reopened inside of them. That is, the DOM structure produced by that markup is:
```
DIV
├ A href="http://example.org/"
└ P
  └ A href="http://example.org/"
    └#text: I match
```
(Your second example works as intended, because `div` does *not* have that special behavior. So it is able to nest inside the `a` without a problem, and then the `p` sees that it has a `div` parent and acts normally as well. HTML parsing has a lot of funky quirks that it's developed over the decades that HTML has been in use.)
This might be the source of your confusion!
-- 
GitHub Notification of comment by tabatkins
Please view or discuss this issue at https://github.com/w3c/csswg-drafts/issues/9130#issuecomment-1661143278 using your GitHub account
-- 
Sent via github-notify-ml as configured in https://github.com/w3c/github-notify-ml-config
Received on Tuesday, 1 August 2023 21:46:06 UTC