18 Nov

We asked web developers we admire: “What about building websites has you interested this year?”

For the first time ever here on CSS-Tricks, we're going to do an end-of-year series of posts. Like an Advent calendar riff, only look at us, we're beating the Advent calendar rush! We'll be publishing several articles a day from a variety of web developers we look up to, where gave them all the same prompt:

What about building websites has you interested this year?

We're aiming for a bit of self-reflection and real honesty. As in, not what … Read article

The post We asked web developers we admire: “What about building websites has you interested this year?” appeared first on CSS-Tricks.

18 Nov

The Department of Useless Images

Gerry McGovern:

The Web is smothering in useless images. These clichéd, stock images communicate absolutely nothing of value, interest or use. They are one of the worst forms of digital pollution because they take up space on the page, forcing more useful content out of sight. They also slow down the site’s ability to download quickly.

:laugh: :cry:

It's so true, isn't it? How much bandwidth and electricity is spent sending middle-aged-man-staring-into-camera.jpg?

Great photography can be a powerful emotional … Read article

The post The Department of Useless Images appeared first on CSS-Tricks.

15 Nov

The Amazingly Useful Tools from Yoksel

I find myself web searching for some tool by Yoksel at least every month. I figured I'd list out some of my favorites here in case you aren't aware of them.

Need to duo-tone an image? SVG filters can do that. Lentie Ward wrote about it for us, and Yoksel has a tool to create the filters yourself. Let's say you have an SVG you want to use as a CSS background-image? Drop it in this URL-encoder

Read article

The post The Amazingly Useful Tools from Yoksel appeared first on CSS-Tricks.

15 Nov

How We Perform Frontend Testing on StackPath’s Customer Portal

Nice post from Thomas Ladd about how their front-end team does testing. The list feels like a nice place to be:

TypeScript - A language, but you're essentially getting various testing for free (passing the right arguments and types of variables) Jest - Unit tests. JavaScript functions are doing the right stuff. Works with React. Cypress - Integration tests. Page loads, do stuff with page, expected things happen in DOM. Thomas says their end-to-end tests (e.g. hitting services) are

Read article

The post How We Perform Frontend Testing on StackPath’s Customer Portal appeared first on CSS-Tricks.

14 Nov

Learn UI Design

Erik Kennedy's course Learn UI Design is open for enrollment for less than a week. Disclosure, that link is our affiliate link. I'm linking to it here because I think this is worthy of your time and money if you're looking to become a good UI designer.

I think of Erik sorta like the Wes Bos of design teaching. He really gets into the nitty-gritty and the why of good design. Design is tricky in that way. Adjusting some colors, … Read article

The post Learn UI Design appeared first on CSS-Tricks.

14 Nov

Finally, it Will Be Easy to Change the Color of List Bullets

In my germinating years, the general advice was this:

<ul>
  <li><span>List item</span></li>
  <!-- ... -->
</ul>
li { color: red; } /* bullet */
li span (color: black; } /* text */

Not terrible, but not great. You're "resetting" everything at the span level, so it gets more complicated the more you do.

Things are getting much easier. Let's take a walk through this world getting more modern as we go.

An alternative was to rip off the default list … Read article

The post Finally, it Will Be Easy to Change the Color of List Bullets appeared first on CSS-Tricks.

13 Nov

Oh Hey, Padding Percentage is Based on the Parent Element’s Width

I learned something about percentage-based (%) padding today that I had totally wrong in my head! I always thought that percentage padding was based on the element itself. So if an element is 1,000 pixels wide with padding-top: 50%, that padding is 500 pixels. It's weird having top padding based on width, but that's how it works — but only sorta. The 50% is based on the parent element's width, not itself. That's the part that confused me. … Read article

The post Oh Hey, Padding Percentage is Based on the Parent Element’s Width appeared first on CSS-Tricks.

09 Oct

Blocking Third-Party Hands from the Cookie Jar

Third-party cookies are set on your computer from domains other than the one that you're actually on right now. For example, if I log into css-tricks.com, I'll get a cookie from css-tricks.com that handles my authentication. But css-tricks.com might also load an image from some other site. A common tactic in online advertising is to render a "tracking pixel" image (well named, right?) that is used to track advertising impressions. That request to another site for the image (say, ad.doubleclick.com) … Read article

The post Blocking Third-Party Hands from the Cookie Jar appeared first on CSS-Tricks.

09 Oct

Blocking Third-Party Hands from the Cookie Jar

Third-party cookies are set on your computer from domains other than the one that you're actually on right now. For example, if I log into css-tricks.com, I'll get a cookie from css-tricks.com that handles my authentication. But css-tricks.com might also load an image from some other site. A common tactic in online advertising is to render a "tracking pixel" image (well named, right?) that is used to track advertising impressions. That request to another site for the image (say, ad.doubleclick.com) … Read article

The post Blocking Third-Party Hands from the Cookie Jar appeared first on CSS-Tricks.

FAF deciding on filters on post to be syndicated:

Adaptive Loading - Improving Web Performance on low-end devices

Array ( [post_title] => Adaptive Loading - Improving Web Performance on low-end devices [post_content] =>

Adaptive Loading: Do not just respond based on screen size, adapt based on actual device hardware.

Any user can have a slow experience. In a world with widely varying device capabilities, a "one-size" fits all experience may not always work. Sites that delight users on high-end devices can be unusable on low-end ones, particularly on median mobile and desktop hardware and in emerging markets. What if we could adapt how we deliver pages to better cater for our user's constraints? 🤔

In our Chrome Dev Summit talk, Facebook's Nate Schloss and I talk about Adaptive Loading - this pattern ...

This allows users to get an experience best suited to their constraints.

The use-cases adaptive loading unlocks include:

There are a number of signals we can use for Adaptive Loading, including:

In our talk, we cover real-world examples of these ideas being used in sites such as Facebook, eBay, Instagram and others. Check out 24mins in where Nate walks through how Facebook uses some of these ideas in production, via device grouping:

We also released a new (experimental) set of React Hooks & Utilities for adding adaptive-loading techniques to your React apps.

GitHub logo GoogleChromeLabs / react-adaptive-hooks

Deliver experiences best suited to a user's device and network constraints

React Adaptive Loading Hooks & Utilities · Build Status npm bundle size

Deliver experiences best suited to a user's device and network constraints (experimental)

This is a suite of React Hooks and utilities for adaptive loading based on a user's:

It can be used to add patterns for adaptive resource loading, data-fetching, code-splitting and capability toggling.

Objective

Make it easier to target low-end devices while progressively adding high-end-only features on top. Using these hooks and utilities can help you give users a great experience best suited to their device and network constraints.

Installation

npm i react-adaptive-hooks --save or yarn add react-adaptive-hooks

Usage

You can import the hooks you wish to use as follows:

import { useNetworkStatus } from 'react-adaptive-hooks/network'
import { useSaveData } from 'react-adaptive-hooks/save-data'
import { useHardwareConcurrency } from 'react-adaptive-hooks/hardware-concurrency'
import { 
View on GitHub

Our hooks/utilities include the useNetworkStatus React hook for adapting based on network status (effective connection type):

import React from 'react';

import { useNetworkStatus } from 'react-adaptive-hooks/network';

const MyComponent = () => {
  const { effectiveConnectionType } = useNetworkStatus();

  let media;
  switch(effectiveConnectionType) {
    case '2g':
      media = <img src='medium-res.jpg'/>;
      break;
    case '3g':
      media = <img src='high-res.jpg'/>;
      break;
    case '4g':
      media = <video muted controls>...</video>;
      break;
    default:
      media = <video muted controls>...</video>;
      break;
  }

  return <div>{media}</div>;
};

The useSaveData utility for adapting based on the user's browser Data Saver preferences:

import React from 'react';

import { useSaveData } from 'react-adaptive-hooks/save-data';

const MyComponent = () => {
  const { saveData } = useSaveData();
  return (
    <div>
      { saveData ? <img src='...' /> : <video muted controls>...</video> }
    </div>
  );
};

...and the useHardwareConcurrency utility for adapting based on the number of logical CPU processor cores on the user's device:

import React from 'react';

import { useHardwareConcurrency } from 'react-adaptive-hooks/hardware-concurrency';

const MyComponent = () => {
  const { numberOfLogicalProcessors } = useHardwareConcurrency();
  return (
    <div>
      { numberOfLogicalProcessors <= 4 ? <img src='...' /> : <video muted controls>...</video> }
    </div>
  );
};

In the future, we hope to see more examples of infrastructure that can automatically deliver the most optimal bundles of code based on a user's network & device constraints. Between Client Hints and the client-side APIs used above, the building blocks to build something compelling in this space may already exist :)

We hope you'll find Adaptive Loading an interesting addition to your Progressive Enhancement toolbox. Check out our talk to learn more :)

Read more:

[post_excerpt] => Adaptive Loading: Do not just respond based on screen size, adapt based on actual device hardware. Any user can have a slow experience. In a world with widely varying device capabilities, a "one-size" fits all experience may not always work. Sites tha... [post_date_gmt] => 2019-11-18 19:56:47 [post_date] => 2019-11-18 19:56:47 [post_modified_gmt] => 2019-11-18 19:56:47 [post_modified] => 2019-11-18 19:56:47 [post_status] => publish [comment_status] => closed [ping_status] => closed [guid] => https://dev.to/addyosmani/adaptive-loading-improving-web-performance-on-low-end-devices-1m69 [meta] => Array ( [enclosure] => Array ( [0] => ) [syndication_source] => DEV Community [syndication_source_uri] => https://dev.to [syndication_source_id] => https://dev.to/feed [syndication_feed] => https://dev.to/feed [syndication_feed_id] => 15 [syndication_permalink] => https://dev.to/addyosmani/adaptive-loading-improving-web-performance-on-low-end-devices-1m69 [syndication_item_hash] => 951da6e8c02715a55f3906ca74315e78 ) [post_type] => post [post_author] => 4093 [tax_input] => Array ( [category] => Array ( [0] => 21 ) [post_tag] => Array ( ) [post_format] => Array ( ) ) )

Doing filter:faf_link_filter

Adaptive Loading: Do not just respond based on screen size, adapt based on actual device hardware. Any user can have a slow experience. In a world with widely varying device capabilities, a "one-size" fits all experience may not always work. Sites tha...

Adaptive Loading: Do not just respond based on screen size, adapt based on actual device hardware.

Any user can have a slow experience. In a world with widely varying device capabilities, a "one-size" fits all experience may not always work. Sites that delight users on high-end devices can be unusable on low-end ones, particularly on median mobile and desktop hardware and in emerging markets. What if we could adapt how we deliver pages to better cater for our user's constraints? 🤔

In our Chrome Dev Summit talk, Facebook's Nate Schloss and I talk about Adaptive Loading - this pattern ...

This allows users to get an experience best suited to their constraints.

The use-cases adaptive loading unlocks include:

There are a number of signals we can use for Adaptive Loading, including:

In our talk, we cover real-world examples of these ideas being used in sites such as Facebook, eBay, Instagram and others. Check out 24mins in where Nate walks through how Facebook uses some of these ideas in production, via device grouping:

We also released a new (experimental) set of React Hooks & Utilities for adding adaptive-loading techniques to your React apps.

GitHub logo GoogleChromeLabs / react-adaptive-hooks

Deliver experiences best suited to a user's device and network constraints

React Adaptive Loading Hooks & Utilities · Build Status npm bundle size

Deliver experiences best suited to a user's device and network constraints (experimental)

This is a suite of React Hooks and utilities for adaptive loading based on a user's:

It can be used to add patterns for adaptive resource loading, data-fetching, code-splitting and capability toggling.

Objective

Make it easier to target low-end devices while progressively adding high-end-only features on top. Using these hooks and utilities can help you give users a great experience best suited to their device and network constraints.

Installation

npm i react-adaptive-hooks --save or yarn add react-adaptive-hooks

Usage

You can import the hooks you wish to use as follows:

import { useNetworkStatus } from 'react-adaptive-hooks/network'
import { useSaveData } from 'react-adaptive-hooks/save-data'
import { useHardwareConcurrency } from 'react-adaptive-hooks/hardware-concurrency'
import { 
…
View on GitHub

Our hooks/utilities include the useNetworkStatus React hook for adapting based on network status (effective connection type):

import React from 'react';

import { useNetworkStatus } from 'react-adaptive-hooks/network';

const MyComponent = () => {
  const { effectiveConnectionType } = useNetworkStatus();

  let media;
  switch(effectiveConnectionType) {
    case '2g':
      media = <img src='medium-res.jpg'/>;
      break;
    case '3g':
      media = <img src='high-res.jpg'/>;
      break;
    case '4g':
      media = <video muted controls>...</video>;
      break;
    default:
      media = <video muted controls>...</video>;
      break;
  }

  return <div>{media}</div>;
};

The useSaveData utility for adapting based on the user's browser Data Saver preferences:

import React from 'react';

import { useSaveData } from 'react-adaptive-hooks/save-data';

const MyComponent = () => {
  const { saveData } = useSaveData();
  return (
    <div>
      { saveData ? <img src='...' /> : <video muted controls>...</video> }
    </div>
  );
};

...and the useHardwareConcurrency utility for adapting based on the number of logical CPU processor cores on the user's device:

import React from 'react';

import { useHardwareConcurrency } from 'react-adaptive-hooks/hardware-concurrency';

const MyComponent = () => {
  const { numberOfLogicalProcessors } = useHardwareConcurrency();
  return (
    <div>
      { numberOfLogicalProcessors <= 4 ? <img src='...' /> : <video muted controls>...</video> }
    </div>
  );
};

In the future, we hope to see more examples of infrastructure that can automatically deliver the most optimal bundles of code based on a user's network & device constraints. Between Client Hints and the client-side APIs used above, the building blocks to build something compelling in this space may already exist :)

We hope you'll find Adaptive Loading an interesting addition to your Progressive Enhancement toolbox. Check out our talk to learn more :)

Read more:

Doing filter:faf_remove_html

Doing filter:faf_post_expirator

Decide filter: Returning post, everything seems orderly :Adaptive Loading - Improving Web Performance on low-end devices

Array ( [post_title] => Adaptive Loading - Improving Web Performance on low-end devices [post_content] =>

Adaptive Loading: Do not just respond based on screen size, adapt based on actual device hardware.

Any user can have a slow experience. In a world with widely varying device capabilities, a "one-size" fits all experience may not always work. Sites that delight users on high-end devices can be unusable on low-end ones, particularly on median mobile and desktop hardware and in emerging markets. What if we could adapt how we deliver pages to better cater for our user's constraints? 🤔

In our Chrome Dev Summit talk, Facebook's Nate Schloss and I talk about Adaptive Loading - this pattern ...

Delivers a fast core experience to all users (including low-end devices) Progressively adds high-end-only features, if a user's network and hardware can handle it.

This allows users to get an experience best suited to their constraints.

The use-cases adaptive loading unlocks include:

Serving low-quality images & videos on slow networks Loading non-critical JavaScript for interactivity only on fast CPUs Throttling the frame-rate of Animations on low-end devices Avoiding computationally heavy operations on low-end devices Block 3rd-party scripts on slower devices

There are a number of signals we can use for Adaptive Loading, including:

Network - for fine-tuning data transfer to use less bandwidth (via navigator.connection.effectiveType). We can also leverage the user's Data Saver preferences (via navigator.connection.saveData) Memory - for reducing memory consumption on low-end devices (via navigator.deviceMemory) CPU core count - for limiting costly JavaScript execution and reducing CPU intensive logic when a device can't handle it well (via navigator.hardwareConcurrency). This is because JavaScript execution is CPU bound.

In our talk, we cover real-world examples of these ideas being used in sites such as Facebook, eBay, Instagram and others. Check out 24mins in where Nate walks through how Facebook uses some of these ideas in production, via device grouping:

We also released a new (experimental) set of React Hooks & Utilities for adding adaptive-loading techniques to your React apps.

GoogleChromeLabs / react-adaptive-hooks Deliver experiences best suited to a user's device and network constraints
React Adaptive Loading Hooks & Utilities ·

Deliver experiences best suited to a user's device and network constraints (experimental)

This is a suite of React Hooks and utilities for adaptive loading based on a user's:

Network via effective connection type Data Saver preferences Device memory Logical CPU cores

It can be used to add patterns for adaptive resource loading, data-fetching, code-splitting and capability toggling.

Objective

Make it easier to target low-end devices while progressively adding high-end-only features on top. Using these hooks and utilities can help you give users a great experience best suited to their device and network constraints.

Installation

npm i react-adaptive-hooks --save or yarn add react-adaptive-hooks

Usage

You can import the hooks you wish to use as follows:

import { useNetworkStatus } from 'react-adaptive-hooks/network'
import { useSaveData } from 'react-adaptive-hooks/save-data'
import { useHardwareConcurrency } from 'react-adaptive-hooks/hardware-concurrency'
import { 
…
View on GitHub

Our hooks/utilities include the useNetworkStatus React hook for adapting based on network status (effective connection type):

import React from 'react';

import { useNetworkStatus } from 'react-adaptive-hooks/network';

const MyComponent = () => {
  const { effectiveConnectionType } = useNetworkStatus();

  let media;
  switch(effectiveConnectionType) {
    case '2g':
      media = <img src='medium-res.jpg'/>;
      break;
    case '3g':
      media = <img src='high-res.jpg'/>;
      break;
    case '4g':
      media = <video muted controls>...</video>;
      break;
    default:
      media = <video muted controls>...</video>;
      break;
  }

  return <div>{media}</div>;
};

The useSaveData utility for adapting based on the user's browser Data Saver preferences:

import React from 'react';

import { useSaveData } from 'react-adaptive-hooks/save-data';

const MyComponent = () => {
  const { saveData } = useSaveData();
  return (
    <div>
      { saveData ? <img src='...' /> : <video muted controls>...</video> }
    </div>
  );
};

...and the useHardwareConcurrency utility for adapting based on the number of logical CPU processor cores on the user's device:

import React from 'react';

import { useHardwareConcurrency } from 'react-adaptive-hooks/hardware-concurrency';

const MyComponent = () => {
  const { numberOfLogicalProcessors } = useHardwareConcurrency();
  return (
    <div>
      { numberOfLogicalProcessors <= 4 ? <img src='...' /> : <video muted controls>...</video> }
    </div>
  );
};

In the future, we hope to see more examples of infrastructure that can automatically deliver the most optimal bundles of code based on a user's network & device constraints. Between Client Hints and the client-side APIs used above, the building blocks to build something compelling in this space may already exist :)

We hope you'll find Adaptive Loading an interesting addition to your Progressive Enhancement toolbox. Check out our talk to learn more :)

Read more:

React Adaptive Loading hooks and utilities Sophisticated Adaptive Loading Strategies from Tinder Web engineering Connection-Aware Components in Angular Serving Adaptive Components Using the Network Information API with Vue and Web Components Adaptive serving based on network quality [post_excerpt] => Adaptive Loading: Do not just respond based on screen size, adapt based on actual device hardware. Any user can have a slow experience. In a world with widely varying device capabilities, a "one-size" fits all experience may not always work. Sites tha... [post_date_gmt] => 2019-11-18 19:56:47 [post_date] => 2019-11-18 19:56:47 [post_modified_gmt] => 2019-11-18 19:56:47 [post_modified] => 2019-11-18 19:56:47 [post_status] => publish [comment_status] => closed [ping_status] => closed [guid] => https://dev.to/addyosmani/adaptive-loading-improving-web-performance-on-low-end-devices-1m69 [meta] => Array ( [enclosure] => Array ( [0] => ) [syndication_source] => DEV Community [syndication_source_uri] => https://dev.to [syndication_source_id] => https://dev.to/feed [syndication_feed] => https://dev.to/feed [syndication_feed_id] => 15 [syndication_permalink] => https://dev.to/addyosmani/adaptive-loading-improving-web-performance-on-low-end-devices-1m69 [syndication_item_hash] => 951da6e8c02715a55f3906ca74315e78 [_expiration-date] => 1574546534 [_expiration-date-options] => Array ( [expireType] => delete ) [_expiration-data-status] => saved [faf_process_expire_date] => 1574546534 ) [post_type] => post [post_author] => 4093 [tax_input] => Array ( [category] => Array ( [0] => 21 ) [post_tag] => Array ( ) [post_format] => Array ( ) ) [post_except] => Adaptive Loading: Do not just respond based on screen size, adapt based on actual device hardware. Any user can have a slow experience. In a world with widely varying device capabilities, a "one-size" fits all experience may not always work. Sites tha... )

FAF deciding on filters on post to be syndicated:

The 7 Most Popular DEV Posts from the Past Week

Array ( [post_title] => The 7 Most Popular DEV Posts from the Past Week [post_content] =>

Every Monday we round up the previous week's top posts based on traffic, engagement, and a hint of editorial curation. The typical week starts on Monday and ends on Sunday, but don't worry, we take into account posts that are published later in the week. ❤️

1. Dino Days Are Over

Johan, a senior developer, felt like they had to 'start all over again' - this is a story about breaking old habits, getting up to speed, and all the learnings along the way.

2. Less JavaScript

Adrian shares a list of UI elements that can be created using only CSS - tool tips, text truncation, toggles, and more.

3. Let's Play

Francesco shares several CSS games for those who prefer learning through gamification! There are Flexbox games, CSS grid games, and more.

4. Proceed With Care

Martin shows us an example of the Same-Origin Policy and how we can use CORS to allow cross-origin requests when required.

5. Malicious Programs

Want to render ransomeware inept? Victoria shares their low-tech solution.

6. Lighter & Faster

Sarthak explains why they started using Sublime Text again, and which plugins they found helpful for a seamless switch.

7. Every. Single. Day.

Mateusz shares the Linux commands and tricks they use on a daily basis - from port forwarding to reading logs.

That's it for our weekly wrap up! Keep an eye on dev.to this week for daily content and discussions...and if you miss anything, we'll be sure to recap it next Monday!

[post_excerpt] => Every Monday we round up the previous week's top posts based on traffic, engagement, and a hint of editorial curation. The typical week starts on Monday and ends on Sunday, but don't worry, we take into account posts that are published later in the wee... [post_date_gmt] => 2019-11-18 19:24:01 [post_date] => 2019-11-18 19:24:01 [post_modified_gmt] => 2019-11-18 19:24:01 [post_modified] => 2019-11-18 19:24:01 [post_status] => publish [comment_status] => closed [ping_status] => closed [guid] => https://dev.to/devteam/the-7-most-popular-dev-posts-from-the-past-week-4eil [meta] => Array ( [enclosure] => Array ( [0] => ) [syndication_source] => DEV Community [syndication_source_uri] => https://dev.to [syndication_source_id] => https://dev.to/feed [syndication_feed] => https://dev.to/feed [syndication_feed_id] => 15 [syndication_permalink] => https://dev.to/devteam/the-7-most-popular-dev-posts-from-the-past-week-4eil [syndication_item_hash] => d87fa5e3bc68d428678b8220f0de288f ) [post_type] => post [post_author] => 4141 [tax_input] => Array ( [category] => Array ( [0] => 21 ) [post_tag] => Array ( ) [post_format] => Array ( ) ) )

Doing filter:faf_link_filter

Every Monday we round up the previous week's top posts based on traffic, engagement, and a hint of editorial curation. The typical week starts on Monday and ends on Sunday, but don't worry, we take into account posts that are published later in the wee...

Every Monday we round up the previous week's top posts based on traffic, engagement, and a hint of editorial curation. The typical week starts on Monday and ends on Sunday, but don't worry, we take into account posts that are published later in the week. ❤️

1. Dino Days Are Over

Johan, a senior developer, felt like they had to 'start all over again' - this is a story about breaking old habits, getting up to speed, and all the learnings along the way.

2. Less JavaScript

Adrian shares a list of UI elements that can be created using only CSS - tool tips, text truncation, toggles, and more.

3. Let's Play

Francesco shares several CSS games for those who prefer learning through gamification! There are Flexbox games, CSS grid games, and more.

4. Proceed With Care

Martin shows us an example of the Same-Origin Policy and how we can use CORS to allow cross-origin requests when required.

5. Malicious Programs

Want to render ransomeware inept? Victoria shares their low-tech solution.

6. Lighter & Faster

Sarthak explains why they started using Sublime Text again, and which plugins they found helpful for a seamless switch.

7. Every. Single. Day.

Mateusz shares the Linux commands and tricks they use on a daily basis - from port forwarding to reading logs.

That's it for our weekly wrap up! Keep an eye on dev.to this week for daily content and discussions...and if you miss anything, we'll be sure to recap it next Monday!

Doing filter:faf_remove_html

Doing filter:faf_post_expirator

Decide filter: Returning post, everything seems orderly :The 7 Most Popular DEV Posts from the Past Week

Array ( [post_title] => The 7 Most Popular DEV Posts from the Past Week [post_content] =>

Every Monday we round up the previous week's top posts based on traffic, engagement, and a hint of editorial curation. The typical week starts on Monday and ends on Sunday, but don't worry, we take into account posts that are published later in the week. ❤️

1. Dino Days Are Over

Johan, a senior developer, felt like they had to 'start all over again' - this is a story about breaking old habits, getting up to speed, and all the learnings along the way.

How to not be a dinosaur. Johan van Tongeren ・ Nov 13 ・ 9 min read
#React #javascript #productivity #career
2. Less JavaScript

Adrian shares a list of UI elements that can be created using only CSS - tool tips, text truncation, toggles, and more.

You can create these elements without JavaScript Adrian Bece ・ Nov 12 ・ 3 min read
#webdev #html #css
3. Let's Play

Francesco shares several CSS games for those who prefer learning through gamification! There are Flexbox games, CSS grid games, and more.

💪 Train your CSS skills with online games 👾 Francesco Leardini ・ Nov 15 ・ 4 min read
#design #productivity #webdev #layout
4. Proceed With Care

Martin shows us an example of the Same-Origin Policy and how we can use CORS to allow cross-origin requests when required.

Understanding CORS Martin Splitt ・ Nov 12 ・ 7 min read
#cors #javascript #security #webdev
5. Malicious Programs

Want to render ransomeware inept? Victoria shares their low-tech solution.

A cron job that could save you from a ransomware attack Victoria ・ Nov 13 ・ 5 min read
#security #serverless #showdev #devops
6. Lighter & Faster

Sarthak explains why they started using Sublime Text again, and which plugins they found helpful for a seamless switch.

Switching back to my old buddy Sublime Text from VS Code 🤷🏻‍♂️ Sarthak Sharma ・ Nov 12 ・ 4 min read
#productivity #vscode #webdev #showdev
7. Every. Single. Day.

Mateusz shares the Linux commands and tricks they use on a daily basis - from port forwarding to reading logs.

Linux's commands and tricks I'm using in my daily job as a developer Mateusz Jarzyna ・ Nov 11 ・ 3 min read
#linux #productivity

That's it for our weekly wrap up! Keep an eye on dev.to this week for daily content and discussions...and if you miss anything, we'll be sure to recap it next Monday!

[post_excerpt] => Every Monday we round up the previous week's top posts based on traffic, engagement, and a hint of editorial curation. The typical week starts on Monday and ends on Sunday, but don't worry, we take into account posts that are published later in the wee... [post_date_gmt] => 2019-11-18 19:24:01 [post_date] => 2019-11-18 19:24:01 [post_modified_gmt] => 2019-11-18 19:24:01 [post_modified] => 2019-11-18 19:24:01 [post_status] => publish [comment_status] => closed [ping_status] => closed [guid] => https://dev.to/devteam/the-7-most-popular-dev-posts-from-the-past-week-4eil [meta] => Array ( [enclosure] => Array ( [0] => ) [syndication_source] => DEV Community [syndication_source_uri] => https://dev.to [syndication_source_id] => https://dev.to/feed [syndication_feed] => https://dev.to/feed [syndication_feed_id] => 15 [syndication_permalink] => https://dev.to/devteam/the-7-most-popular-dev-posts-from-the-past-week-4eil [syndication_item_hash] => d87fa5e3bc68d428678b8220f0de288f [_expiration-date] => 1574546535 [_expiration-date-options] => Array ( [expireType] => delete ) [_expiration-data-status] => saved [faf_process_expire_date] => 1574546535 ) [post_type] => post [post_author] => 4141 [tax_input] => Array ( [category] => Array ( [0] => 21 ) [post_tag] => Array ( ) [post_format] => Array ( ) ) [post_except] => Every Monday we round up the previous week's top posts based on traffic, engagement, and a hint of editorial curation. The typical week starts on Monday and ends on Sunday, but don't worry, we take into account posts that are published later in the wee... )