- From: Benjamin Poulain <benjamin@webkit.org>
- Date: Sat, 06 Dec 2014 13:49:07 -0800
- To: www-style@w3.org
It looks like you are trying to reinvent a very basic <dialog>: https://html.spec.whatwg.org/multipage/forms.html#the-dialog-element ? Benjamin On 12/6/14, 6:07 AM, Behrang Saeedzadeh wrote: > Hi, > > This is another attempt to hopefully start a dialog and discuss adding a > new type of rendering box, namely |overlay|. > > > <https://gist.github.com/behrangsa/c30034c07d7adeee934d#introduction>Introduction > > When building Web apps, every now and then we have to implement one or > more of these features: > > * Putting a semi-transparent |<div>| over an element to /disable/ it > and consequently prevent user from interacting with it. This > semi-transparent div's size and location should be kept in-sync with > the element at all times and in all media query breakpoints. > * In a site builder (e.g. Jetstrap <https://jetstrap.com/>, online > diagramming tool (e.g. draw.io <http://draw.io/>, or something > similar we have a composite component, and we want to let the user > edit its properties by double clicking on it. > * When implementing carousels > <http://dimsemenov.com/plugins/royal-slider/slider-in-lightbox/>, > or lightboxes <http://lokeshdhakar.com/projects/lightbox2/>, we want > to put a semi-transparent overlay over all the content, and display > the images or the lightbox on top of this overlay. > > At the moment, such tools rely on JavaScript to dynamically > add /overlay/ elements to the DOM, or to show/hide them in response to > user actions. In some cases, the size and location of the target element > should be calculated and the overlay should be moved to the right > location and set to the proper size accordingly. This by itself is not > an easy task to achieve, and most implementations that I have seen break > in various undocumented edge cases. What happens if the parent element > is a float? What if somewhere in the hierarchy we have an absolute > element? When you add media queries and responsive design to the mix, > this suddenly becomes even more difficult to implement smoothly and in a > sophisticated manner. But it doesn't really need to be this complex. > > > <https://gist.github.com/behrangsa/c30034c07d7adeee934d#the-display-overlay-alternative>/display: > overlay; /An alternative > > My proposal is to add a new type or rendering box, > called |overlay| using which we can achieve the same goals, without > JavaScript, and in a way that works in harmony with media > queries. |overlay |elements, have a z-index that is greater than the > biggest z-index of the children of its parent element, as well as the > parent itself so it always paints over its parent and the children of > its parent. > > In its simplest form, the |overlay| rendering box works like this. > Consider the following HTML sctructure: > > <style> > .overlay { > display: overlay; > background-color: rgba(100, 100, 100, 0.5); > } > </style> > <div class="complex-component"> > <div class="overlay"></div> > <!-- Lots of elements that togehter make our complex component --> > </div> > > In this case the |div.overlay| element covers |div.complex-component| as > well as its children. When the page renders, you'll see a bright, > semi-transparent green box over the complex-component element. Then by > configuring a mouse listener on the |div.overlay| it will be very easy > to move the |div.complex-componenrt| around. Or in response to a double > click on it, to show an editor to configure the properties of the > component in our visual form builder, etc. > > In order to hide the |div.overlay|, we can simply change > its |display| back to |none|. > > if |div.complex-component|'s size or location changes for whatever > reason, its child overlay will automatically adjust itself to it. > > For lightboxes, similarly, we can add an overlay div to > the |<html>| element: > > <html> > <div style="display:overlay;"></div> > <!-- Content --> > </html> > > I would really like to hear your opinion on this. Am I missing something > here? Are there current or other proposesd CSS features that already can > do this? > > Thanks in advance, > Behrang >
Received on Saturday, 6 December 2014 21:50:13 UTC