ant

[ASAP] Ultrafast Colloidal Quantum Dot Infrared Photodiode

ACS Photonics
DOI: 10.1021/acsphotonics.0c00363




ant

[ASAP] Strong Optical Feedback Stabilized Quantum Cascade Laser

ACS Photonics
DOI: 10.1021/acsphotonics.0c00189




ant

Flexible Captioned Slanted Images

Eric Meyer gift wraps the most awkwardly shaped of boxes using nothing but CSS, HTML and a little curl of ribbon. No matter how well you plan and how much paper you have at your disposal, sometimes you just need to slant the gift to the side.


We have a lot of new layout tools at our disposal these days—flexbox is finally stable and interoperable, and Grid very much the same, with both technologies having well over 90% support coverage. In that light, we might think there’s no place for old tricks like negative margins, but I recently discovered otherwise.

Over at An Event Apart, we’ve been updating some of our landing pages, and our designer thought it would be interesting to have slanted images of speakers at the tops of pages. The end result looks like this.

The interesting part is the images. I wanted to set up a structure like the following, so that it will be easy to change speakers from time to time while preserving accessible content structures:

<div id="page-top">
  <ul class="monoliths">
    <li>
      <a href="https://aneventapart.com/speakers/rachel-andrew"> 
        <img src="/img/rachel-andrew.jpg" alt=""> 
        <div> 
          <strong>Rachel Andrew</strong> CSS Grid 
        </div> 
      </a>
    </li>
    <li>
      <a href="https://aneventapart.com/speakers/derek-featherstone"> 
        <img src="/img/derek-featherstone.jpg" alt=""> 
        <div> 
          <strong>Derek Featherstone</strong> Accessibility 
        </div> 
      </a>
    </li>
    <li>
      …
    </li>
    <li>
      …
    </li>
  </ul>
</div>

The id value for the div is straightforward enough, and I called the ul element monoliths because it reminded me of the memorial monoliths at the entrance to EPCOT in Florida. I’m also taking advantage of the now-ubiquitous ability to wrap multiple elements, including block elements, in a hyperlink. That way I can shove the image and text structures in there, and make the entire image and text below it one link.

Structure is easy, though. Can we make that layout fully responsive? I wondered. Yes we can. Here’s the target layout, stripped of the navbar and promo copy.

So let’s start from the beginning. The div gets some color and text styling, and the monoliths list is set to flex. The images are in a single line, after all, and I want them to be flexible for responsive reasons, so flexbox is 100% the right tool for this particular job.

#page-top { 
  background: #000; 
  color: #FFF; 
  line-height: 1; 
} 
#page-top .monoliths { 
  display: flex; 
  padding-bottom: 1em; 
  overflow: hidden; 
}

I also figured, let’s give the images a simple basis for sizing, and set up the hyperlink while we’re at it.

#page-top .monoliths li { 
  width: 25%; 
} 
#page-top .monoliths a { 
  color: inherit; 
  text-decoration: inherit; 
  display: block; 
  padding: 1px; 
}

So now the list items are 25% wide—I can say that because I know there will be four of them—and the links pick up the foreground color from their parent element. They’re also set to generate a block box.

At this point, I could concentrate on the images. They need to be as wide as their parent element, but no wider, and also match height. While I was at it, I figured I’d create a little bit of space above and below the captioning text, and make the strong elements containing speakers’ names generate a block box.

#page-top .monoliths img { 
  display: block; 
  height: 33rem; 
  width: 100%; 
} 
#page-top .monoliths div { 
  padding: 0.5em 0; 
} 
#page-top .monoliths strong { 
  display: block; 
  font-weight: 900; 
}

It looks like the speakers were all cast into the Phantom Zone or something, so that needs to be fixed. I can’t physically crop the images to be the “correct” size, because there is no correct size: this needs to work across all screen widths. So rather than try to swap carefully-sized images in and out at various breakpoints, or complicate the structure with a wrapper element set to suppress overflow of resized images, I turned to object-fit.

#page-top .monoliths img { 
  display: block; 
  height: 33rem; 
  width: 100%; 
  object-fit: cover; 
  object-position: 50% 20%; 
}

If you’ve never used object-fit, it’s a bit like background-size. You can use it to resize image content within the image’s element box without creating distortions. Here, I set the fit sizing to cover, which means all of the img element’s element box will be covered by image content. In this case, it’s like zooming in on the image content. I also set a zooming origin with object-position, figuring that 50% across and 20% down would be in the vicinity of a speaker’s face, given the way pictures of people are usually taken.

This is fairly presentable as-is—a little basic, perhaps, but it would be fine to layer the navbar and promo copy back over it with Grid or whatever, and call it a day. But it’s too square and boxy. We must go further!

To make that happen, I’m going to take out the third and fourth images temporarily, so we can see more clearly how the next part works. That will leave us with Rachel and Derek.

The idea here is to clip the images to be slanted, and then pull them close to each other so they have just a little space between them. The first part is managed with clip-path, but we don’t want to pull the images together unless their shapes are being clipped. So we set up a feature query.

@supports (clip-path: polygon(0 0)) or (-webkit-clip-path: polygon(0 0)) { 
  #page-top .monoliths li { 
    width: 37.5%; 
  } 
}

I decided to test for both the un-prefixed and WebKit-prefixed versions of clip-path because Safari still requires the prefix, and I couldn’t think of a good reason to penalize Safari’s users for the slowness of its standards advancement. Then I made the images wider, taking them from 25% to 37.5%, which makes them half again as wide.

Thanks to object fitting, the images don’t distort when I change their parent’s width; they just get wider and scale up the contents to fit. And now, it is time for clipping!

@supports (clip-path: polygon(0 0)) or (-webkit-clip-path: polygon(0 0)) { 
  #page-top .monoliths li { 
    width: 37.5%; 
    -webkit-clip-path: polygon(25% 0, 100% 0, 75% 100%, 0 100%); 
    clip-path: polygon(25% 0, 100% 0, 75% 100%, 0 100%); 
  } 
}

Each coordinate pair in the polygon() is like the position pairs in background-position or object-position: the horizontal distance first, followed by the vertical distance. So the first point in the polygon is 25% 0, which is 25% of the way across the element box, and no distance down, so right at the top edge. 100% 0 is the top right corner. 75% 100% is on the bottom edge, three-quarters of the way across the element, and 0 100% is the bottom left corner. That creates a polygon that’s a strip three-quarters the full width of the element box, and runs from bottom left to top right.

Now we just have to pull them together, and this is where old tricks come back into play: all we need is a negative right margin to bring them closer together.

#page-top .monoliths li { 
  width: 37.5%; 
  margin-right: -7.5%; 
  -webkit-clip-path: polygon(25% 0, 100% 0, 75% 100%, 0 100%); 
  clip-path: polygon(25% 0, 100% 0, 75% 100%, 0 100%); 
}

The separation between them is a little wider than we were originally aiming for, but let’s see what happens when we add the other two images back in and let flexbox do its resizing magic.

Notice how the slants actually change shape as the screen gets narrower or wider. This is because they’re still three-quarters the width of the image element’s box, but the width of that box is changing as the screen width changes. That means at narrow widths, the slant is much steeper, whereas at wide widths, the slant is more shallow. But since the clipping path’s coordinates were all set with percentage distances, they all stay parallel to each other while being completely responsive to changes in screen size. An absolute measure like pixels would have failed.

But how did the images get closer together just by adding in two more? Because the list items’ basic sizing added up to more than 100%, and they’re all set to flex-shrink: 1. No, you didn’t miss a line in the CSS: 1 is the default value for flex-shrink. Flex items will shrink by default, which after all is what we should expect from a flexible element. If you want to know how much they shrunk, and why, here’s what Firefox’s flex inspector reports.

When there were only two list items, there was space enough for both to be at their base size, with no shrinkage. Once we went to four list items, there wasn’t enough space, so they all shrank down. At that point, having a negative right margin of -7.5% was just right to pull them together to act as a unit.

So, now they’re all nicely nestled together, and fully responsive! The captions need a little work, though. Notice how they’re clipped off a bit on the left edge, and can be very much clipped off on the right side at narrower screen widths? This happens because the li elements are being clipped, and that clipping applies to all their contents, images and text alike. And we can’t use overflow to alter this: clipped is clipped, not overflowed.

Fortunately, all we really need to do is push the text over a small amount. Inside the feature query, I added:

#page-top .monoliths div { 
  padding-left: 2%;
  padding-right: 26%; 
}

This shifts the text just a bit rightward, enough to clear the clip path. On the right side, I padded the div boxes so their contents wouldn’t fall outside the clipped area and appear to slide under the next caption. We could also use margins here, but I didn’t for reasons I’ll make clear at the end.

At the last minute, I decided to make the text at least appear to follow the slants of the images. For that, I just needed to shift the first line over a bit, which I did with a bit more padding.

#page-top .monoliths strong { 
  padding-left: 1%; 
}

That’s all to the good, but you may have noticed the captions still overlap at really narrow screen widths. There are a lot of options here, from stacking the images atop one another to reverting to normal flow, but I decided to just hide the captions if things got too narrow. It reduces clutter without sacrificing too much in the way of content, and by leaving them still technically visible, they seem to remain accessible.

@media (max-width: 35rem) { 
  #page-top .monoliths div { 
    opacity: 0.01 
  } 
}

And that, as they say, is that! Fully responsive slanted images with text, in an accessible markup structure. I dig it.

I did fiddle around with the separations a bit, and found that a nice thin separator occurred around margin-right: -8%, whereas beefier ones could be found above -7%. And if you crank the negative margin value to something beyond -8%, you’ll make the images overlap entirely, no visible separation—which can be a useful effect in its own right.

I promised to say why I used padding for the caption text div rather than margins. Here’s why.

#page-top .monoliths div { 
  padding-left: 3%; 
  padding-right: 26%; 
  border-top: 2px solid transparent; 
  background: linear-gradient(100deg,hsl(292deg,50%,50%) 50%, transparent 85%); 
  background-clip: padding-box; 
}

It required a wee bit more padding on the left to look decent, and an alteration to the background clipping box in order to keep the purple from filling the transparent border area, but the end result is pretty nifty, if I do say so myself. Alternatively, we could drop the background gradient on the captions and put one in the background, with a result like this.

I have no doubt this technique could be extended, made more powerful, and generally improved upon. I really wished for subgrid support in Chrome, so that I could put everything on a grid without having to tear the markup structure apart, and there are doubtless even more interesting clipping paths and layout patterns to try out.

I hope these few ideas spark some much better ideas in you, and that you’ll share them with us!


About the author

Eric A. Meyer (@meyerweb) has been a burger flipper, a college webmaster, an early blogger, one of the original CSS Samurai, a member of the CSS Working Group, a consultant and trainer, and a Standards Evangelist for Netscape. Among other things, Eric co-wrote Design For Real Life with Sara Wachter-Boettcher for A Book Apart and CSS: The Definitive Guide with Estelle Weyl for O’Reilly, created the first official W3C test suite, assisted in the creation of microformats, and co-founded An Event Apart with Jeffrey Zeldman. Eric lives with his family in Cleveland, Ohio, which is a much nicer city than you’ve probably heard. He enjoys a good meal whenever he can and considers almost every form of music to be worthwhile.

More articles by Eric




ant

Effect of prescription opioids and prescription opioid control policies on infant health [electronic resource] / Engy Ziedan, Robert Kaestner

Cambridge, Mass. : National Bureau of Economic Research, 2020




ant

Reluctant warriors: Germany, Japan, and their U.S. alliance dilemma / Alexandra Sakaki, Hanns W. Maull, Kerstin Lukner, Ellis S. Krauss, Thomas U. Berger

Dewey Library - UA710.S135 2020




ant

How to democratize Europe / Stephanie Hennette, Thomas Piketty, Guillaume Sacriste, Antoine Vauchez

Online Resource




ant

Triggered: how the Left thrives on hate and wants to silence us / Donald Trump Jr

Dewey Library - JK2316.T88 2019




ant

Exploring Patterns of Behaviour in Violent Jihadist Terrorists: an analysis of six significant terrorist conspiracies in the UK.

Online Resource




ant

Suspect communities: anti-Muslim racism and the domestic war on terror / Nicole Nguyen

Dewey Library - HV6432.N555 2019




ant

The anti-black city: police terror and black urban life in Brazil / Jaime Amparo Alves

Dewey Library - HV8183.A48 2018




ant

Anti-pluralism: the real populist threat to liberal democracy / William A. Galston ; foreword by James Davison and John M. Owen IV

Dewey Library - JK1726.G35 2018




ant

A place outside the law: forgotten voices from Guantanamo / Peter Jan Honigsberg

Dewey Library - HV6432.H67 2019




ant

In the ruins of neoliberalism: the rise of antidemocratic politics in the West / Wendy Brown

Dewey Library - JC423.B83 2019




ant

No barrier can contain it: Cuban antifascism and the Spanish Civil War / Ariel Mae Lambe

Dewey Library - JC481.L295 2019




ant

Democracies and authoritarian regimes / Andrea Kendall-Taylor, Natasha Lindstaedt, Erica Frantz

Dewey Library - JC348.K46 2019




ant

NCW directs authorities to care for pregnant riot refugees

Girls living in affected areas are to attend school with assurance of protection.




ant

To give its infants 'their due', Mizoram attempts to change burial practices

High infant mortality was one of the reasons for the hasty burial of the young.




ant

Thiruvananthapuram: Dead snake found in soft drink tetrapack

The two and a half year old girl was later rushed to a hospital, condition stated to be stable.




ant

1 jawan killed in militant attack in Srinagar

Suspect militants killed 1 Indian paramilitary soldier, seriously wounded another on Monday.




ant

JandK attack: Lesser-known militant outfit claims responsibility for strikes

'Shohada Brigade' spokesperson said their mujhahideen are still fighting in Jammu.




ant

Jammu Terror Attack: BJYM condemns militant attack, hold protest

PM Manmohan Singh should call off his meeting with Nawaz Sharif, says BJYM leader Yudhvir Sethi.




ant

Anti nuke activists demand action against police officials

PMANE leaders said Tamil Nadu govt hasn't made efforts to withdraw cases against nonviolent protesters.




ant

Muzaffarnagar violence: Mulayam wants riots relief camps to close soon

Mulayam expressed concern that relief camps were adversely impacting the image of the Akhilesh govt.




ant

Srinagar encounter ends, militants escape

Four more cops sustained minor injuries in the exchange of fire between the two sides.




ant

Antony asks officials to examine issues raised by Patel on IAF barring PSU tenders

Indian Air Force has to acquire 56 transport aircraft to replace its ageing Avro fleet.




ant

Certain elements in Pak do not want normalcy in ties: Salman Khurshid

Khurshid made it clear that dialogue is the way forward to resolve issues.




ant

Cyclone Phailin: Antony asks armed forces to be ready

IAF assets have been kept on stand by at various bases, including Raipur and Gwalior.




ant

Cyclone Phailin: In Andhra, villagers don''t want to leave homes

Villagers, observing traditional pujas for Dussehra, refused to board vehicles.




ant

Cyclone Phailin: 'Want to ensure zero casualty... Leave or perish''

District administration found it difficult to convince the villagers to evacuate their homes.




ant

Politics on any tragedy is unwanted: Shivraj Singh Chouhan

Earlier, Digvijay Singh had blamed corruption in plum postings for occurrence of such tragedies.




ant

Fire in Dibrugarh-Delhi Rajdhani Express pantry car, no casualties reported

At around 4.30 am, a fire broke out in the kitchen and engulfed the train.




ant

Keran incident: Antony to hold high-level meeting

Questions over ops raised by local formation and Sr commanders, loopholes cited in their conduct.




ant

Omar asks security forces to be vigilant against militancy

Omar said there's substantial success in tackling militancy in the state and they'll be able to see its end.




ant

Families of ex-militants held along LoC await their return

Army had arrested 23 members of the families for trying to enter Pakistan's Muzaffarabad.




ant

Assam: 6 killed as suspected Garo militants attack group of people on Diwali

The armed insurgents swooped on the group of gamblers at remote Gendamari in Aagia police station.




ant

India, China armies end 5-year hiatus; begin 10-day anti-terror exercise

Both sides have deployed about 150 soldiers each in the 10-day exercise.




ant

Power generation resumes at Kudankulam Nuclear Power plant

First unit was shut down on October 29 for the second time in a week for some tests.




ant

CBI chief can''t be granted ex-officio secy power: Government

It would be 'bad in law' if such demands were met, said the government.




ant

West Bengal: Miscreants vandalise statue of former CM Jyoti Basu, trigger outrage

The incident has triggered an outrage among the Left supporters and workers.




ant

Infant, 2 workers killed in Bangalore building collapse

Mud walls of building may have been weakened by the recent downpour in the city, officials said.




ant

Six killed in blast near Kudankulam nuclear plant, security stepped up

Safety arrangements have been stepped up at the nuclear plant following the blast.




ant

Court issues production warrants against BSP MP Dhananjay Singh, wife Jagriti

MP was arrested for allegedly destroying evidence and not informing police about the maid's death.




ant

Gunfight ends in Kupwara, 3 holed up militants killed

Two army jawans were injured, three AK 47 rifles and nine magazines were recovered from scene.




ant

INS Vikrant to be auctioned as Maha govt unable to maintain the ship

INS Vikrant had played a major role in the 1971 Bangladesh war.




ant

TMC wants Ganguly to step down, NGO files police complaint

Earlier, former SC judge Ganguly said that time has not come to think about quitting.




ant

Lalu Yadav to walk out of jail as SC grants him bail in fodder scam case

SC granted bail after noting that several other convicts have already been granted bail in the case.




ant

Environment Ministry allows agri, plantation activities along Western Ghats

Decision after widespread protests from political parties and Syrian Catholic Church in Kerala.




ant

A field guide to algebra [electronic resource] / Antoine Chambert-Loir

New York : Springer, [2005]




ant

Error-correcting linear codes [electronic resource] : classification by isometry and applications / Anton Betten [and others]

Berlin ; New York : Springer, [2006]




ant

Developments in language theory [electronic resource] : 10th international conference, DLT 2006, Santa Barbara, CA, USA, June 26-29, 2006 : proceedings / Oscar H. Ibarra, Zhe Dang (eds.)

Berlin ; New York : Springer, [2006]