- From: Behrang Saeedzadeh <behrangsa@gmail.com>
- Date: Sun, 7 Dec 2014 12:37:23 +1100
- To: Benjamin Poulain <benjamin@webkit.org>
- Cc: W3C CSS Mailing List <www-style@w3.org>
- Message-ID: <CAERAJ+-fMDn8AOdabog2t8M4sfpw3A6utetX_kkpf60AG1av1A@mail.gmail.com>
Hi Benjamin, Not really. I have created a demo that might explain my idea better: https://www.youtube.com/watch?v=R8wIJ2GsOwo&feature=youtu.be Basically, the goal is to create a method that allows developer easily overlay a given element with another "overlay" element that can be used to: - Simulate a disabled element, - Simplify dragging an element that has child elements - Simplify creating lightboxes, etc. (this probably can be done by the dialog element as well) - etc. Java Swing had a similar component called the (Glass Pane), but it was not per element/component, but it was overlaying the entire window (JFrame): https://docs.oracle.com/javase/tutorial/figures/uiswing/components/1layers.gif overlay elements are similar to that, but they only overlay their parent elements. Best regards, Behrang http://www.behrang.org On Sun, Dec 7, 2014 at 8:49 AM, Benjamin Poulain <benjamin@webkit.org> wrote: > 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 Sunday, 7 December 2014 01:37:50 UTC