กรอบงาน CSS สำหรับหน้าคอลเลกชันของ Shopify

เผยแพร่แล้ว: 2022-03-10
สรุปโดยย่อ ↬ ในบทความนี้ เราจะมาดูวิธีตั้งค่าเลย์เอาต์กริดสำหรับสินค้าในหน้าคอลเลกชันของคุณ และวิธีใช้การตั้งค่าส่วนของ Shopify เพื่อสร้างตัวเลือกที่ปรับแต่งได้ในตัวแก้ไขร้านค้าออนไลน์

CSS Grid ได้กลายเป็นเทคนิคที่นิยมมากขึ้นสำหรับการใช้เลย์เอาต์กับเพจท่ามกลางเฟรมเวิร์ก CSS อื่นๆ นักพัฒนาสามารถใช้ประโยชน์จากระบบนี้เพื่อลดความซับซ้อนและกำหนดกฎของรูปแบบที่ชัดเจน ตามที่อธิบายไว้ในบล็อกโพสต์ Shopify ของฉันเกี่ยวกับการเริ่มต้นใช้งานเค้าโครงกริด CSS เฟรมเวิร์ก CSS กริดสามารถนำไปใช้กับธีม Shopify ได้อย่างง่ายดายเพื่อออกแบบเลย์เอาต์ของหน้าที่ตอบสนองตามแถวและคอลัมน์

ทุกหน้าของร้านค้าออนไลน์ของ Shopify สามารถนำ CSS Grid มาใช้ได้ แต่จุดสัมผัสที่ชัดเจนประการหนึ่งของไซต์อีคอมเมิร์ซใดๆ ที่จะได้รับประโยชน์จากเลย์เอาต์กริดที่แข็งแกร่งและสะอาดคือหน้าคอลเลกชัน ในหน้าคอลเลกชัน จะรู้สึกเป็นธรรมชาติที่สินค้าจะถูกจัดระเบียบในรูปแบบตาราง โดยมีแถวและคอลัมน์ ดังนั้น หากมีตัวเลือกสำหรับการสร้างการจัดเรียงกริดที่มีประสิทธิภาพด้วยชุดกฎง่ายๆ ก็คุ้มค่าที่จะสำรวจสำหรับโปรเจ็กต์ธีมที่กำหนดเองของคุณ

หมายเหตุ : เพื่อให้ทราบว่าสิ่งนี้สามารถค้นหาลูกค้าของคุณได้อย่างไร และเพื่อให้คุณสามารถปฏิบัติตามบทช่วยสอน CSS Grid นี้ได้ ฉันได้ตั้งค่าร้านทดสอบซึ่งคุณสามารถใช้เพื่อดูแนวทางที่ฉันได้สรุปไว้ในบทช่วยสอนนี้

การสร้างเค้าโครงหน้าคอลเลกชันพื้นฐาน

การทำงานกับ CSS Grid ในหน้าคอลเลกชันของ Shopify จะดำเนินการในลักษณะเดียวกับที่ Grid ทำงานในส่วนที่กำหนดเอง ซึ่งเป็นสิ่งที่เราสำรวจในบทความบล็อก CSS ของกริด โชคดีที่ Shopify มีการรองรับกริด CSS ที่ยอดเยี่ยม ความแตกต่างที่ใหญ่ที่สุดเมื่อใช้ระบบกริดบนหน้าคอลเลกชันคือ คุณไม่จำเป็นต้องกำหนดคลาสให้กับแต่ละรายการ โปรดทราบว่าหากคุณไม่ได้ใช้ CSS ขั้นสูง เราขอแนะนำให้คุณอ่านคำแนะนำเบื้องต้นเกี่ยวกับ CSS ก่อนดำเนินการต่อ

ตอนนี้ เนื่องจากผลิตภัณฑ์ถูกส่งออกโดยอัตโนมัติในลูปเป็นรายการเนื้อหาที่ทำซ้ำได้ จึงเป็นไปได้ที่จะนำคลาสเดียวกันนี้ไปใช้กับผลิตภัณฑ์ทั้งหมดที่เกี่ยวข้องกับคอลเลกชั่น แต่ก่อนอื่น เรามาดูตัวอย่างหน้าคอลเลกชันที่ไม่มีสไตล์กันก่อน

หากคุณเริ่มต้นด้วยการตั้งค่าหน้าคอลเลกชันพื้นฐาน คุณอาจมีมาร์กอัปที่มีลักษณะดังนี้:

 <h1>{{ collection.title }}</h1> {% for product in collection.products %} <a href="{{ product.url | within: collection }}"> <img src="{{ product.featured_image.src | img_url: '300x' }}" alt="{{ product.featured_image.alt | escape }}"> </a> <a href="{{ product.url | within: collection }}">{{ product.title }}</a> <p>{{ product.price | money }}</p> {% unless product.available %}<br><strong>sold out</strong>{% endunless %} {% endfor %}

ซึ่งจะแสดงชื่อคอลเลกชันเป็นส่วนหัว และแสดงผลิตภัณฑ์ที่เกี่ยวข้องของคอลเลกชันพร้อมรูปภาพ ชื่อ และราคา หากไม่มีการจัดสไตล์ ผลิตภัณฑ์เหล่านี้จะปรากฏในแถวแนวตั้งโดยค่าเริ่มต้น ขนาดของรูปภาพผลิตภัณฑ์จะเป็น 300 พิกเซล ตามที่กำหนดโดยตัวกรอง img_url

หากต้องการใช้เฟรมเวิร์ก CSS Grid กับกลุ่มผลิตภัณฑ์นี้ ก่อนอื่นคุณต้องห่อคอลเล็กชัน for loop ในคอนเทนเนอร์กริดหลักหนึ่งรายการ ซึ่งถือเป็นคอนเทนเนอร์หลัก ถัดไป คุณสามารถห่อโค้ดสำหรับผลิตภัณฑ์แต่ละรายการ (รายการย่อย) ภายในคอนเทนเนอร์ของตนเองได้

เมื่อเพิ่มคอนเทนเนอร์เหล่านี้แล้ว มาร์กอัปจะปรากฏเป็น:

 <h1>{{ collection.title }}</h1> <div class="grid-collection"> {% for product in collection.products %} <div class="grid-product"> <a href="{{ product.url }}"> <img src="{{ product.featured_image.src | img_url: '300x' }}" alt="{{ product.featured_image.alt | escape }}"> </a> <a href="{{ product.url }}">{{ product.title }}</a> <p>{{ product.price | money }}</p> {% unless product.available %}<br><strong>sold out</strong>{% endunless %} </div> {% endfor %} </div>

การใช้การจัดรูปแบบ CSS Grid Framework กับหน้าคอลเลกชัน

ตอนนี้ เรามีหน้าคอลเลกชันพื้นฐานที่มีลำดับชั้นของคอนเทนเนอร์แล้ว คุณสามารถแบ่งผลิตภัณฑ์ออกเป็นเค้าโครงกริดได้โดยใช้สไตล์กับคลาสที่คุณสร้างขึ้น ในไฟล์สไตล์ชีตของธีม คุณสามารถเพิ่มสิ่งต่อไปนี้:

 .grid-collection { display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); } .grid-product { display: grid; }

ตอนนี้ เมื่อคุณไปยังหน้าคอลเลกชัน คุณควรเห็นสินค้าปรากฏในตาราง โดยพอดีกับพื้นที่ว่างบนหน้าจอ

ตัวอย่างหน้าคอลเลกชัน
(ตัวอย่างขนาดใหญ่)

นอกจากการเพิ่ม display: grid คุณจะสังเกตเห็นว่าเรากำลังใช้คุณสมบัติ grid-template-columns ซึ่งสามารถใช้เพื่อกำหนดจำนวนคอลัมน์ที่จะปรากฏในตาราง แทนที่จะกำหนดค่าคงที่ เราสามารถใช้สัญลักษณ์ซ้ำเพื่อสร้างกฎว่าผลิตภัณฑ์ของเราควรปรากฏหลายครั้งเท่าที่จะพอดีกับกริดได้

ภายในสัญกรณ์การทำงาน auto-fit จะแสดงรายการต่างๆ ในบรรทัดให้ได้มากที่สุดเท่าที่จะมากได้ ดังนั้นในแบบเต็มหน้าจอ เราจะเห็นผลิตภัณฑ์จำนวนมากปรากฏขึ้นเมื่อมีที่ว่างบนหน้าจอผู้ซื้อ สุดท้าย เมื่อใช้ minmax เราตั้งกฎว่าแต่ละเซลล์ควรมีขนาดอย่างน้อย 300 พิกเซล และไม่เกินหนึ่งส่วนของกริดคอนเทนเนอร์

เมื่อใช้คุณสมบัตินี้ เราจำเป็นต้องตรวจสอบให้แน่ใจว่าขนาดที่กำหนดไว้ในฟังก์ชัน minmax ตรงกันหรือใหญ่กว่าขนาดที่กำหนดโดยตัวกรอง img_url Liquid ในมาร์กอัปของเรา หากฟังก์ชัน minmax มีขนาดพิกเซลที่เล็กกว่า คุณจะเห็นว่ารูปภาพผลิตภัณฑ์ถูกตัดออกเนื่องจากจะไม่มีที่ว่างเพียงพอภายในเซลล์ที่กำหนด

เมื่อตารางพื้นฐานของเราปรากฏขึ้นตามที่คาดไว้ เราสามารถเพิ่ม CSS เพิ่มเติมเพื่อจัดระเบียบเลย์เอาต์โดยเพิ่มพื้นที่ขอบและวางผลิตภัณฑ์ไว้ที่กึ่งกลางของหน้า หากคุณต้องการให้ช่องว่างระหว่างคอลัมน์และแถวของคุณเท่ากัน คุณสามารถกำหนดทั้งคู่ด้วยคุณสมบัติ gap แทนที่จะกำหนดแต่ละรายการแยกกัน

เมื่อตั้งค่าทั้งหมดแล้ว สไตล์ชีตของคุณจะมีลักษณะดังนี้:

 .grid-collection { display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); gap: 1px; margin: 1em; background-color: white; } .grid-product { display: grid; justify-content: center; padding: 10px; color: white; line-height: 1; border-radius: 5px; }

แม้ว่านี่จะเป็นเพียงตัวอย่างง่ายๆ ว่าเฟรมเวิร์ก CSS Grid สามารถนำมาใช้กับหน้าคอลเลกชันได้อย่างไร เราขอแนะนำให้คุณทดสอบด้วยพารามิเตอร์ต่างๆ เพื่อให้เหมาะกับภาพของลูกค้าและภาพแบรนด์ที่มีอยู่ คุณยังสามารถใช้วิธีนี้เพื่อสร้างกริดบนหน้าอื่นๆ เช่น ตะกร้าสินค้า และปรับเปลี่ยนตามลักษณะเฉพาะของมัน

การเพิ่มตัวเลือกกริดที่ปรับแต่งได้

วิธีการข้างต้นใช้ได้ดีกับกริดที่จะแสดงคอลัมน์ของผลิตภัณฑ์ตามขนาดของหน้าจอ แต่ถ้าคุณต้องการให้ผู้ค้าควบคุมวิธีการแสดงตารางล่ะ

ในบางกรณี ลูกค้าของคุณอาจต้องการปรับแต่งหน้าผลิตภัณฑ์ และกำหนดจำนวนผลิตภัณฑ์ที่ปรากฏ

หากมาร์กอัปของคุณอยู่ในไฟล์ส่วน คุณสามารถสร้างการตั้งค่าส่วนที่จะอนุญาตให้ลูกค้าปรับแต่งกริดจากตัวแก้ไขร้านค้าออนไลน์ได้ การกำหนดค่าการตั้งค่าที่ช่วยให้ลูกค้าของคุณเลือกผลิตภัณฑ์จำนวนมากในแถวอาจมีลักษณะดังนี้:

 {% schema %} { "name": "Collection", "settings": [ { "type": "select", "id": "product_number", "label": "Number of products per row", "options": [ { "value": "two", "label": "two" }, { "value": "three", "label": "three" }, { "value": "four", "label": "four" } ] } ] } {% endschema %}

คุณสามารถดูได้ที่นี่ว่าการตั้งค่ามีประเภทของการ select ซึ่งจะส่งออกตัวเลือกแบบเลื่อนลงในตัวแก้ไขร้านค้าออนไลน์ นอกจากนี้ยังมีคุณสมบัติ label เพื่ออธิบายการตั้งค่า

คุณสมบัติ id จะไม่ปรากฏบนตัวแก้ไข แต่เราสามารถอ้างอิงสิ่งนี้เพื่อสร้างตัวแปรได้ กรณีใช้งานทั่วไปสำหรับตัวแปรที่สร้างด้วยออบเจ็กต์ส่วนคือการอ้างอิงภายในมาร์กอัปเพื่อเปลี่ยนชื่อคลาสตามการตั้งค่าที่เลือก

เพื่อให้บรรลุผลนี้ เราสามารถใช้ Liquid เพื่อส่งออก value ที่เลือกไว้ในตัวแก้ไขร้านค้าออนไลน์ เป็นแอตทริบิวต์ของวัตถุส่วน ออบเจ็กต์นี้จะแสดงเป็น {{ section.settings.product_number }} และจะส่งออกค่าใดก็ตามที่เป็นตัวเลือกที่เลือก

วิธีหนึ่งในการดูคือ id ที่เรากำหนดในการตั้งค่าส่วนจะกลายเป็น "ตัวยึด" สำหรับค่าในตัวเลือกที่เลือก

จากนั้น เราก็สามารถนำวัตถุนี้มาต่อท้ายชื่อคลาสของคอลเลกชันได้ ซึ่งจะทำให้ชื่อคลาสเปลี่ยนแปลงได้ตามตัวเลือกที่เลือก และคุณสามารถสร้างกฎ CSS ที่แตกต่างกันสำหรับแต่ละชื่อคลาสได้

เมื่อเราผนวกตัวแปรเข้ากับชื่อคลาสคอลเลกชันที่มีอยู่ มันจะมีลักษณะดังนี้:

 <div class="grid-collection-{{ section.settings.product_number }}">

ที่นี่คุณจะเห็นว่าวัตถุส่วนอ้างอิง id ของการตั้งค่าส่วน ค่าที่ส่งออกโดยอ็อบเจ็กต์ส่วนนี้จะกำหนดโดยค่าที่เลือกบนตัวแก้ไขร้านค้าออนไลน์ ตัวอย่างเช่น หากเลือก "สาม" ในกล่องดรอปดาวน์ของเรา จะทำให้มาร์กอัปแสดงผลเป็น:

 <div class="grid-collection-three">

ตอนนี้ เราสามารถย้ายกลับไปที่สไตล์ชีตของเรา และตั้งค่ากฎ CSS ที่แตกต่างกันสำหรับ grid-collection-two , grid-collection-three และ grid-collection-four สิ่งเหล่านี้จะมีลักษณะดังนี้:

 .grid-collection-two { display: grid; grid-template-columns: repeat(2, 1fr); gap: 1px; margin: 1em; background-color: white; } .grid-collection-three { display: grid; grid-template-columns: repeat(3, 1fr); gap: 1px; margin: 1em; background-color: white; } .grid-collection-four { display: grid; grid-template-columns: repeat(4, 1fr); gap: 1px; margin: 1em; background-color: white; }

คุณสมบัติ grid-template-columns กำหนดจำนวนคอลัมน์ที่จะปรากฏในกริด และด้วยเหตุนี้ ผลิตภัณฑ์จำนวนเท่าใดจึงจะปรากฏในแถวบนหน้าคอลเลกชัน ดังนั้น แต่ละคลาสจะมีค่าที่แตกต่างกันสำหรับคุณสมบัติ grid-template-columns ซึ่งสอดคล้องกับชื่อคลาสที่ไม่ซ้ำกัน

ตอนนี้เมื่อลูกค้านำทางไปยังตัวแก้ไขร้านค้าออนไลน์และเลือกตัวเลือกสำหรับ "จำนวนสินค้าต่อแถว" กริดจะปรับเพื่อแสดงสิ่งนี้:

ดูตัวอย่างเครื่องมือแก้ไขร้านค้าออนไลน์

สุดท้าย เราสามารถเพิ่มการสืบค้นสื่อเพื่อให้มีกฎ CSS Grid ที่แตกต่างกันสำหรับหน้าจอขนาดเล็ก วิธีนี้จะช่วยหลีกเลี่ยงไม่ให้ตารางปรากฏขึ้นพร้อมกับผลิตภัณฑ์จำนวนมากเกินไปในอุปกรณ์ขนาดเล็ก ซึ่งจะส่งผลให้ผลิตภัณฑ์ปรากฏนอกหน้าจอ

แต่ละรูปแบบของคลาส collection-grid สามารถกำหนดกฎที่แตกต่างกัน โดยที่กริดจะปล่อยไปที่สองหรือหนึ่งคอลัมน์ เมื่อตั้งค่านี้ในสไตล์ชีตของคุณ อาจมีลักษณะดังนี้:

 @media screen and (max-width: 992px) { .grid-collection-two { grid-template-columns: repeat(2, 1fr); } } @media screen and (max-width: 600px) { .grid-collection-two { grid-template-columns: repeat(1, 1fr); } } @media screen and (max-width: 992px) { .grid-collection-three { grid-template-columns: repeat(2, 1fr); } } @media screen and (max-width: 600px) { .grid-collection-three { grid-template-columns: repeat(1, 1fr); } } @media screen and (max-width: 992px) { .grid-collection-four { grid-template-columns: repeat(2, 1fr); } } @media screen and (max-width: 600px) { .grid-collection-four { grid-template-columns: repeat(1, 1fr); } }

มีแนวโน้มว่าคุณจะต้องปรับขนาดพิกเซลและค่าสำหรับตัวกรอง img_url ตามความต้องการเฉพาะของลูกค้าของคุณและรูปภาพที่พวกเขาใช้ อย่างไรก็ตาม วิธีนี้จะแสดงวิธีเริ่มต้นใช้งานระบบ CSS Grid สำหรับหน้าคอลเลกชันบนธีมที่คุณกำหนดเอง

การขยายกริด

เมื่อคุณใช้ CSS Grid กับหน้าคอลเลกชันของคุณแล้ว คุณสามารถเริ่มพิจารณาส่วนอื่นๆ ในธีม Shopify ของคุณที่อาจใช้เค้าโครงเว็บไซต์ที่มีประสิทธิภาพ ตัวอย่างเช่น คุณสามารถสร้างส่วนแกลเลอรีรูปภาพในตาราง และเพิ่มเซลล์ที่มีรูปร่างผิดปกติเพื่อความหลากหลาย

มีโอกาสมากมายเมื่อใช้ CSS Grid บน Shopify และแต่ละรายการอาจเพิ่มมูลค่าเพิ่มเติมให้กับโครงการธีมของคุณ ด้วยความช่วยเหลือของบทความนี้ คุณสามารถขยายเฟรมเวิร์ก CSS Grid ไปยังโปรเจ็กต์ธีมทั้งหมดของคุณได้