Skip to content

Commit 7ec8de4

Browse files
committed
[design] improve form radio and checkbox scroll performace
1 parent 5dfe1b9 commit 7ec8de4

File tree

1 file changed

+61
-42
lines changed

1 file changed

+61
-42
lines changed

‎src/css/form.css‎

Lines changed: 61 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -368,107 +368,126 @@ input[type="radio"]:disabled:focus+label{
368368

369369
input[type="checkbox"]+label .label-icon,
370370
input[type="radio"]+label .label-icon{
371-
content:"";
372371
margin-right:1em;
373-
border-style: solid;
374-
border-width:var(--layout-line-width);
375-
border-color:rgb(var(--form-icon));
376372
width:var(--form-thumb-size);
377373
height:var(--form-thumb-size);
378374
position: relative;
379375
top:0.125em;
380376
display: block;
381377
flex-grow:0;
382378
flex-shrink:0;
379+
z-index:1;
380+
}
381+
382+
input[type="checkbox"]+label .label-icon:before,
383+
input[type="radio"]+label .label-icon:before{
384+
content:"";
385+
border-style: solid;
386+
border-width:var(--layout-line-width);
387+
border-color:rgb(var(--form-icon));
388+
width:100%;
389+
height:100%;
390+
position: absolute;
391+
top:0;
392+
left:0;
393+
display: block;
394+
z-index:2;
383395
transition: border-color var(--layout-timing-extra-fast), border-width var(--layout-timing-extra-fast), box-shadow var(--layout-timing-extra-fast);
384396
}
385397

386-
input[type="checkbox"]:focus+label .label-icon,
387-
input[type="checkbox"]:hover+label .label-icon,
388-
input[type="radio"]:focus+label .label-icon,
389-
input[type="radio"]:hover+label .label-icon{
398+
input[type="checkbox"]:focus+label .label-icon:before,
399+
input[type="checkbox"]:hover+label .label-icon:before,
400+
input[type="radio"]:focus+label .label-icon:before,
401+
input[type="radio"]:hover+label .label-icon:before{
390402
border-color:rgb(var(--form-icon-focus-hover));
391403
box-shadow:var(--form-hover-ring);
392404
}
393405

394-
input[type="checkbox"]:active+label .label-icon,
395-
input[type="radio"]:active+label .label-icon{
406+
input[type="checkbox"]:active+label .label-icon:before,
407+
input[type="radio"]:active+label .label-icon:before{
396408
border-color:rgb(var(--form-icon-active));
397409
box-shadow:var(--form-focus-ring-accent);
398410
}
399411

400-
input[type="checkbox"]:checked+label .label-icon,
401-
input[type="radio"]:checked+label .label-icon{
412+
input[type="checkbox"]:checked+label .label-icon:before,
413+
input[type="radio"]:checked+label .label-icon:before{
402414
border-color:rgb(var(--form-icon-checked));
403415
}
404416

405-
input[type="checkbox"]+label .label-icon{
417+
input[type="checkbox"]+label .label-icon:before{
406418
border-radius:0.25em;
407419
}
408420

409-
input[type="radio"]+label .label-icon{
421+
input[type="radio"]+label .label-icon:before{
410422
border-radius:50%;
411423
}
412424

413-
input[type="checkbox"]:checked+label .label-icon,
414-
input[type="radio"]:checked+label .label-icon{
425+
input[type="checkbox"]:disabled+label .label-icon:before,
426+
input[type="checkbox"]:disabled:hover+label .label-icon:before,
427+
input[type="checkbox"]:disabled:focus+label .label-icon:before,
428+
input[type="radio"]:disabled+label .label-icon:before,
429+
input[type="radio"]:disabled:hover+label .label-icon:before,
430+
input[type="radio"]:disabled:focus+label .label-icon:before{
431+
border-color:rgb(var(--form-icon-disabled));
432+
box-shadow: none;
433+
}
434+
435+
input[type="checkbox"]:checked+label .label-icon:before,
436+
input[type="radio"]:checked+label .label-icon:before{
415437
border-top-width:calc(var(--form-thumb-size) /2);
416438
border-bottom-width:calc(var(--form-thumb-size) /2);
417439
border-left-width:calc(var(--form-thumb-size) /2);
418440
border-right-width:calc(var(--form-thumb-size) /2);
419441
}
420442

421-
input[type="checkbox"]:disabled+label .label-icon,
422-
input[type="checkbox"]:disabled:hover+label .label-icon,
423-
input[type="checkbox"]:disabled:focus+label .label-icon,
424-
input[type="radio"]:disabled+label .label-icon,
425-
input[type="radio"]:disabled:hover+label .label-icon,
426-
input[type="radio"]:disabled:focus+label .label-icon{
427-
border-color:rgb(var(--form-icon-disabled));
428-
box-shadow: none;
429-
}
430-
431443
input[type="checkbox"]+label .label-icon:after,
432444
input[type="radio"]+label .label-icon:after{
433445
content:"";
434446
position: absolute;
435-
top:50%;
436-
left:50%;
437447
display: block;
438-
opacity:0;
439-
transition:opacityvar(--layout-timing-extra-fast),background-colorvar(--layout-timing-extra-fast), transform var(--layout-timing-fast);
448+
z-index:3;
449+
transition:transformvar(--layout-timing-extra-fast),opacityvar(--layout-timing-extra-fast);
440450
}
441451

442452
input[type="checkbox"]+label .label-icon:after{
443-
border-right:calc(var(--layout-line-width) /2) solid rgb(var(--form-icon-symbol));
444-
border-bottom:calc(var(--layout-line-width) /2) solid rgb(var(--form-icon-symbol));
445-
width:calc(var(--form-thumb-size) /4);
446-
height:calc(var(--form-thumb-size) /2);
447-
transform:translate(-50%,-50%) rotate(0deg);
453+
border-right:0.2em solid rgb(var(--form-icon-symbol));
454+
border-bottom:0.2em solid rgb(var(--form-icon-symbol));
455+
box-sizing: content-box;
456+
top:50%;
457+
left:50%;
458+
width:0.2em;
459+
height:0.5em;
460+
opacity:0;
461+
transform-origin: left top;
462+
transform:rotate(0deg) translate(-54%,-58%);
448463
}
449464

450465
input[type="checkbox"]:checked+label .label-icon:after{
451-
transform:translate(-45%,-60%) rotate(45deg);
466+
opacity:1;
467+
transform:rotate(45deg) translate(-54%,-58%);
452468
}
453469

454470
input[type="radio"]+label .label-icon:after{
455471
background-color:rgb(var(--form-icon-symbol));
456472
border-radius:50%;
457-
width:calc(var(--form-thumb-size) /5);
458-
height:calc(var(--form-thumb-size) /5);
459-
transform:translate(-50%,-50%);
473+
top:50%;
474+
left:50%;
475+
width:0.25em;
476+
height:0.25em;
477+
transform:translate(-54%,-58%);
478+
opacity:0;
479+
transition: opacity var(--layout-timing-extra-fast);
460480
}
461481

462-
input[type="checkbox"]:checked+label .label-icon:after,
463482
input[type="radio"]:checked+label .label-icon:after{
464483
opacity:1;
465484
}
466485

467-
input[type="checkbox"]:disabled+label .label-icon:after{
486+
input[type="checkbox"]:disabled+label .label-icon:before{
468487
border-color:rgb(var(--form-icon-symbol-disabled));
469488
}
470489

471-
input[type="radio"]:disabled+label .label-icon:after{
490+
input[type="radio"]:disabled+label .label-icon:before{
472491
background-color:rgb(var(--form-icon-symbol-disabled));
473492
}
474493

0 commit comments

Comments
(0)