"SunnyUX" CSS library ที่ผมพัฒนาขึ้นเอง

Web Application 08 สิงหาคม พ.ศ. 2565 1,483
Home / Projects / 98

SunnyUX คืออะไร?

SunnyUX เป็น CSS Libary ที่สามารถ จัดโครงสร้าง (Layouts)  รวมถึงย่อคำสั่งต่างๆ ให้สามารถเรียกใช้ผ่าน HTML Class ได้ เช่น padding: 0; ก็จะถูกย่อเป็น p-0, margin-left: 0; margin-right: 0; ก็จะถูกย่อเป็น mx-0 เป็นต้น คล้ายกับ ​CSS Libary อย่าง Bootstrap

แต่ SunnyUX จะมี Components ให้เลือกใช้ และสไตล์เริ่มต้น ที่แตกต่างออกไป การพัฒนา SunnyUX จะพัฒนา Components เพิ่มเข้ามาเรื่อยๆ อาจถูกแบ่งเป็นหลายส่วน เพื่อให้เลือกใช้งานได้ตามต้องการ เพื่อความ lightweight ของ Libary

CDN

<link rel="stylesheet" href="config.css">
<link rel="stylesheet" href="https://sunny420x.com/css/sunnyux.css">
<script src="https://sunny420x.com/js/sunnyux.js"></script>

config.css

:root {
    --container-max-width: 1200px;
    --nav-height: 50px; 
    --nav-text-color: var(--grey); 
    --nav-text-color-hover: var(--white); 
    --nav-bg: var(--dark-transparent); 
    --nav-hover-bottom: var(--darkblue); 
}

การแบ่งและจัดโครงสร้าง (Griding Systems)

1) Flex โครงสร้างไม่คงที่ (Flexbox)

ใช้งาน Flex โดยการเรียกใช้งาน class ที่ชื่อว่า flex และ ข้างใน flex elements จำเป็นต้องสร้าง class ตามขนาดที่ต้องการ ซึ่งแบบแรกเป็น flex แบบที่ความกว้าง ของ elements ไม่เท่ากัน เช่น 70%/30% และ 40%/30%/30%

<div class="flex">
  <div class="row-70">
  </div>
  <div class="row-30">
  </div>
</div>

และสำหรับสัดส่วน 40% 30% และ 30% จะเขียนดังนี้

<div class="flex">
    <div class="row-40">
    </div>
    <div class="row-30">
    </div>
    <div class="row-30">
    </div>
</div>

2) Grid ขนาดคงที่

หากเป็นกล่องที่มี elements ข้างในเท่ากัน จะใช้ grid-4 (หมายถึง หนึ่งแถว มี 4 elememts), grid-3, grid-2, grid-1 แทน โดยรองรับมากสุดถึง grid-6 ตัวอย่างเช่น

<div class="grid-4">
    <div class="media">...</div>
</div>

Grid สองคอลัมน์ต่อแถว แบ่งเป็นสองส่วน รวมทุกส่วนเท่ากับ 12 เช่น grid-11-1, grid-10-2, grid-9-3, grid-8-4, grid-7-5, grid-5-7, grid-4-8, grid-3-9, grid-2-10 และ grid-1-11

ขณะนี้รองรับ Grid สามคอลัมน์ต่อแถว แบ่งเป็นสามส่วน รวมทุกส่วนเท่ากับ 12 เช่น grid-5-5-2, grid-4-6-2, grid-3-7-2, grid-3-8-1, grid-6-3-3, grid-9-2-2, grid-5-2-5, grid-4-3-4, grid-3-6-3, grid-2-8-2, grid-1-9-2 และ grid-1-10-1

<div class="nav black">
    <div class="container">
        <div class="grid">
            <button class="btn transparent text-white" id="collapse-btn" onclick="collapse()"><i class="fa-solid fa-bars"></i></button>
            <ul class="px-10" id="collapse">
                <a href="/"><li>Home</li></a>
                <a href="#"><li>About</li></a>
                <li class="dropdown" onclick="showhide(this)">
                Tools
                    <ul>
                        <a href=""><li>Dropdown1</li></a>
                    </ul>
                </li>
            </ul>
        </div>
    </div>
</div>
<div id="mockup"></div>

สร้าง Tables

# FristName LastName
1 Sunny Jirakit
<div class="table-overflow">
<table> 
    <tr>
        <th>#</th>
        <th>FirstName</th>
        <th>LastName</th>
    </tr>
    <tr>
        <td>1</td>
        <td>Sunny</td>
        <td>Jirakit</td>
    </tr>
</table>
</div>

ปุ่ม (Buttons)

<button class="btn darkblue">Dark Blue</div> 
<button class="btn red">Red</div>
<button class="btn lightred">Light Red</div>
<button class="btn green">Green</div>
<button class="btn pink">Pink</div>
<button class="btn black">Black</div>
<button class="btn white">White</div>
<button class="btn orange">Orange</div>
<button class="btn grey">Grey</div>
<button class="btn bluegrey">Blue Grey</div>
<button class="btn transparent">Transparent</div>

<button class="btn transparent ghost-darkblue">Dark Blue</div> 
<button class="btn transparent ghost-red">Red</div>
<button class="btn transparent ghost-lightred">Light Red</div>
<button class="btn transparent ghost-green">Green</div>
<button class="btn transparent ghost-pink">Pink</div>
<button class="btn transparent ghost-black">Black</div>
<button class="btn transparent ghost-white">White</div>
<button class="btn transparent ghost-orange">Orange</div>
<button class="btn transparent ghost-grey">Grey</div>
<button class="btn transparent ghost-bluegrey">Blue Grey</div>

สร้างรายการแนวนอน และแนวตั้ง

หัวข้อ

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce a laoreet dui, ut rutrum leo. Integer at elementum sapien. Nunc viverra tincidunt hendrerit. Aenean maximus bibendum leo nec imperdiet. Vivamus mollis, tellus ut imperdiet porta, mauris diam elementum purus, mattis pellentesque enim ex quis justo. Nunc viverra tincidunt hendrerit.

<div class="media-x">
    <div class="cover"><img alt="" src="/img/default.jpg" /></div>
    <div class="content">
        <h1>หัวข้อ</h1>
        <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce a laoreet dui, ut rutrum leo. Integer at elementum sapien. Nunc viverra tincidunt hendrerit.      Aenean maximus bibendum leo nec imperdiet. Vivamus mollis, tellus ut imperdiet porta, mauris diam elementum purus, mattis pellentesque enim ex quis justo. Nunc   viverra tincidunt hendrerit.</p>
    </div>
</div>

หัวข้อ

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce a laoreet dui, ut rutrum leo. Integer at elementum sapien. Nunc viverra tincidunt hendrerit. Aenean maximus bibendum leo nec imperdiet. Vivamus mollis, tellus ut imperdiet porta, mauris diam elementum purus, mattis pellentesque enim ex quis justo. Nunc viverra tincidunt hendrerit.

<div class="media">
    <div class="cover"><img alt="" src="/img/default.jpg" /></div> 
    <div class="content"> 
        <h1>หัวข้อ</h1>
        <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce a laoreet dui, ut rutrum leo. Integer at elementum sapien. Nunc viverra   tincidunt hendrerit. Aenean maximus bibendum leo nec imperdiet. Vivamus mollis, tellus ut imperdiet porta, mauris diam elementum purus, mattis pellentesque enim ex quis justo. Nunc viverra tincidunt hendrerit.</p> 
    </div> 
</div>

Classes ต่างๆ

สำหรับการกำหนดสัดส่วนของ margin และ padding จะสามารถใส่ ค่าได้ตั้งแต่ 0, 10, 20, 30, 40, 50, 60 (Pixels) เช่น mx-10, mx-20, my-30, px-50, mx-0 เป็นต้น

Class Meaning
mx-0 margin-left: 0; margin-right: 0;
mx-10 margin-left: 10px; margin-right: 10px;
mx-60 margin-left: 60px; margin-right: 60px;
my-0 margin-top: 0; margin-bottom: 0;
my-10 margin-top: 10px; margin-bottom: 10px;
my-60 margin-top: 60px; margin-bottom: 60px;
m-0 margin: 0;
m-10 margin: 10px;
m-60 margin: 60px;
p-0 padding: 0;
p-10 padding: 10px;
p-60 padding: 60px;
px-0 padding-left: 0; padding-right: 0;
px-10 padding-left: 10px; padding-right: 10px;
px-60 padding-left: 60px; padding-right: 60px;
py-0 padding-top: 0; padding-bottom: 0;
py-10 padding-top: 10px; padding-bottom: 10px;
py-60 padding-top: 60px; padding-bottom: 60px;
Class Meaning
mt-0 margin-top: 0;
mt-10 margin-top: 10px;
mt-20 margin-top: 20px;
mt-30 margin-top: 30px;
mt-40 margin-top: 40px;
mt-50 margin-top: 50px;
mt-60 margin-top: 60px;
mb-10 margin-bottom: 10px;
mb-20 margin-bottom: 20px;
mb-30 margin-bottom: 30px;
mb-40 margin-bottom: 40px;
mb-50 margin-bottom: 50px;
mb-60 margin-bottom: 60px;
ml-10 margin-left: 10px;
ml-20 margin-left: 20px;
ml-30 margin-left: 30px;
ml-40 margin-left: 40px;
ml-50 margin-left: 50px;
ml-60 margin-left: 60px;
mr-10 margin-right: 10px;
mr-20 margin-right: 20px;
mr-30 margin-right: 30px;
mr-40 margin-right: 40px;
mr-50 margin-right: 50px;
mr-60 margin-right: 60px;
mx-auto margin-left: auto; margin-right: auto;
my-auto margin-top: auto; margin-bottom: auto;
w-max width: auto;
h-max height: auto;
Class Meaning
black background: var(--black);
blacker background: var(--blacker);
white background: var(--white);
green background: var(--green);
lightgreen background: var(--lightgreen);
darkblue background: var(--darkblue);
blue background: var(--blue);
red background: var(--red);
lightred background: var(--lightred);
pink background: var(--pink);
grey background: var(--grey);
bluegrey background: var(--bluegrey);
orange background: var(--orange);

white-transparent

background: var(--white-transparent);

grey-transparent

background: var(--grey-transparent);

black-transparent

background: var(--black-transparent);

blacker-transparent

background: var(--blacker-transparent);

dark-transparent

background: var(--dark-transparent);
Class Meaning
text-black color: var(--black);
text-blacker color: var(--blacker);
text-white color: var(--white);
text-green color: var(--green);
text-lightgreen color: var(--lightgreen);
text-darkblue color: var(--darkblue);
text-blue color: var(--blue);
text-red color: var(--red);
text-lightred color: var(--lightred);
text-pink color: var(--pink);
text-grey color: var(--grey);
text-bluegrey color: var(--bluegrey);
text-orange color: var(--orange);
t-22 font-size: 22px;
t-18 font-size: 18px;
t-16 font-size: 16px;

Card

หากต้องการสร้าง Element ที่มีลักษณะเหมือนการ์ด (Card) ที่ประกอบไปด้วย ส่วนหัว (header) และส่วนสำหรับเนื้อหา สามารถสร้างได้โดยใส่ class ดังนี้

<div class="card white rounded">
  <div class="header black">Header</div>
  <div class="p-30">Content</div>
</div>
Header
Content

หน้าโหลดของเว็บไซต์ (Loader)

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

<div id="preload" class="white">
    <img src="" class="loader">
</div>

Container พร้อม Left-side Navigator.

<body>
    <div class="admin-container">
        <div class="leftside black">
            <button class="btn transparent text-white" id="collapse-btn" onclick="leftcollapse();">
                <i class="fa-solid fa-bars"></i>
            </button>
            <div id="collapse">
               <h1>Sitename</h1>
               <ul class="list">
                   <a href="index.php" class="text-white"><li>Home</li></a>
               </ul>
            </div>
        </div>
        <div class="container white">
            <h1>Content</h1>
        </div>
    </div>
</body>

Profile Picture.
  • Name (Pen name): Sunny Jirakit (Sunny420x)
  • Study: Bachelor Degree of Computer Science from Chiang Mai Rajabhat University
  • Personality: Architect (INTJ-T)
  • Experience: JavaScript,  Angular.js, React.js, Next.js  Express.js, Unity C#, Socket.io