Result
選択したグループに該当するアイテムだけが上位にソートされる、という簡易的なもの
Flexboxで並べて、radioボタンで作られたボタンにチェックが入るとorder:-1;
が有効化され、上位に表示されます
css
.products__sort { display: flex; flex-flow: wrap; } .products__wrap { display: flex; flex-flow: wrap; margin: 25px 0 0; } .products .sort-radio { display: none; } .products .sort-radio[id="app"]:checked ~ .products__wrap .product[data-product-type="app"] { order: -1; background-color: #007888; color: #fff; } .products .sort-radio[id="app"]:checked ~ .products__sort .button[for="app"] { background-color: #007888; } .products .sort-radio[id="game"]:checked ~ .products__wrap .product[data-product-type="game"] { order: -1; background-color: #007888; color: #fff; } .products .sort-radio[id="game"]:checked ~ .products__sort .button[for="game"] { background-color: #007888; } .products .sort-radio[id="service"]:checked ~ .products__wrap .product[data-product-type="service"] { order: -1; background-color: #007888; color: #fff; } .products .sort-radio[id="service"]:checked ~ .products__sort .button[for="service"] { background-color: #007888; }
各ボタンが:checkedの時、.products__wrap以下でdata-product-typeの値が同じアイテムがorder: -1;
となる事で上位にソートされます。
html
<div class="products"> <input class="sort-radio" type="radio" name="sort-radio" id="app"/> <input class="sort-radio" type="radio" name="sort-radio" id="game"/> <input class="sort-radio" type="radio" name="sort-radio" id="service"/> <div class="products__sort"> <label class="button" for="app">app</label> <label class="button" for="game">game</label> <label class="button" for="service">service</label> </div> <div class="products__wrap"> <div class="product" data-product-type="app">app</div> <div class="product" data-product-type="app">app</div> <div class="product" data-product-type="game">game</div> <div class="product" data-product-type="service">service</div> <div class="product" data-product-type="game">game</div> ・ ・ ・ ・ </div>