Skip to content

Comments cause parent selector output repetition #285

Closed
@argyleink

Description

@argyleink

Bug description

Screen Shot 2022-03-03 at 3 22 42 PM
Screen Shot 2022-03-03 at 3 22 58 PM

Source CSS

progress {
  --_track: hsl(228 100% 90%);
  --_track-size: min(10px, 1ex);
  --_progress: hsl(228 100% 50%);
  --_radius: 1e3px;
  --_indeterminate-track: linear-gradient(to right,
    var(--_track) 45%,
    var(--_progress) 0%,
    var(--_progress) 55%,
    var(--_track) 0%
  );
  --_indeterminate-track-size: 225% 100%;
  --_indeterminate-track-animation: progress-loading 2s infinite ease;
  
  /*  reset  */
  appearance: none;
  border: none;
  
  /*  custom style  */
  position: relative;
  height: var(--_track-size);
  border-radius: var(--_radius);
  overflow: hidden;

  @media (prefers-color-scheme: dark) {
    --_track: hsl(228 20% 30%);
    --_progress: hsl(228 100% 75%);
  }

  &:focus-visible {
    outline-color: var(--_progress);
  }
  
  /*  Safari/Chromium  */
  &[value]::-webkit-progress-bar {
    background-color: var(--_track);
  }
  
  &[value]::-webkit-progress-value {
    background-color: var(--_progress);
    transition: inline-size .25s ease-out;
  }
  
  /*  Firefox  */
  &[value]::-moz-progress-bar {
    background-color: var(--_progress);
  }
  
  /*  indeterminate  */
  &:indeterminate::after {
    content: "";
    inset: 0;
    position: absolute;
    background: var(--_indeterminate-track);
    background-size: var(--_indeterminate-track-size);
    background-position: right; 
    animation: var(--_indeterminate-track-animation);
  }
  
  /*  indeterminate Safari  */
  &:indeterminate::-webkit-progress-bar {
    background: var(--_indeterminate-track);
    background-size: var(--_indeterminate-track-size);
    background-position: right; 
    animation: var(--_indeterminate-track-animation);
  }
  
  /*  indeterminate Firefox  */
  &:indeterminate::-moz-progress-bar {
    background: var(--_indeterminate-track);
    background-size: var(--_indeterminate-track-size);
    background-position: right; 
    animation: var(--_indeterminate-track-animation);
  }
  
  /*  complete  */
  &:not([max])[value="1"]::before,
  &[max="100"][value="100"]::before {
    content: "✓";
    
    position: absolute;
    inset-block: 0;
    inset-inline: auto 0;
    display: flex;
    align-items: center;
    padding-inline-end: max(calc(var(--_track-size) / 4), 3px);

    color: white;
    font-size: calc(var(--_track-size) / 1.25);
  }
}

Expected CSS

progress {
  --_track: hsl(228 100% 90%);
  --_track-size: min(10px, 1ex);
  --_progress: hsl(228 100% 50%);
  --_radius: 1e3px;
  --_indeterminate-track: linear-gradient(to right,
    var(--_track) 45%,
    var(--_progress) 0%,
    var(--_progress) 55%,
    var(--_track) 0%
  );
  --_indeterminate-track-size: 225% 100%;
  --_indeterminate-track-animation: progress-loading 2s infinite ease;
  
  /*  reset  */
  -webkit-appearance: none;
     -moz-appearance: none;
          appearance: none;
  border: none;
  
  /*  custom style  */
  position: relative;
  height: var(--_track-size);
  border-radius: var(--_radius);
  overflow: hidden
}

@media (prefers-color-scheme: dark) {
progress {
    --_track: hsl(228 20% 30%);
    --_progress: hsl(228 100% 75%)
}}
progress:focus-visible {
    outline-color: var(--_progress);
  }
  /*  Safari/Chromium  */
progress[value]::-webkit-progress-bar {
    background-color: var(--_track);
  }
progress[value]::-webkit-progress-value {
    background-color: var(--_progress);
    -webkit-transition: inline-size .25s ease-out;
    transition: inline-size .25s ease-out;
  }
progress {
  
  /*  Firefox  */
}progress[value]::-moz-progress-bar {
    background-color: var(--_progress);
  }progress {
  
  /*  indeterminate  */
}progress:indeterminate::after {
    content: "";
    inset: 0;
    position: absolute;
    background: var(--_indeterminate-track);
    background-size: var(--_indeterminate-track-size);
    background-position: right; 
    -webkit-animation: var(--_indeterminate-track-animation); 
            animation: var(--_indeterminate-track-animation);
  }

  /*  indeterminate Safari  */
progress:indeterminate::-webkit-progress-bar {
    background: var(--_indeterminate-track);
    background-size: var(--_indeterminate-track-size);
    background-position: right; 
    -webkit-animation: var(--_indeterminate-track-animation); 
            animation: var(--_indeterminate-track-animation);
  }
  
  /*  indeterminate Firefox  */
progress:indeterminate::-moz-progress-bar {
    background: var(--_indeterminate-track);
    background-size: var(--_indeterminate-track-size);
    background-position: right; 
    animation: var(--_indeterminate-track-animation);
  }
  
  /*  complete  */
progress[value="1"]:not([max])::before,
  progress[max="100"][value="100"]::before {
    content: "✓";
    
    position: absolute;
    inset-block: 0;
    inset-inline: auto 0;
    display: flex;
    align-items: center;
    -webkit-padding-end: max(calc(var(--_track-size) / 4), 3px);
            padding-inline-end: max(calc(var(--_track-size) / 4), 3px);

    color: white;
    font-size: calc(var(--_track-size) / 1.25);
  }@-webkit-keyframes progress-loading {
  50% {
    background-position: left; 
  }
}@keyframes progress-loading {
  50% {
    background-position: left; 
  }
}

Actual CSS

progress {
  --_track: hsl(228 100% 90%);
  --_track-size: min(10px, 1ex);
  --_progress: hsl(228 100% 50%);
  --_radius: 1e3px;
  --_indeterminate-track: linear-gradient(to right,
    var(--_track) 45%,
    var(--_progress) 0%,
    var(--_progress) 55%,
    var(--_track) 0%
  );
  --_indeterminate-track-size: 225% 100%;
  --_indeterminate-track-animation: progress-loading 2s infinite ease;
  
  /*  reset  */
  -webkit-appearance: none;
     -moz-appearance: none;
          appearance: none;
  border: none;
  
  /*  custom style  */
  position: relative;
  height: var(--_track-size);
  border-radius: var(--_radius);
  overflow: hidden
}@media (prefers-color-scheme: dark) {progress {
    --_track: hsl(228 20% 30%);
    --_progress: hsl(228 100% 75%)
}
  }progress:focus-visible {
    outline-color: var(--_progress);
  }progress {
  
  /*  Safari/Chromium  */
}progress[value]::-webkit-progress-bar {
    background-color: var(--_track);
  }progress[value]::-webkit-progress-value {
    background-color: var(--_progress);
    -webkit-transition: inline-size .25s ease-out;
    transition: inline-size .25s ease-out;
  }progress {
  
  /*  Firefox  */
}progress[value]::-moz-progress-bar {
    background-color: var(--_progress);
  }progress {
  
  /*  indeterminate  */
}progress:indeterminate::after {
    content: "";
    inset: 0;
    position: absolute;
    background: var(--_indeterminate-track);
    background-size: var(--_indeterminate-track-size);
    background-position: right; 
    -webkit-animation: var(--_indeterminate-track-animation); 
            animation: var(--_indeterminate-track-animation);
  }progress {
  
  /*  indeterminate Safari  */
}progress:indeterminate::-webkit-progress-bar {
    background: var(--_indeterminate-track);
    background-size: var(--_indeterminate-track-size);
    background-position: right; 
    -webkit-animation: var(--_indeterminate-track-animation); 
            animation: var(--_indeterminate-track-animation);
  }progress {
  
  /*  indeterminate Firefox  */
}progress:indeterminate::-moz-progress-bar {
    background: var(--_indeterminate-track);
    background-size: var(--_indeterminate-track-size);
    background-position: right; 
    animation: var(--_indeterminate-track-animation);
  }progress {
  
  /*  complete  */
}progress[value="1"]:not([max])::before,
  progress[max="100"][value="100"]::before {
    content: "✓";
    
    position: absolute;
    inset-block: 0;
    inset-inline: auto 0;
    display: flex;
    align-items: center;
    -webkit-padding-end: max(calc(var(--_track-size) / 4), 3px);
            padding-inline-end: max(calc(var(--_track-size) / 4), 3px);

    color: white;
    font-size: calc(var(--_track-size) / 1.25);
  }@-webkit-keyframes progress-loading {
  50% {
    background-position: left; 
  }
}@keyframes progress-loading {
  50% {
    background-position: left; 
  }
}.button-group {
  display: flex;
  flex-flow: row wrap;
  gap: var(--size-3);
}label {
  display: flex;
  align-items: baseline;
  gap: 1ch;
}main {
  display: grid;
  gap: var(--size-3);
  padding: var(--size-3);
  max-inline-size: 80vw;
}body {
  display: grid;
  align-content: center;
  justify-content: center;
  place-content: center;
}

Does it happen with npx @csstools/csstools-cli <plugin-name> minimal-example.css?

No response

Debug output

No response

Extra config

No response

What plugin are you experiencing this issue on?

PostCSS Nesting

Plugin version

7.4.2

What OS are you experiencing this on?

No response

Node Version

17.1.0

Validations

  • Follow our Code of Conduct
  • Check that there isn't already an issue that request the same feature to avoid creating a duplicate.

Would you like to open a PR for this bug?

  • I'm willing to open a PR

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions