tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

position-try-tree-scoped.html (4821B)


      1 <!DOCTYPE html>
      2 <title>CSS Anchor Positioning Test: @position-try - tree scoped names</title>
      3 <link rel="help" href="https://drafts.csswg.org/css-anchor-1/#fallback-rule">
      4 <link rel="help" href="https://drafts.csswg.org/css-scoping/#shadow-names">
      5 <script src="/resources/testharness.js"></script>
      6 <script src="/resources/testharnessreport.js"></script>
      7 
      8 <style>
      9  body { margin: 0; }
     10 
     11  @position-try --doc {
     12    left: 100px;
     13  }
     14 
     15  .abs {
     16    width: 100px;
     17    position: absolute;
     18    left: 999999px; /* force fallback */
     19  }
     20 
     21  #doc_pf_doc { position-try-fallbacks: --doc; }
     22  #doc_pf_outer { position-try-fallbacks: --outer; }
     23  #doc_pf_inner { position-try-fallbacks: --inner; }
     24 </style>
     25 
     26 <div id="doc_pf_doc" class="abs"></div>
     27 <div id="doc_pf_outer" class="abs"></div>
     28 <div id="doc_pf_inner" class="abs"></div>
     29 <div id="outer_host">
     30  <template shadowrootmode="open">
     31    <style>
     32      @position-try --outer {
     33        left: 200px;
     34      }
     35 
     36      .abs {
     37        position: absolute;
     38        left: 999999px; /* force fallback */
     39      }
     40 
     41      #outer_pf_doc { position-try-fallbacks: --doc; }
     42      #outer_pf_outer { position-try-fallbacks: --outer; }
     43      #outer_pf_inner { position-try-fallbacks: --inner; }
     44    </style>
     45    <div id="outer_pf_doc" class="abs"></div>
     46    <div id="outer_pf_outer" class="abs"></div>
     47    <div id="outer_pf_inner" class="abs"></div>
     48    <div id="inner_host">
     49      <template shadowrootmode="open">
     50        <style>
     51          @position-try --inner {
     52            left: 300px;
     53          }
     54 
     55          .abs {
     56            position: absolute;
     57            left: 999999px; /* force fallback */
     58          }
     59 
     60          #inner_pf_doc { position-try-fallbacks: --doc; }
     61          #inner_pf_outer { position-try-fallbacks: --outer; }
     62          #inner_pf_inner { position-try-fallbacks: --inner; }
     63        </style>
     64        <div id="inner_pf_doc" class="abs"></div>
     65        <div id="inner_pf_outer" class="abs"></div>
     66        <div id="inner_pf_inner" class="abs"></div>
     67      </template>
     68    </div>
     69  </template>
     70 </div>
     71 
     72 
     73 <style>
     74  #host_slotted_part {
     75     width: 100px;
     76  }
     77  @position-try --host-slot-part {
     78    left: 1px;
     79  }
     80  #host_slotted_part::part(part) {
     81    position-try-fallbacks: --host-slot-part;
     82  }
     83 </style>
     84 <div id="host_slotted_part">
     85  <template shadowrootmode="open">
     86    <style>
     87      @position-try --host-slot-part {
     88        left: 2px;
     89      }
     90      ::slotted(#slotted), :host {
     91        position: absolute;
     92        left: 999999px; /* force fallback */
     93        position-try-fallbacks: --host-slot-part;
     94      }
     95      #part {
     96        position: absolute;
     97        left: 999999px; /* force fallback */
     98      }
     99    </style>
    100    <div id="part" part="part"></div>
    101    <slot></slot>
    102  </template>
    103  <div id="slotted"></div>
    104 </div>
    105 
    106 
    107 <script>
    108  test(() => {
    109    assert_equals(doc_pf_doc.offsetLeft, 100);
    110  }, "Document position-try-fallbacks matches @position-try in document scope");
    111 
    112  test(() => {
    113    assert_equals(doc_pf_outer.offsetLeft, 999999);
    114  }, "Document position-try-fallbacks does not match @position-try in #outer_host scope");
    115 
    116  test(() => {
    117    assert_equals(doc_pf_inner.offsetLeft, 999999);
    118  }, "Document position-try-fallbacks does not match @position-try in #inner_host scope");
    119 
    120  const outer_root = outer_host.shadowRoot;
    121  const inner_root = outer_root.querySelector("#inner_host").shadowRoot;
    122 
    123  test(() => {
    124    assert_equals(outer_root.querySelector("#outer_pf_doc").offsetLeft, 100);
    125  }, "Outer position-try-fallbacks matches @position-try in document scope");
    126 
    127  test(() => {
    128    assert_equals(outer_root.querySelector("#outer_pf_outer").offsetLeft, 200);
    129  }, "Outer position-try-fallbacks matches @position-try in #outer_host scope");
    130 
    131  test(() => {
    132    assert_equals(outer_root.querySelector("#outer_pf_inner").offsetLeft, 999999);
    133  }, "Outer position-try-fallbacks does not match @position-try in #inner_host scope");
    134 
    135  test(() => {
    136    assert_equals(inner_root.querySelector("#inner_pf_doc").offsetLeft, 100)
    137  }, "Inner position-try-fallbacks matches @position-try in document scope");
    138 
    139  test(() => {
    140    assert_equals(inner_root.querySelector("#inner_pf_outer").offsetLeft, 200);
    141  }, "Inner position-try-fallbacks matches @position-try in #outer_host scope");
    142 
    143  test(() => {
    144    assert_equals(inner_root.querySelector("#inner_pf_inner").offsetLeft, 300);
    145  }, "Inner position-try-fallbacks matches @position-try in #inner_host scope");
    146 
    147  test(() => {
    148    assert_equals(host_slotted_part.offsetLeft, 2);
    149  }, "@position-try from same scope as :host rule");
    150 
    151  test(() => {
    152    assert_equals(slotted.offsetLeft, 2);
    153  }, "@position-try from same scope as ::slotted() rule");
    154 
    155  test(() => {
    156    assert_equals(host_slotted_part.shadowRoot.querySelector("#part").offsetLeft, 1);
    157  }, "@position-try from same scope as ::part() rule");
    158 </script>