W3C home > Mailing lists > Public > public-respimg@w3.org > October 2014

Re: Element Query and Selector Media Query Types

From: Kevin Mack <kmack418@gmail.com>
Date: Mon, 20 Oct 2014 13:02:29 -0400
Message-ID: <CALvLtk7oo8XtcWBfify9ppyui8ocB6qsdiMiZqZ8xsfMtR6F_g@mail.gmail.com>
To: "Hall, Charles (DET-MRM)" <Charles.Hall@mrm-mccann.com>
Cc: "public-respimg@w3.org" <public-respimg@w3.org>
The comma is how @media uses multiple media types, I see it working the
same way.

On Monday, October 20, 2014, Hall, Charles (DET-MRM) <
Charles.Hall@mrm-mccann.com> wrote:

>   This absolutely makes more sense.
>  The expression in the query is against the *element* properties – either
> independently (your original example), or within media type properties
> (second example).
>
>  The syntax in that case may need some love, as the comma serves as the
> logical operator ‘*or*’.
>
>  So this:
> @media screen and (max-width: 800px), *.zone--b and (min-width: 600px)* {
> }
>
>  Might be this:
> @media screen and (max-width: 800px) and *.zone--b and (min-width: 600px)* {
> }
>
>  *Charles Hall*
>  UX Architect, Technology
>
>  t / 248.203.8723  m / 248.225.8179
>  e / charles.hall@mrm-mccann.com
> <javascript:_e(%7B%7D,'cvml','charles.hall@mrm-mccann.com');>
>  skype / charles.h.all
>  360 West Maple Road, Birmingham MI 48009
>  w / www.mrmworldwide.com
>
>   Creativity. Technology. Performance.
>
>   From: Kevin Mack <kmack418@gmail.com
> <javascript:_e(%7B%7D,'cvml','kmack418@gmail.com');>>
> Date: Monday, October 20, 2014 at 12:24 PM
> To: "Charles Hall (DET-MRM)" <charles.hall@mrm-mccann.com
> <javascript:_e(%7B%7D,'cvml','charles.hall@mrm-mccann.com');>>
> Cc: "public-respimg@w3.org
> <javascript:_e(%7B%7D,'cvml','public-respimg@w3.org');>" <
> public-respimg@w3.org
> <javascript:_e(%7B%7D,'cvml','public-respimg@w3.org');>>
> Subject: Re: Element Query and Selector Media Query Types
>
>   That's an interesting approach to. Let me show you an example of what
> I'm thinking:
>
>  Here is a wider screen view using the same module (.media) but in three
> uses in the same layout:
>
> ​
> ​And here's the same at a smaller:
>
> ​
>
>
>  Now this looks like a typical feature/type approach to RWD (and this can
> be done pretty easily). The big difference is that the last .media is
> rendered as the smaller view version at a larger view, how this is done is
> because it's based off of the parent container's width (.zone--b). Here's
> what this code would look like:
>
>  *HTML*
>  <div class="container">
>  <div class="media">
> <div class="media__asset">
> <img class="image-full" src="
> http://placehold.it/500x300/000000/FFFFFF&text=image" />
> </div>
> <div class="media__details">
> <h3 class="media__title">
> Lorem ipsum dolor
> </h3>
> <p class="media__detail__content">
> Lorem ipsum dolor sit amet, consectetur adipisicing elit. Distinctio
> praesentium ipsa ullam quas esse omnis, necessitatibus officia explicabo
> voluptatum consectetur minima reprehenderit placeat aperiam velit eos
> dolorum aliquid culpa odio fugit. Eos ipsam voluptates beatae placeat
> soluta, expedita porro natus libero nisi minus dolorem nobis doloribus
> tenetur, similique facere repellendus molestiae. Illum voluptatum adipisci
> itaque fuga molestiae assumenda, et at laboriosam beatae odit quos harum
> voluptatem asperiores facilis error, quisquam optio. Minus eius quaerat
> minima, amet voluptatibus veritatis iste assumenda.
> </p>
> <a class="media__details__cta" href="#">
> Lorem ipsum dolor.
> </a>
> </div>
> </div>
>
>  <div class="zone--a">
> <div class="media">
> <div class="media__asset">
> <img class="image-full" src="
> http://placehold.it/500x300/000000/FFFFFF&text=image" />
> </div>
> <div class="media__details">
> <h3 class="media__title">
> Lorem ipsum dolor
> </h3>
> <p class="media__detail__content">
> Lorem ipsum dolor sit amet, consectetur adipisicing elit. Accusantium quia
> aliquid, reprehenderit harum tenetur libero repellendus perferendis quidem
> commodi similique eos quam esse quis animi, excepturi dolorum sint aperiam
> in!
> </p>
> <a class="media__details__cta" href="#">
> Lorem ipsum dolor.
> </a>
> </div>
> </div>
> </div>
>
>  <div class="zone--b">
> <div class="mediab">
> <div class="mediab__asset">
> <img class="image-full" src="
> http://placehold.it/500x300/000000/FFFFFF&text=image" />
> </div>
> <div class="mediab__details">
> <h3 class="mediab__title">
> Lorem ipsum dolor
> </h3>
> <p class="mediab__detail__content">
> Lorem ipsum dolor sit amet, consectetur adipisicing elit. Accusantium quia
> aliquid, reprehenderit harum tenetur libero repellendus perferendis quidem
> commodi similique eos quam esse quis animi, excepturi dolorum sint aperiam
> in!
> </p>
> <a class="mediab__details__cta" href="#">
> Lorem ipsum dolor.
> </a>
> </div>
> </div>
> </div>
>
>  </div>
>
>
>  *CSS*
> ​
>
>  body {
>     font-family: monospace;
> }
>
>  * {
>     box-sizing: border-box;
> }
>
>  .image-full {
>     display: block;
>     height: auto;
>     width: 100%;
> }
>
>  .container {
>     max-width: 1400px;
> }
>
>  .container:after {
>     content: "";
>     clear: both;
>     display: table;
>     width: 100%;
> }
>
>  @media screen and (min-width:1440px) {
>     .container {
>         margin-left: auto;
>         margin-right: auto;
>     }
> }
>
>  @media screen and (max-width:1440px) {
>     .container {
>         margin-left: 20px;
>         margin-right: 20px;
>     }
> }
>
>  @media screen and (min-width: 800px) {
> .zone--a, .zone--b {
>    float: left;
> }
>
>  .zone--a {
>    width: 75%;
> }
>
>  .zone--b {
>    padding-left: 1rem;
>    width: 25%;
> }
> }
>
>  .media {
>     padding-bottom: 1rem;
> }
>
>  .media__title, .media__detail__content {
>     margin-bottom: 1rem;
> }
>
>  .media__details {
>     padding-left: 1rem;
> }
>
>  .media__detail__content {
>     margin-top: 0;
> }
>
>  .media__details__cta {
>     font-weight: 700;
>     text-decoration: none;
> }
>
>  @media screen and (min-width: 800px) {
>     .media {
>         display: table;
>         width: 100%;
>     }
>
>      .media__asset,.media__details {
>         display: table-cell;
>         vertical-align: top;
>     }
>
>      .media__asset {
>         width: 500px;
>     }
>
>      .media__title {
>         margin-top: 0;
>         font-size: 3em;
>     }
>
>      .media__details {
>         padding-left: 1rem;
>     }
>
>      .media__details__cta:after {
>         content: ">";
>     }
> }
>
>  @media screen and (max-width: 800px), *.zone--b and (min-width: 600px)* {
>     .media {
>         background-color: #ccc;
>     }
>
>      .media__title {
>         font-size: 2em;
>         margin-top: 1rem;
>     }
>
>      .media__details__cta {
>         background-color: #000;
>         color: #FFF;
>         display: inline-block;
>         padding: .5rem 1rem;
>     }
>
>      .media__details {
>         padding-right: 1rem;
>     }
> }
>
>
>
>  Looking at the code above, using *.zone--b and (min-width: 800px)*makes
> the design change based off of the parent's width of .zone--b. zone--b is
> rendered at 350px at larger viewport (25% of the 1400px of .container).
> This covers the case for parent-child selector query and then aligns with
> viewport to selector (traditional) and how they can be used together.
>
>  Does this help or add more confusion?
>
>
> On Mon, Oct 20, 2014 at 11:25 AM, Hall, Charles (DET-MRM) <
> Charles.Hall@mrm-mccann.com
> <javascript:_e(%7B%7D,'cvml','Charles.Hall@mrm-mccann.com');>> wrote:
>
>>  Hi Kevin,
>>
>>  I’m not entirely clear on your use cases.
>>
>>  My understanding of @media queries:
>> Conditionally check for media type (print, screen, all), then any number
>> and/or type of expressions (height, orientation, color), then any explicit
>> or range of value (60em, 25%, 50vw) and apply what follows when all produce
>> a match.
>>
>>  So, in the case of Element queries, I believe that they would check for
>> element type (<aside>, <input>, <blockquote>), then any number and/or type
>> of attributes (dir=, target=, data-name=), then any explicit or partial
>> value ("ltr", "#top", "mathBox"), then any other condition required, and
>> apply what follows when all produce a match – simply now in CSS, and no
>> longer limited to JS/jQuery.
>>
>>  A use case could be: “I have 2 dynamic aside elements that share
>> multiple classes and attributes and I need a simple CSS selector that does
>> not require source order or complex combinators.”
>>
>>  The structure and syntax in this case would be something like this:
>>
>>  @element aside and (data-name="mathBox") {
>> fieldset { border: 1px solid red; }
>> }
>>
>>  This of course can currently be written with an attribute selector
>> (below), but I wanted to write a very simple syntax as a starting point.
>>
>>  fieldset [data-name="mathBox"] { border: 1px solid red; }
>>
>>  I hope this adds another perspective to the conversation.
>>
>>  Thanks,
>>
>>
>>  *Charles Hall*
>> UX Architect, Technology
>>
>>  t / 248.203.8723  m / 248.225.8179
>> e / charles.hall@mrm-mccann.com
>> <javascript:_e(%7B%7D,'cvml','charles.hall@mrm-mccann.com');>
>> skype / charles.h.all
>> 360 West Maple Road, Birmingham MI 48009
>> w / www.mrmworldwide.com
>>
>>  Creativity. Technology. Performance.
>>
>>   From: Kevin Mack <kmack418@gmail.com
>> <javascript:_e(%7B%7D,'cvml','kmack418@gmail.com');>>
>> Date: Monday, October 20, 2014 at 9:45 AM
>> To: "public-respimg@w3.org
>> <javascript:_e(%7B%7D,'cvml','public-respimg@w3.org');>" <
>> public-respimg@w3.org
>> <javascript:_e(%7B%7D,'cvml','public-respimg@w3.org');>>
>> Subject: Re: Element Query and Selector Media Query Types
>> Resent-From: <public-respimg@w3.org
>> <javascript:_e(%7B%7D,'cvml','public-respimg@w3.org');>>
>> Resent-Date: Monday, October 20, 2014 at 9:46 AM
>>
>>   Wanted to see if anyone else had any thoughts/opinions on *Element
>> Query and Selector Media Query Types*? I want to really start pushing
>> these but I want to make sure that I have support of the community and
>> these have been thought-through.
>>
>>  Let me know, it's very appreciated // Thank you!
>> *Kevin Mack*
>>
>> On Sun, Oct 12, 2014 at 4:39 PM, Kevin Mack <kmack418@gmail.com
>> <javascript:_e(%7B%7D,'cvml','kmack418@gmail.com');>> wrote:
>>
>>>  Hello hello!
>>>
>>>  With the success of Picture Element/@srcset, I feel we should continue
>>> the momentum. I have a suggestion for two new media-query types, they are:
>>> *content* and "*selector*" (including pseudo selectors) queries.  Both
>>> would utilize the same media-query features that already exist and extend
>>> the use of media-queries to create more modular, portable, reusable code.
>>>
>>>  The idea is have a solutions for the "Element Query" and "Content
>>> Query", which has been handled frequently by JavaScript.
>>>
>>>
>>>  The* Element Query* would work similar to how an iframe works within a
>>> container – the container has the constraints of width and the content
>>> inside the iframe has a client width of the container.
>>>
>>>  Here's one use-case of what I imagine the Element Query working like:
>>>
>>>  *<style>*
>>> *.container {*
>>> *max-width: 1000px;*
>>> *margin-right: auto;*
>>> *margin-left: auto;*
>>> *}*
>>>
>>>  *.nav {*
>>> *display: block;*
>>> *margin-top: 0;*
>>> *margin-bottom: 0;*
>>> *padding-left: 0;*
>>> *list-style: none;*
>>> *}*
>>>
>>>  *@media .nav and (max-width: 800px) {*
>>> *.nav__item {*
>>> *display: block;*
>>> *}*
>>> *}*
>>>
>>>  *@media .nav and (min-width: 801px) {*
>>> *.nav__item {*
>>> *display: inline-block;*
>>> *}*
>>> *}*
>>> *</style>*
>>>
>>>  *<div class="container">*
>>> *<ul class="nav">*
>>> *<li class="nav__item">*
>>> *<a href="#">*
>>> *Lorem ipsum dolor*
>>> *</a>*
>>> *</li>*
>>> *<li class="nav__item">*
>>> *<a href="#">*
>>> *Consectetur adipisicing elit*
>>> *</a>*
>>> *</li>*
>>> *<li class="nav__item">*
>>> *<a href="#">*
>>> *Impedit ut accusamus*
>>> *</a>*
>>> *</li>*
>>> *<li class="nav__item">*
>>> *<a href="#">*
>>> *Lorem ipsum dolor*
>>> *</a>*
>>> *</li>*
>>> *</ul>*
>>> *</div>*
>>>
>>>
>>>  Second is the *Content Query* that's best described in this example:
>>> if I have two headlines, "This Is My Title" and "This Is A REALLY Long
>>> Title for a Section". If the content has a max-width of 30em, then apply a
>>> fixed max-width to make the title look "more presentable" at a larger
>>> viewport.
>>>
>>>  *<style>*
>>> *@media content and (min-width: 30em) {*
>>> *.section-title {*
>>> *max-width: 16em;*
>>> *}*
>>> *}*
>>> *</style>*
>>>
>>>
>>>  *<h1>*
>>> *This Is A Title*
>>> *</h1>*
>>>
>>>  *<h1 class="section-title">*
>>> *This Is A REALLY Long Title*
>>> *for a Section*
>>> *</h1>*
>>>
>>>
>>>  I am eager to see solutions like these in place, it would dramatically
>>> reduce development time and promote best practices for developing CSS/HTML
>>> in a responsive experience.
>>>
>>>
>>>
>>>  Thoughts?
>>>  - *Kevin Mack*
>>>
>>>
>>
>

larger.png
(image/png attachment: larger.png)

smaller.png
(image/png attachment: smaller.png)

5D510C5C-1CCD-479C-A466-98D1FC580B9B_11_.png
(image/png attachment: 5D510C5C-1CCD-479C-A466-98D1FC580B9B_11_.png)

5D510C5C-1CCD-479C-A466-98D1FC580B9B_12_.png
(image/png attachment: 5D510C5C-1CCD-479C-A466-98D1FC580B9B_12_.png)

Received on Monday, 20 October 2014 17:03:00 UTC

This archive was generated by hypermail 2.4.0 : Friday, 17 January 2020 17:06:15 UTC