ies

NLCIL employee dies of burn injuries

Sarbuddin, 54, a permanent employee of NLC India Ltd (NLCIL), who had suffered severe burn injuries in a fire that broke out in a furnace in Unit VI o




ies

Inspect chemical factories before reopening: Tamil Nadu Consumer Protection Organisation

The Tamil Nadu Consumer Protection Organisation has asked the Tamil Nadu government to form a committee of officials from the environment, industries




ies

[ASAP] Low-Threshold Lasing up to 360 K in All-Dielectric Subwavelength-Nanowire Nanocavities

ACS Photonics
DOI: 10.1021/acsphotonics.0c00166




ies

[ASAP] Update to Our Reader, Reviewer, and Author Communities—April 2020

ACS Photonics
DOI: 10.1021/acsphotonics.0c00628




ies

Beautiful Scrolling Experiences – Without Libraries

Michelle Barker appears as one of a heavenly host, coming forth with scroll in hand to pronounce an end to janky scrolljacking! Unto us a new specification is born, in the city of TimBL, and its name shall be called Scroll Snap.


Sponsor: Order any Standard paperback(s) and get a surprise gift card in the box for YOU. While supplies last, from your pals at A Book Apart!


One area where the web has traditionally lagged behind native platforms is the perceived “slickness” of the app experience. In part, this perception comes from the way the UI responds to user interactions – including the act of scrolling through content.

Faced with the limitations of the web platform, developers frequently reach for JavaScript libraries and frameworks to alter the experience of scrolling a web page – sometimes called “scroll-jacking” – not always a good thing if implemented without due consideration of the user experience. More libraries can also lead to page bloat, and drag down a site’s performance. But with the relatively new CSS Scroll Snap specification, we have the ability to control the scrolling behaviour of a web page (to a degree) using web standards – without resorting to heavy libraries. Let’s take a look at how.

Scroll Snap

A user can control the scroll position of a web page in a number of ways, such as using a mouse, touch gesture or arrow keys. In contrast to a linear scrolling experience, where the rate of scroll reflects the rate of the controller, the Scroll Snap specification enables a web page to snap to specific points as the user scrolls. For this, we need a fixed-height element to act as the scroll container, and the direct children of that element will determine the snap points. To demonstrate this, here is some example HTML, which consists of a <div> containing four <section> elements:

<div class="scroll-container">
  <section>
    <h2>Section 1</h2>
  </section>
  <section>
    <h2>Section 2</h2>
  </section>
  <section>
    <h2>Section 3</h2>
  </section>
  <section>
    <h2>Section 4</h2>
  </section>
</div>

Scroll snapping requires the presence of two main CSS properties: scroll-snap-type and scroll-snap-align. scroll-snap-type applies to the scroll container element, and takes two keyword values. It tells the browser:

  • The direction to snap
  • Whether snapping is mandatory

scroll-snap-align is applied to the child elements – in this case our <section>s.

We also need to set a fixed height on the scroll container, and set the relevant overflow property to scroll.

.scroll-container {
  height: 100vh;
  overflow-y: scroll;
  scroll-snap-type: y mandatory;
}

section {
  height: 100vh;
  scroll-snap-align: center;
}

In the above example, I’m setting the direction in the scroll-snap-type property to y to specify vertical snapping. The second value specifies that snapping is mandatory. This means that when the user stops scrolling their scroll position will always snap to the nearest snap point. The alternative value is proximity, which determines that the user’s scroll position will be snapped only if they stop scrolling in the proximity of a snap point. (It’s down to the browser to determine what it considers to be the proximity threshold.)

If you have content of indeterminate length, which might feasibly be larger than the height of the scroll container (in this case 100vh), then using a value of mandatory can cause some content to be hidden above or below the visible area, so is not recommended. But if you know that your content will always fit within the viewport, then mandatory can produce a more consistent user experience.

See the Pen Simple scroll-snap example by Michelle Barker (@michellebarker) on CodePen.

In this example I’m setting both the scroll container and each of the sections to a height of 100vh, which affects the scroll experience of the entire web page. But scroll snapping can also be implemented on smaller components too. Setting scroll snapping on the x-axis (or inline axis) can produce something like a carousel effect.

In this demo, you can scroll horizontally scroll through the sections:

See the Pen Carousel-style scroll-snap example by Michelle Barker (@michellebarker) on CodePen.

The Intersection Observer API

By implementing the CSS above, our web page already has a more native-like feel to it. To improve upon this further we could add some scroll-based transitions and animations. We’ll need to employ a bit of Javascript for this, using the Intersection Observer API. This allows us to create an observer that watches for elements intersecting with the viewport, triggering a callback function when this occurs. It is more efficient than libraries that rely on continuously listening for scroll events.

We can create an observer that watches for each of our scroll sections coming in and out of view:

const sections = [...document.querySelectorAll('section')]

const options = {
  rootMargin: '0px',
  threshold: 0.25
}

const callback = (entries) => {
  entries.forEach((entry) => {
    if (entry.intersectionRatio >= 0.25) {
      target.classList.add("is-visible");
    } else {
      target.classList.remove("is-visible");
    }
  })
}

const observer = new IntersectionObserver(callback, options)

sections.forEach((section, index) => {
  observer.observe(section)
})

In this example, a callback function is triggered whenever one of our sections intersects the container by 25% (using the threshold option). The callback adds a class of is-visible to the section if it is at least 25% in view when the intersection occurs (which will take effect when the element is coming into view), and removes it otherwise (when the element is moving out of view). Then we can add some CSS to transition in the content for each of those sections:

section .content {
  opacity: 0:
}

section.is-visible .content {
  opacity: 1;
  transition: opacity 1000ms:
}

This demo shows it in action:

See the Pen Scrolling with Intersection Observer by Michelle Barker (@michellebarker) on CodePen.

You could, of course, implement some much more fancy transition and animation effects in CSS or JS!

As an aside, it’s worth pointing out that, in practice, we shouldn’t be setting opacity: 0 as the default without considering the experience if JavaScript fails to load. In this case, the user would see no content at all! There are different ways to handle this: We could add a .no-js class to the body (which we remove on load with JS), and set default styles on it, or we could set the initial style (before transition) with JS instead of CSS.

Position: sticky

There’s one more CSS property that I think has the potential to aid the scroll experience, and that’s the position property. Unlike position: fixed, which locks the position of an element relative to the nearest relative ancestor and doesn’t change, position: sticky is more like a temporary lock. An element with a position value of sticky will become fixed only until it reaches the threshold of its parent, at which point it resumes relative positioning.

By “sticking” some elements within scroll sections we can give the impression of them being tied to the action of scrolling between sections. It’s pretty cool that we can instruct an element to respond to it’s position within a container with CSS alone!

Browser support and fallbacks

The scroll-snap-type and scroll-snap-align properties are fairly well-supported. The former requires a prefix for Edge and IE, and older versions of Safari do not support axis values. In newer versions of Safari it works quite well. Intersection Observer similarly has a good level of support, with the exception of IE.

By wrapping our scroll-related code in a feature query we can provide a regular scrolling experience as a fallback for users of older browsers, where accessing the content is most important. Browsers that do not support scroll-snap-type with an axis value would simply scroll as normal.

@supports (scroll-snap-type: y mandatory) {
  .scroll-container {
    height: 100vh;
    overflow-y: scroll;
    scroll-snap-type: y mandatory;
  }

  section {
    height: 100vh;
    scroll-snap-align: center;
  }
}

The above code would exclude MS Edge and IE, as they don’t support axis values. If you wanted to support them you could do so using a vendor prefix, and using @supports (scroll-snap-type: mandatory) instead.

Putting it all together

This demo combines all three of the effects discussed in this article.

Summary

Spending time on scroll-based styling might seem silly or frivolous to some. But I believe it’s an important part of positioning the web as a viable alternative to native applications, keeping it open and accessible. While these new CSS features don’t offer all of the control we might expect with a fully featured JS library, they have a major advantage: simplicity and reliability. By utilising web standards where possible, we can have the best of both worlds: Slick and eye-catching sites that satisfy clients’ expectations, with the added benefit of better performance for users.


About the author

Michelle is a Lead Front End Developer at Bristol web agency Atomic Smash, author of front-end blog CSS { In Real Life }, and a Mozilla Tech Speaker. She has written articles for CSS Tricks, Smashing Magazine, and Web Designer Magazine, to name a few. She enjoys experimenting with new CSS features and helping others learn about them.

More articles by Michelle




ies

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




ies

Why they marched: untold stories of the women who fought for the right to vote / Susan Ware

Dewey Library - JK1896.W37 2019




ies

Socialist Practice: Histories and Theories / Victor Wallis

Online Resource




ies

Managing interdependencies in federal systems: intergovernmental councils and the making of public policy / Johanna Schnabel

Online Resource




ies

When they come for you: how police and government are trampling our liberties--and how to take them back / David Kirby

Dewey Library - JC599.U5 K568 2019




ies

Reflections on socialism in the Twenty-First Century: facing market liberalism, rising inequalities and the environmental imperative / Claes Brundenius, editor

Online Resource




ies

Italian populism and constitutional law: strategies, conflicts and dilemmas / Giacomo Delledonne, Giuseppe Martinico, Matteo Monti, Fabio Pacini, editors

Online Resource




ies

International empirical studies on religion and socioeconomic human rights Hans-Georg Ziebertz, editor

Online Resource




ies

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

Online Resource




ies

We decide!: theories and cases in participatory democracy / Michael Menser

Dewey Library - JF799.M47 2018




ies

When democracies deliver: governance reform in Latin America / Katherine Bersch

Online Resource




ies

Surviving state terror: women's testimonies of repression and resistance in Argentina / Barbara Sutton

Dewey Library - HV6433.A7 S88 2018




ies

Genealogies of terrorism: revolution, state violence, empire / Verena Erlenbusch-Anderson

Dewey Library - HV6431.E744 2018




ies

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

Dewey Library - HV6432.N555 2019




ies

Wartime sexual violence against men: masculinities and power in conflict zones / Élise Féron

Dewey Library - HV6558.F47 2018




ies

Leadership studies and the desire for shared agreement: a narrative inquiry / Stan Amaladas

Dewey Library - JF1525.L4 A63 2019




ies

The end of strategic stability?: Nuclear weapons and the challenge of regional rivalries / Lawrence Rubin and Adam N. Stulberg, editors

Dewey Library - U263.E557 2018




ies

The gang paradox: inequalities and miracles on the U.S.-Mexico border / Robert J. Durán

Hayden Library - HV6439.M58 D87 2018




ies

Intelligence and state surveillance in modern societies: an international perspective / by Frederic Lemieux

Dewey Library - JF1525.I6 L46 2019




ies

Identities, trust, and cohesion in federal systems: public perspectives / edited by Jack Jedwab and John Kincaid

Dewey Library - JC355.I34 2018




ies

Responsible parties: saving democracy from itself / Frances McCall Rosenbluth and Ian Shapiro

Dewey Library - JF2051.R67 2018




ies

21st century Prometheus: managing CBRN safety and security affected by cutting-edge technologies / Maurizio Martellini, Ralf Trapp, editors

Online Resource




ies

The rules and politics of American primaries: a state-by-state guide to Republican and Democratic primaries and caucuses / Andrew E. Busch, Editor

Dewey Library - JK2071.R85 2019




ies

Trust, distrust, and mistrust in multinational democracies: comparative perspectives / edited by Dimitrios Karmis and François Rocher

Dewey Library - JF799.T78 2018




ies

Rethinking open society: new adversaries and new opportunities / edited by Michael Ignatieff, Stefan Roch

Dewey Library - JC423.R48 2018




ies

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

Dewey Library - JC348.K46 2019




ies

Exploring political legacies Stephen Farrall, Colin Hay, Emily Gray

Online Resource




ies

NCW directs authorities to care for pregnant riot refugees

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




ies

Teachers' recruitment scam: Chautala surrenders before Tihar jail authorities

Chautala was granted interim bail by the HC on July 23 for six weeks on medical ground.




ies

Nairobi mall attack brings back memories of 26/11 strike

Shot in the right leg, Devika, was the youngest witness in the trial of Ajmal Kasab.




ies

26/11 Terror Attack: Magistrate denies recording false confession of Ajmal Kasab

"Not true that I recorded false statement of Kasab when he was produced before me"




ies

After 16 yrs, over 80 Bru families return to Mizoram from Tripura relief camps

Chorky, along with other Bru leaders and Mizoram officials welcomed the families at Kanhmun.




ies

Crushed families: Story of the survivors of the Mumbai building collapse

61 people were killed and 31 injured after a residential building collapsed in Mumbai last week.




ies

Pakistan Army denies infiltration attempts from across the LoC

Analysis of this infiltration bid indicated the involvement of Pak Border Action Team.




ies

2500 homeless families to get prefabricated houses: Bahuguna

It's an added benefit to the 2 lakh compensation given to families that lost homes in the tragedy.




ies

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.




ies

SC disapproves gun firing to celebrate marriage ceremonies

Guns must be carried with a sense of responsibility and caution, SC stated.




ies

'Phailin' intensifies into severe cyclonic storm, to hit Odisha and Andhra on Saturday

Squally winds speed reaching 65 kmph would hit Odisha and north Andhra on Friday morning,




ies

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.




ies

Mumbai gangrape: Photojournalist identifies assaulters, 'faints' in court during trial

The 23-year-old victim was gangraped in the Shakti Mill compound on August 22.




ies

3 more babies die in Malda hospital, toll rises to 18

15 new-born babies, brought to the Malda Hospital in critical condition, have died since Tuesday.




ies

Government agencies should keep off "gold hunt": Pawar

The search started after a seer said he was told in his dreams that the buried gold was in Unnao.




ies

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.




ies

BJP parades ashes of Patna blast victims as Modi set to visit families tomorrow

BJP stressed the asthi yatra is a message to Hindus and Muslims to fight terrorism together.




ies

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.