- From: ferenci84 via GitHub <sysbot+gh@w3.org>
- Date: Fri, 21 Aug 2020 13:02:52 +0000
- To: public-css-archive@w3.org
ferenci84 has just created a new issue for https://github.com/w3c/csswg-drafts:
== [css-values-4] Way to set height relative to width ==
### Problem descripion
So far the only way to alter the height relative to width is by using padding. But what if we want to set the max-height relative to width?
Consider this example:
HTML:
<style>
body {
margin: 0;
}
.galery {
display: flex;
flex-flow: row wrap;
align-items: stretch;
width: 600px;
margin: 0 auto;
}
.image {
flex: 0 0 180px;
margin: 10px;
background: aqua;
max-height: 180px;
}
img {
height: 100%;
width: 100%;
display: block;
object-position: center;
object-fit: contain;
border: 1px solid;
box-sizing: border-box;
}
</style>
<div class="galery">
<div class="image">
<img src="https://via.placeholder.com/1000x660" data-orientation="landscape"/>
</div>
<div class="image">
<img src="https://via.placeholder.com/1000x660" data-orientation="landscape"/>
</div>
<div class="image">
<img src="https://via.placeholder.com/1000x660" data-orientation="landscape"/>
</div>
<div class="image">
<img src="https://via.placeholder.com/660x1000" data-orientation="portrait"/>
</div>
<div class="image">
<img src="https://via.placeholder.com/1000x660" data-orientation="landscape"/>
</div>
<div class="image">
<img src="https://via.placeholder.com/1000x660" data-orientation="landscape"/>
</div>
</div>
[live example](https://codepen.io/ferenci84/pen/zYqopPw)
Basically I want to avoid portrait images to be too large compared to landscape images, that's why I'm using max-height. But if the size of the container is not known, I'd have to use a complicated calc expression to get the value. Example:
.galery {
display: flex;
flex-flow: row wrap;
align-items: stretch;
margin: 10px auto;
padding: 0 10px;
width: 50%;
}
.image {
flex: 1 0 calc(33.333% - 20px);
margin: 10px;
background: aqua;
max-height: calc((50vw - 20px) / 3 - 20px);
}
[live example](https://codepen.io/ferenci84/pen/LYNbeze)
This max-height expression is quite complicated and fragile. It would be much cleaner and more direct to set the max-height to relative to width.
### Proposed one of possibly several viable solutions
There may be several possible solutions to this problem. One possible solution to this is the following:
A new unit added to CSS Values Level 4:
`cw` (stands for: containing block width) meaning: percentage of the [logical width](https://www.w3.org/TR/css-writing-modes-4/#logical-width) of containing block
This definition is similar to:
https://www.w3.org/TR/css-box-3/#padding-physical
### Example use case
Instead of the complicated calc expression:
max-height: calc((100vw - 20px) / 3 - 20px);
I would just use a value relative to width:
max-height: 100cw;
Please view or discuss this issue at https://github.com/w3c/csswg-drafts/issues/5461 using your GitHub account
--
Sent via github-notify-ml as configured in https://github.com/w3c/github-notify-ml-config
Received on Friday, 21 August 2020 13:02:54 UTC