[HN Gopher] The top layer: a solution to z-index:10000
       ___________________________________________________________________
        
       The top layer: a solution to z-index:10000
        
       Author : feross
       Score  : 74 points
       Date   : 2022-08-22 16:17 UTC (3 days ago)
        
 (HTM) web link (developer.chrome.com)
 (TXT) w3m dump (developer.chrome.com)
        
       | pupppet wrote:
       | 2 minutes after release- where's the top-top layer option.
        
       | rafaelturk wrote:
       | I'm still trying to grasp the real use of this.. IMO Looks like a
       | bad solution for a problem that wasn't really that big
        
         | dangrossman wrote:
         | Small businesses build their websites by setting up on a
         | platform like Shopify or Squarespace. They use a template and
         | fill in the content. They add functionality to the site, like
         | an email opt-in, a "free shipping if you order over $50" bar at
         | the top of the page, a "contact us" button floating at the
         | bottom, a bunch of social media icons floating on the side...
         | via plug-ins/apps/scripts. They don't ever touch code. All
         | those plug-ins/apps/scripts that provide this functionality to
         | non-technical website owners as a service have no idea what the
         | webpage DOM will look like, how it's coded, what other scripts
         | you're loading on the page. They end up fighting to be on top
         | with z-indexes, and that's how you end up with the website's
         | main navigation being on top of instead of behind a modal
         | dialog like a popup contact form, when the site owner wants it
         | to be behind. This "top layer" means the stuff that isn't part
         | of the page and should always be above the page can really be
         | on top.
        
         | jraph wrote:
         | Obviously a clever act of resistance within the Chrome team,
         | providing a fantastic crap-blocking tool to which crap will be
         | registered willingly.
         | 
         | "outside of the document flow": that can't be clearer. It's
         | almost imprudent.
        
       | jraph wrote:
       | Neat. Yes please. The Web becomes usable again just by blocking
       | the top layer.
        
         | draw_down wrote:
         | Wow, that would be great actually. Right now heuristics to
         | block "please sign up for the newsletter" dialogs is difficult
         | to do. But hopefully in the future we can just selectively
         | allow access to top layer for certain domains.
        
         | recursive wrote:
         | Except if that happened, they just wouldn't use it.
        
           | rekoil wrote:
           | They don't care about the 1% of users who will figure this
           | out.
        
         | t0mas88 wrote:
         | Indeed, this is great. All newsletter popups, cookie popups,
         | "are you sure you want to leave" popups, give us feedback
         | popups... They will all go on the top layer so your adblocker
         | could hide it all at once.
        
           | enbugger wrote:
           | That is the reason why the top layer will not be chosen
        
       | bhaney wrote:
       | This feels like the same kind of kludge as "!important" and will
       | probably be similarly abused.
        
         | RunSet wrote:
         | I am beginning to think that perhaps the world's largest
         | advertising corporation should not be trusted with developing
         | the leading web browser.
        
           | blowski wrote:
           | Beginning?
        
             | a1369209993 wrote:
             | Some people are slow on the uptake. Better late than never,
             | though.
        
       | [deleted]
        
       | bastawhiz wrote:
       | Unfortunately, you can't practically use this today because it
       | has only very recently been added to Safari (March 2022). I guess
       | something to look forward to in two to three years.
        
       | danjc wrote:
       | This amp goes to 11 (https://youtu.be/KOO5S4vxi0o)
        
       | jaywalk wrote:
       | The blog post keeps mentioning that you "promote" things to the
       | top layer... but how do you do that? I see absolutely nothing in
       | the HTML, CSS or JS of the examples in the post that references
       | anything new.
       | 
       | Is this just a new way the browser displays the <dialog> element
       | exclusively? I'm pretty confused.
        
         | ijidak wrote:
         | Exact same question. I'm glad I'm not alone.
        
         | mhink wrote:
         | This post is sort of an introduction to a topic that has
         | already existed (in a low-key sort of way) for some time. I'll
         | grant that the article is a little unclear when it comes to
         | getting to the point, but maybe this'll help:
         | 
         | The CSS2.1 spec [1] describes how stacking contexts work when
         | painting the browser window. Traditionally, our mechanism for
         | interacting with an element's stacking context has been more or
         | less exclusively to set its z-index.
         | 
         | The Fullscreen API spec [2] introduces a new stacking context
         | called the "top layer", which has some unique properties. Most
         | notably, things rendered in the "top layer" are always rendered
         | on top of everything else, _regardless of z-index_. There is
         | exactly one top layer per document.
         | 
         | Parts of this spec also describe operations which can add and
         | remove elements from the top layer. For example, the
         | "fullscreen an element" operation adds it to the document's top
         | layer. [3] This operation is invoked as part of the steps taken
         | when a developer calls `requestFullscreen()` on a DOM element
         | [4].
         | 
         | Now, the `<dialog>` element as specified in the latest HTML
         | spec [5] also interacts with the page's top layer. When you
         | call `.showModal()` on a dialog element, it gets added to the
         | document's top layer. Note that although this is a completely
         | different API, the commonality here is that we're also
         | interacting with the top layer by adding and removing elements
         | from it.
         | 
         | The article also references some ongoing discussion [6] on a
         | possible "popup" API which would also interact with the top
         | layer, and which would be used for implementing various
         | controls such as datepickers and dropdown lists.
         | 
         | Hope that helps!
         | 
         | 1: https://www.w3.org/TR/CSS2/zindex.html
         | 
         | 2: https://fullscreen.spec.whatwg.org/
         | 
         | 3: https://fullscreen.spec.whatwg.org/#fullscreen-an-element
         | 
         | 4: https://developer.mozilla.org/en-
         | US/docs/Web/API/Element/req...
         | 
         | 5: https://html.spec.whatwg.org/multipage/interactive-
         | elements....
         | 
         | 6: https://open-ui.org/components/popup.research.explainer/
        
       | aargh_aargh wrote:
       | But why? And is this a new thing? Or an existing thing gaining
       | visibility in devtools?
        
         | rafaelturk wrote:
         | yeah.. why?
        
         | moralestapia wrote:
         | Someone at Google had to justify its 6 figure salary. Plus s/he
         | probably made a point about how this will ensure modal ads
         | coming on top of everything else.
        
           | immibis wrote:
           | You joke but I've read this is literally how Google's
           | internal politics work.
        
         | [deleted]
        
       | zerocrates wrote:
       | I'm not saying they haven't earned this kind of treatment
       | necessarily, but it is a little exhausting how much negativity
       | and assumption of bad faith there is here in the commentary on
       | more or less everything Google does. This even is just an
       | explainer of a concept that's implemented by all the vendors, and
       | as far as I know isn't something Google has railroaded.
        
       | kingo55 wrote:
       | Wait till we need to place elements higher than on the top layer.
       | This will surely be abused by plugins.
        
         | immibis wrote:
         | I thought we went over this almost two decades ago.
         | http://bytepointer.com/resources/old_new_thing/20050607_141_...
        
         | notriddle wrote:
         | 1. This is straight up <https://devblogs.microsoft.com/oldnewth
         | ing/20110310-00/?p=11...> and <https://devblogs.microsoft.com/o
         | ldnewthing/20050607-00/?p=35...>. Since the Chrome team
         | probably have at least one team member who reads that blog,
         | they'll probably do the same thing and make this the "the buck
         | stops here" rule for anything that doesn't have special
         | privileges, like the browser itself or extensions.
         | 
         | 2. There should be a webext-exclusive API for placing items
         | above the top layer.
        
           | immibis wrote:
           | I suggest using this archive: http://bytepointer.com/resource
           | s/old_new_thing/20050607_141_... because
           | devblogs.microsoft.com has repeatedly deleted all the
           | comments and broken links and will do so again.
        
           | jasonjayr wrote:
           | From the oldnewthing blog:
           | 
           | > And it'll try something nastier, like enumerating all the
           | processes on the system, attaching to each one with debug
           | privilege, and suspending all the threads.
           | 
           | This is like playing corewars with Windows desktop software
           | :)
           | 
           | > "Note to self: Do not get into a walls-and-ladders contest
           | with Raymond."
           | 
           | Don't play with the person who knows all the lower levels :)
        
           | [deleted]
        
           | dataflow wrote:
           | The problem with those blog posts is that they apply just as
           | equally well to the existing "topmost" flag as they do to the
           | hypothetical "super topmost" flags. The answer to "what if
           | two programs have the topmost flag set?" wasn't "you violate
           | the laws of metaphysics", it was "well then they order
           | relative to each other the usual way". The same thing would
           | presumably apply for even higher-level topmost flags; it's
           | just a hierarchical ordering mechanism, which is in no way
           | logically inconsistent as Raymond makes them appear.
           | 
           | Moreover, Windows literally added support for the "even more
           | topmost" feature later - they're called "bands", and
           | supported by CreateWindowInBand(), except IIRC Microsoft
           | later restricted support for that function to its own signed
           | binaries, presumably to prevent vendors from abusing it.
           | Needless to say, the addition of that function didn't violate
           | the accepted rules of metaphysics.
        
         | amluto wrote:
         | top-layer-index: 1 will be the default, and on top of that will
         | be top-layer-index: 2
        
           | mattnewton wrote:
           | .futureproofHeader {
           | 
           | z-index: 999 !important; top-layer: 999 !important; -webKit-
           | actually-paint-me-last: true !inportant;
        
             | kingo55 wrote:
             | .futureproofHeaderMax { z-index: 10000 !important; top-
             | layer: 10000 !important; -webKit-actually-paint-me-last:
             | true !important; -webkit-no-backsies: true !important;}
        
           | snoopy_telex wrote:
           | So last created layer wins the display? or can you indicate
           | priority via css?
        
       | gabereiser wrote:
       | Yey! Now I can dismiss more notifications and adverts to
       | subscribe to newsletters on every site I visit. Race to
       | z-index:10001 has begun.
        
       | eurasiantiger wrote:
       | "z-index: 10000" is a solution employed by people who have no
       | idea what a stacking context is, and, consequently, do not know
       | that one can define their own "top layer" and have z-indexes
       | inside that work completely separate from the rest of the
       | document.
       | 
       | Just set "position: relative" on an element and it will start a
       | new stacking context, and stack it within the underlying context.
       | It's like having a card in a card stack be another stack of
       | cards.
        
         | cyral wrote:
         | I don't blame them when the rules for what creates a stacking
         | context look like this: https://developer.mozilla.org/en-
         | US/docs/Web/CSS/CSS_Positio...
        
       | robocat wrote:
       | I always wanted a relative z-index.
       | 
       | Example:                 <year dropdown> over <date picker> over
       | <modal form> over <desktop style app>
       | 
       | A complex "desktop style" UI, that shows a modal form over it,
       | and the modal form contains a custom date input component. Click
       | the date input and a custom date entry pop up component is drawn
       | above the modal form to pick the date. On the custom date entry
       | pop up is a year picker, which you click and a custom year
       | dropdown is shown. This was an actual example from my past (I'm
       | not saying it couldn't have been done better, but this was before
       | there were many better ways to do it). Using absolute z-index
       | required complex coordination between components.
       | 
       | The top-layer at least solves the problem of covering the
       | viewport and providing a backdrop (10 years ago was difficult to
       | do reliably). Although I can think of other issues one still
       | needs to solve: disabling inputs and events behind "modal" pop
       | up, disabling iPad background scrolling, must be accessibility,
       | can need multiple layers of popups e.g. loading spinner, problem
       | of tab key handling, et cetera.
        
         | marcosdumay wrote:
         | I believe CSS has an option that you set to make all z-indexes
         | relative to the element. Making the page hierarchical.
         | 
         | It's not exactly what you asked for, but it does void the need
         | to coordinate between too many components.
        
       | HaNdTriX wrote:
       | Anyone ranting about this feature, has ever implemented an aria
       | compliant website?
        
       | dreadlordbone wrote:
       | How is this triggered? showModal() on an element? Or is it using
       | this: https://developer.mozilla.org/en-
       | US/docs/Web/API/Element/req...
       | 
       | Oh it's a feature of the <dialog> element I guess
        
       | coldtea wrote:
       | The "top layer" as a solution to the z-index: 10000 problem,
       | sounds like "this goes to 11" as the solution to having a bigger
       | guitar amp output...
        
         | deathanatos wrote:
         | I'm a dancer. "Take it from the top" means to start a run
         | through of the current piece from the beginning.
         | 
         | Except ... we were practicing a section of a piece. And then we
         | started digging into the details on a very specific portion of
         | footwork in the middle of that section. And our choreographer,
         | instead of saying "start from the section", said, "start from
         | the top". And humans being what they are, we all _understood_ ,
         | somehow, and the right thing was done without complaint.
         | 
         | But then came the need to start from the _beginning_ , at which
         | point she now had to differentiate from what she had been
         | calling (erroneously) "top", and uttered "start from the top
         | top". Some amount of playful joshing followed ... and then the
         | term _stuck_.
        
       ___________________________________________________________________
       (page generated 2022-08-25 23:00 UTC)