Empirical Study on CSS Preprocessors: Insights and Findings

An empirical study
on the use of 
CSS Preprocessors
Davood Mazinanian - Nikolaos Tsantalis
Department of Computer Science and Software Engineering
Concordia University - Montreal
Agenda
Introduction to CSS and CSS preprocessors
Motivation
The main research question:
How developers use CSS
preprocessor features?
2 / 24
Cascading Style Sheets (CSS)
The standard styling language
Target documents
Limitations of CSS
Was initially designed for non-developers!
Duplication is pervasive!
selector
  { 
property
: 
value
; }
3 / 24
Declaration
CSS Preprocessors
Super-language for CSS  for generating CSS
Adding missing features:
Variables, functions, loops, conditional
statements, mathematical operations, etc.
4 / 24
Motivation
Credits: css-tricks.com/poll-results-popularity-of-css-preprocessors/
5
Motivation
Collecting information to:
Support devising automatic migration
techniques
Support developing preprocessor
refactoring approaches
6 / 24
Empirical Study
Subjects
80 websites (40 websites for Less, 40 for Sass)
220 Less and 738 Sass files (total 958 files)
Found preprocessor files using Google! 
E.g.: filetype:less
Parse
LESS
SASS
AST
Query
CSV
files
Analysis
Results
7 / 24
Feature #1: Nesting
Goals: better organization, avoiding
duplication in selector names
table 
{
    
border: 
none
;
    
outline
: 0;
}
table:hover 
{
    
font-weight
:
 
bold
;
}
table td 
{
    
margin
: 
3px
;
}
table 
{
     
border: 
none
;
    
outline
: 0;
    &:
hover
 {
        
font-weight
:
 
bold
;
    }
  
    
td 
{
       
margin
: 
3px
;
    } 
}
CSS
Preprocessor
8 / 24
Feature #1: Nesting
By far the most-used feature of CSS
preprocessors!
Out of all 34065 selectors, 21870 are nested,
or have nested selectors (65%)
Question: Are they used even for shallow
nesting?
9 / 24
Feature #1: Nesting
How deep was nesting?
10 / 24
Feature #1: Nesting
Conclusions
Every migration tool / technique should
support “migration to nesting”!
Developers nest selectors, even if the level of
nesting is not very deep!
11 / 24
Feature #2: Mixins
Goal: increasing re-usability and
comprehensibility of code
Preprocessor
CSS
table 
{
  
margin: 
5px
;
  .border
(
1px
,
 
3px
,
 
0
)
}
.border(
@b
, 
@r
, 
@o
) 
{
  
border
:
 
solid 
@b
 black
;
  
border-radius
: @r;
  
outline
: 
ridge black 
@o;
}
table 
{
  margin: 
5px
;
  
border
:
 
solid 1px black
;
  
border-radius
: 
3px
;
  
outline
: 
ridge black 0
;
}
12 / 24
Feature #2: Mixins
Mixin calls: how much re-usability?
13 / 24
Feature #2: Mixins
Size of Mixins
80% of Mixins have less than 5 declarations
14 / 24
Feature #2: Mixins
Size of Mixins
15 / 24
Feature #2: Mixins
Number of parameters
36%
25%
31%
30%
16 / 24
Feature #2: Mixins
Parameter re-use
Mixins with parameters used in more than
one type
 of declaration
Sass: 13%
Less: 18%
# Parameters 
and 
# declarations 
inside
Mixins are 
not
 correlated
Spearman Rho = 0.17 with p-value = 3.471e-05
.mixin
(@param1) {
  
top
: @param1;
  
margin-left
: @param1
}
17 / 24
Feature #2: Mixins
65% of Mixins are used for cross-browser
declarations!
.rounded
(@radius: 2px) {
    -webkit-border-radius
: @radius;
    
-moz-border-radius
: @radius;
    
border-radius
: @radius;
}
18 / 24
Feature #2: Mixins
Conclusions
Mixins having cross-browser declarations are
preferred
Perhaps because they have greater impact on
minimizing duplication (to be researched)
Mixins 
do not 
tend to have
Large number of parameters
Large number of declarations
Thus, it is not preferred to have large Mixins
with too many parameters
19 / 24
Feature #3: Extend
Minimizing duplication by grouping
selectors
table 
{
  
float: 
left
;
  
&:
extend
(
.zeroSpacing
)
}
.zeroSpacing 
{
  
margin
:
 
0
;
  
padding
: 
0
;
}
table 
{
  float: 
left
;
}
.zeroSpacing , table 
{
  
margin
:
 
0
;
  
padding
: 
0
;
}
Preprocessor
CSS
20 / 24
Feature #3: Extend
Much less used than Mixins
No usages 
in the 
Less
 dataset,
Only 15% 
of 
Sass
 files had an Extend usage
inside
Reason: order dependencies
Using Extend will change the order of the
selectors that may lead to breaking the
presentation
21 / 24
Feature #3: Extend
Breaking the presentation by using Extend!
table 
{
  
float: 
left
;
  
&:
extend
(
.zeroSpacing
)
}
table
 {
  
margin
: 
2px
;
}
.zeroSpacing 
{
  
margin
:
 
0
;
  
padding
: 
0
;
}
table 
{
  
float: 
left
;
}
table
 {
  
margin
: 
2px
;
}
.zeroSpacing, table 
{
  
margin
:
 
0
;
  
padding
: 
0
;
}
Preprocessor
CSS
22 / 24
Feature #3: Extend
Conclusions
Prefer to use Mixin instead of Extend
Even though it may produce more duplication in
the resulting file
If removing duplication by using Extend,
check the overriding dependencies!
23 / 24
Summary
 
Using preprocessors is a trend!
Developers use 
Nesting
 whenever possible!
Mixins
:
Are short (less than 5 declarations),
Mostly have zero or one parameters
Are usually used for cross-browser declarations!
Developers prefer using 
Mixins
 over 
Extends
!
It is not always safe to use Extend
24 / 24
Slide Note
Embed
Share

Exploring the utilization of CSS preprocessors in web development through an empirical study conducted by Davood Mazinanian and Nikolaos Tsantalis from Concordia University. The study delves into the motivations behind using CSS preprocessors, developers' preferences, features offered by preprocessors, and practical applications in website design. It also investigates the challenges faced and potential benefits in adopting preprocessors for improved styling of web content. Overall, the research sheds light on the significance of CSS preprocessors in enhancing the efficiency and flexibility of front-end development practices.

  • CSS Preprocessors
  • Web Development
  • Empirical Study
  • Concordia University
  • Front-end

Uploaded on Sep 09, 2024 | 0 Views


Download Presentation

Please find below an Image/Link to download the presentation.

The content on the website is provided AS IS for your information and personal use only. It may not be sold, licensed, or shared on other websites without obtaining consent from the author. Download presentation by click this link. If you encounter any issues during the download, it is possible that the publisher has removed the file from their server.

E N D

Presentation Transcript


  1. An empirical study on the use of CSS Preprocessors Davood Mazinanian - Nikolaos Tsantalis Department of Computer Science and Software Engineering Concordia University - Montreal

  2. Agenda Introduction to CSS and CSS preprocessors Motivation The main research question: How developers use CSS preprocessor features? 2 / 24

  3. Cascading Style Sheets (CSS) The standard styling language Target documents selector { property: value; } Declaration Limitations of CSS Was initially designed for non-developers! Duplication is pervasive! Introduction Motivation Empirical Study 3 / 24

  4. CSS Preprocessors Super-language for CSS for generating CSS Adding missing features: Variables, functions, loops, conditional statements, mathematical operations, etc. Introduction Motivation Empirical Study 4 / 24

  5. Motivation Which preprocessor do they prefer? What percentage of developers use preprocessors? Not used 46% Less 51% Sass 41% Used 54% Stylus 6% Other 2% Credits: css-tricks.com/poll-results-popularity-of-css-preprocessors/ Introduction Motivation Empirical Study 5

  6. Motivation Collecting information to: Support devising automatic migration techniques Support developing preprocessor refactoring approaches Introduction Motivation Empirical Study 6 / 24

  7. Empirical Study Subjects 80 websites (40 websites for Less, 40 for Sass) 220 Less and 738 Sass files (total 958 files) Found preprocessor files using Google! E.g.: filetype:less AST Results Parse Query Analysis LESS SASS CSV files Introduction Motivation Empirical Study 7 / 24

  8. Feature #1: Nesting Goals: better organization, avoiding duplication in selector names table { } table { border: none; outline: 0; border: none; outline: 0; &:hover { } td { margin: 3px; } } Preprocessor table:hover { font-weight: bold; } font-weight: bold; table td { margin: 3px; } CSS Introduction Motivation Empirical Study 8 / 24

  9. Feature #1: Nesting By far the most-used feature of CSS preprocessors! Out of all 34065 selectors, 21870 are nested, or have nested selectors (65%) Question: Are they used even for shallow nesting? Introduction Motivation Empirical Study 9 / 24

  10. Feature #1: Nesting How deep was nesting? Introduction Motivation Empirical Study 10 / 24

  11. Feature #1: Nesting Conclusions Every migration tool / technique should support migration to nesting ! Developers nest selectors, even if the level of nesting is not very deep! Introduction Motivation Empirical Study 11 / 24

  12. Feature #2: Mixins Goal: increasing re-usability and comprehensibility of code table { margin: 5px; border: solid 1px black; border-radius: 3px; outline: ridge black 0; } table { margin: 5px; .border(1px, 3px, 0) } .border(@b, @r, @o) { border: solid @b black; border-radius: @r; outline: ridge black @o; } Preprocessor CSS Introduction Motivation Empirical Study 12 / 24

  13. Feature #2: Mixins Mixin calls: how much re-usability? Introduction Motivation Empirical Study 13 / 24

  14. Feature #2: Mixins Size of Mixins 80% of Mixins have less than 5 declarations Introduction Motivation Empirical Study 14 / 24

  15. Feature #2: Mixins Size of Mixins Introduction Motivation Empirical Study 15 / 24

  16. Feature #2: Mixins Number of parameters 30% 31% 25% 36% Introduction Motivation Empirical Study 16 / 24

  17. Feature #2: Mixins Parameter re-use Mixins with parameters used in more than one type of declaration .mixin(@param1) { top: @param1; margin-left: @param1 } Sass: 13% Less: 18% # Parameters and # declarations inside Mixins are not correlated Spearman Rho = 0.17 with p-value = 3.471e-05 Introduction Motivation Empirical Study 17 / 24

  18. Feature #2: Mixins 65% of Mixins are used for cross-browser declarations! .rounded(@radius: 2px) { -webkit-border-radius: @radius; -moz-border-radius: @radius; border-radius: @radius; } Introduction Motivation Empirical Study 18 / 24

  19. Feature #2: Mixins Conclusions Mixins having cross-browser declarations are preferred Perhaps because they have greater impact on minimizing duplication (to be researched) Mixins do not tend to have Large number of parameters Large number of declarations Thus, it is not preferred to have large Mixins with too many parameters Introduction Motivation Empirical Study 19 / 24

  20. Feature #3: Extend Minimizing duplication by grouping selectors table { float: left; } table { float: left; &:extend(.zeroSpacing) } .zeroSpacing , table { margin: 0; padding: 0; } .zeroSpacing { margin: 0; padding: 0; } Preprocessor CSS Introduction Motivation Empirical Study 20 / 24

  21. Feature #3: Extend Much less used than Mixins No usages in the Less dataset, Only 15% of Sass files had an Extend usage inside Reason: order dependencies Using Extend will change the order of the selectors that may lead to breaking the presentation Introduction Motivation Empirical Study 21 / 24

  22. Feature #3: Extend Breaking the presentation by using Extend! table { float: left; } table { float: left; &:extend(.zeroSpacing) } table { margin: 2px; } table { margin: 2px; } .zeroSpacing, table { margin: 0; padding: 0; } .zeroSpacing { margin: 0; padding: 0; } Preprocessor CSS Introduction Motivation Empirical Study 22 / 24

  23. Feature #3: Extend Conclusions Prefer to use Mixin instead of Extend Even though it may produce more duplication in the resulting file If removing duplication by using Extend, check the overriding dependencies! Introduction Motivation Empirical Study 23 / 24

  24. Summary Using preprocessors is a trend! Developers use Nesting whenever possible! Mixins: Are short (less than 5 declarations), Mostly have zero or one parameters Are usually used for cross-browser declarations! Developers prefer using Mixins over Extends! It is not always safe to use Extend 24 / 24

More Related Content

giItT1WQy@!-/#giItT1WQy@!-/#giItT1WQy@!-/#giItT1WQy@!-/#giItT1WQy@!-/#