<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Sukit.B</title>
    <description>The latest articles on DEV Community by Sukit.B (@sukit).</description>
    <link>https://dev.to/sukit</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F861787%2F4c043027-0f73-4c58-b2fc-789ae1642832.png</url>
      <title>DEV Community: Sukit.B</title>
      <link>https://dev.to/sukit</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/sukit"/>
    <language>en</language>
    <item>
      <title>Is Investing in Reactive Programming Worthwhile for a Developer?</title>
      <dc:creator>Sukit.B</dc:creator>
      <pubDate>Sun, 12 Nov 2023 16:44:27 +0000</pubDate>
      <link>https://dev.to/sukit/is-investing-in-reactive-programming-worthwhile-for-a-developer-41kb</link>
      <guid>https://dev.to/sukit/is-investing-in-reactive-programming-worthwhile-for-a-developer-41kb</guid>
      <description>&lt;p&gt;I'm pretty new to the dev scene - just hit my one-year milestone! 🎉 My tools of the trade? Mostly Angular for the client-side stuff and Express (sometimes Nest.js) for handling the server-side magic.&lt;/p&gt;

&lt;p&gt;Lately, I've been noticing something cool: Angular and Nest.js seem like a dream team when it comes to reactive programming. It's got me thinking, and I've got a couple of things I'm super curious about:&lt;/p&gt;

&lt;p&gt;To Dive or Not to Dive into Reactive Programming?&lt;/p&gt;

&lt;p&gt;So, here's the deal: &lt;strong&gt;I'm pondering whether I should dive headfirst into the world of reactive programming&lt;/strong&gt;. It's all about dealing with data streams and being responsive to changes, which sounds awesome but also a bit daunting. I'm wondering if it's worth the hustle. Will it make my projects more efficient, scalable, and easier to maintain? Or is it just a shiny new toy in the tech world? 🤔&lt;/p&gt;

&lt;p&gt;Are Reactive Programming and Event-Driven Design BFFs?&lt;/p&gt;

&lt;p&gt;Reactive programming seems to jive really well with event-driven design patterns. It's all about asynchrony and staying responsive, kind of like a dance with data and events. But I'm curious about what you think. Is this combo as great as it seems, or are there some pitfalls I'm not seeing yet?&lt;/p&gt;

&lt;p&gt;Wrapping it up, I'm seriously considering getting more into reactive programming. It looks promising, especially with how it plays along with Angular and Nest.js. But hey, I'm here to learn from all of you! What are your thoughts and experiences? Let's chat about it! 🚀&lt;/p&gt;

</description>
      <category>angular</category>
      <category>webdev</category>
      <category>discuss</category>
      <category>learning</category>
    </item>
    <item>
      <title>สิ่งที่ได้เรียนรู้จาก Project: Tribute Page #1 : HTML และ CSS เบื้องต้น</title>
      <dc:creator>Sukit.B</dc:creator>
      <pubDate>Sun, 22 May 2022 03:28:58 +0000</pubDate>
      <link>https://dev.to/sukit/tribute-1-1an8</link>
      <guid>https://dev.to/sukit/tribute-1-1an8</guid>
      <description>&lt;h2&gt;
  
  
  README
&lt;/h2&gt;

&lt;p&gt;นี่เป็นการสะท้อนการเรียนรู้จากการทำ Project ใน &lt;a href="https://www.freecodecamp.org/learn"&gt;FCC&lt;/a&gt; หลักสูตร &lt;a href="https://www.freecodecamp.org/learn/responsive-web-design"&gt;Responsive Web Design&lt;/a&gt; Project 1 Tribute Page&lt;/p&gt;

&lt;p&gt;โดยผมจะนำการ User Story แต่ละข้อของ Project มา Breakdown ว่าเราจะต้องใช้ความรู้ในเรื่องใดบ้างเพื่อทำให้ Project สำเร็จลุล่วง&lt;/p&gt;

&lt;p&gt;ใน Project Tribute Page นี้มี User Story อยู่ 9 ข้อได้แก่&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Your tribute page should have an element with a corresponding &lt;code&gt;id="main"&lt;/code&gt;, which contains all other elements&lt;/li&gt;
&lt;li&gt;You should see an element with an &lt;code&gt;id&lt;/code&gt; of &lt;code&gt;title&lt;/code&gt;, which contains a string (i.e. text), that describes the subject of the tribute page (e.g. "Dr. Norman Borlaug")&lt;/li&gt;
&lt;li&gt;You should see either a figure or a div element with an id of &lt;code&gt;img-div&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Within the &lt;code&gt;img-div&lt;/code&gt; element, you should see an img element with a corresponding &lt;code&gt;id="image&lt;/code&gt;"&lt;/li&gt;
&lt;li&gt;Within the &lt;code&gt;img-div&lt;/code&gt; element, you should see an element with a corresponding &lt;code&gt;id="img-caption"&lt;/code&gt; that contains textual content describing the image shown in &lt;code&gt;img-div&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;You should see an element with a corresponding &lt;code&gt;id="tribute-info"&lt;/code&gt;, which contains textual content describing the subject of the tribute page&lt;/li&gt;
&lt;li&gt;You should see an a element with a corresponding &lt;code&gt;id="tribute-link"&lt;/code&gt;, which links to an outside site, that contains additional information about the subject of the tribute page. HINT: You must give your element an attribute of target and set it to _blank in order for your link to open in a new tab&lt;/li&gt;
&lt;li&gt;Your &lt;code&gt;#image&lt;/code&gt; should use max-width and height properties to resize responsively, relative to the width of its parent element, without exceeding its original size&lt;/li&gt;
&lt;li&gt;Your &lt;code&gt;img&lt;/code&gt; element should be centered within its parent element&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;ตัวอย่าง webpage ที่เสร็จสมบูรณ์โดย FCC &lt;a href="https://tribute-page.freecodecamp.rocks/"&gt;Tribute Page&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Reflect #1
&lt;/h2&gt;

&lt;p&gt;เรามาเริ่มกันที่ข้อแรก&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;My tribute page should have an element with a corresponding &lt;code&gt;id="main"&lt;/code&gt;, which contains all other elements.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;ข้อนี้บอกว่าหน้าตา web page ของเราต้องมี element ที่มี &lt;code&gt;id="main"&lt;/code&gt; โดย element นี้ต้องเป็น element ที่คลุม element อื่น ๆ ทั้งหมด&lt;/p&gt;

&lt;p&gt;ปัญหาข้อนี้ทำให้เราต้องกลับมาทำความเข้าใจความรู้พื้นฐานของภาษา HTML โดยผมจะตั้งคำถามไปเรื่อย ๆ โดยหวังว่าหากผมทราบและเข้าใจคำตอบของคำถามต่อไปนี้ ความรู้ความเข้าใจของผมน่าจะอยู่ในระดับที่ "ทำเป็น" ไม่ใช่แค่ "ทำได้"&lt;/p&gt;

&lt;p&gt;ต่อไปนี้ผมจะสมมติว่าตัวเองนั้นไม่รู้อะไรในเรื่องของภาษา HTML เลย ดังนั้นคำถามแรกที่ผมต้องถามก็คือ&lt;/p&gt;

&lt;h3&gt;
  
  
  HTML (Hypertext Markup Language) คืออะไร ?
&lt;/h3&gt;

&lt;p&gt;ผมสรุปได้ดังนี้&lt;/p&gt;

&lt;p&gt;HTML เป็นภาษาที่ใช้กำหนดโครงสร้างภาพรวมของ website เป็นเหมือนโครงกระดูกของ website และข้อความที่เราพิมพ์ลงไปจะถูกตีความ (interpret) ผ่านโปรแกรม web browser ต่าง ๆ เช่น Google chrome, IE, Firefox ให้กลายมาเป็นหน้า webpage ที่เราเห็นกันในทุก ๆ website&lt;/p&gt;

&lt;h3&gt;
  
  
  Syntax ของ HTML หน้าตาเป็นอย่างไร ?
&lt;/h3&gt;

&lt;p&gt;วิธีการอย่างหนึ่งที่ผมเห็นในการเรียนภาษาต่าง ๆ ที่ผมเห็นบ่อย ๆ คือการดู code โดยตรงและค่อย ๆ ถอดองค์ประกอบของมันออกมา&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--1cinH0_9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9w7raa1timgbxnokqgna.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--1cinH0_9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9w7raa1timgbxnokqgna.png" alt="HTML Syntax" width="821" height="255"&gt;&lt;/a&gt;&lt;em&gt;ภาพจาก &lt;a href="https://developer.mozilla.org/en-US/docs/Learn/HTML/Introduction_to_HTML/Getting_started"&gt;MDN Web Docs&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;ตัวอย่างภาษา HTML อย่างง่าย ๆ คือ&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;html&lt;/span&gt; &lt;span class="na"&gt;lang=&lt;/span&gt;&lt;span class="s"&gt;"en"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;head&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;title&amp;gt;&lt;/span&gt;Hello!&lt;span class="nt"&gt;&amp;lt;/title&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;body&amp;gt;&lt;/span&gt;
        Hello, world!
    &lt;span class="nt"&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;html&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;เมื่อเรา run ข้อความข้างต้นผ่าน web browser ผลลัพธ์จะออกมาเป็นดังนี้&lt;/p&gt;

&lt;p&gt;เรามาดูกันว่า code ข้างบนที่เราเขียนกันไปนั้นมีอะไรบ้าง&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/code&gt; ข้อความในบรรทัดนี้คือการประกาศ (declare) ต่อ web browser ว่าเรากำลังเขียน HTML version ล่าสุด คือ HTML:HTML5&lt;/li&gt;
&lt;li&gt;บรรทัดต่อ ๆ มาเราจะเห็นข้อความที่ถูกคลุมด้วย &amp;lt;&amp;gt; เจ้าเครื่องหมายนี้เราเรียกว่า Tag ส่วนข้อความภายใน Tag เราจะเรียกว่า element โดยเขียนได้ในรูป &lt;code&gt;&amp;lt;element&amp;gt;&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;เช่น &lt;code&gt;&amp;lt;head&amp;gt;&lt;/code&gt; หมายความว่า มันคือ Tag ที่มี element เป็น head นั่นเอง&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;&amp;lt;title&amp;gt;Hello!&amp;lt;/title&amp;gt;&lt;/code&gt; จากบรรทัดนี้เราจะสังเกตเห็นได้ว่ามี Tag อยู่ 2 Tag คือ

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;&amp;lt;title&amp;gt;&lt;/code&gt; &amp;lt;&amp;lt; อันนี้เรียกว่า opening tag&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;&amp;lt;/title&amp;gt;&lt;/code&gt; &amp;lt;&amp;lt; อันนี้เรียกว่า closing tag (มี / นำหน้า element)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;จึงสรุปได้ว่า Syntax ของภาษา HTML จะเริ่มต้นด้วย opening tag และ closing tag เสมอ (แต่ก็มีข้อยกเว้นสำหรับ tags บางประเภท)&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;ในบรรทัดที่ 2 &lt;code&gt;&amp;lt;html lang="en"&amp;gt;&lt;/code&gt; จะเห็นว่าใน tag นอกจากจะมี html เป็น element แล้ว ยังมีข้อความ &lt;code&gt;lang="en"&lt;/code&gt; ซึ่งข้อความหลัง element นี้เราเรียกว่า &lt;strong&gt;attributes&lt;/strong&gt; โดย attribute จะมีหน้าที่เพิ่มลักษณะบางอย่างลงไปใน element ให้มีความเฉพาะเจาะจงยิ่งขึ้น เช่น &lt;code&gt;lang="en"&lt;/code&gt; ก็หมายความว่า web page นี้จะใช้ภาษาอังกฤษเป็นภาษาหลักนั่นเอง&lt;/li&gt;
&lt;li&gt;จาก code ด้านบนเราจะสามารถเห็น element อีก 2 อย่างคือ head element และ body element โดยมีความแตกต่างดังนี้ 

&lt;ul&gt;
&lt;li&gt;head element - element ต่าง ๆ ที่ถูกคลุมด้วย head element จะไม่ปรากฎให้เห็นในหน้า web page แต่จะไปปรากฎในส่วนอื่น ๆ แทน เช่น ข้อความใน &lt;code&gt;title&lt;/code&gt; element ก็จะไปปรากฎบน tab ของ web browser&lt;/li&gt;
&lt;li&gt;body element - element ต่าง ๆ ที่ถูกคลุมด้วย body element จะปรากฎให้เห็นในหน้า web page เช่น ข้อความ “Hello, world!" ก็จะปรากฎให้เห็นบนหน้า web page&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  DOM (Document Object Model)
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--XQnC5p3l--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9srdytf5s4zwsny1hr3q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--XQnC5p3l--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9srdytf5s4zwsny1hr3q.png" alt="DOM example" width="254" height="342"&gt;&lt;/a&gt;&lt;br&gt;
เมื่อเราเปิด HTML บนหน้า web browser ตัว web browser จะมอง HTML แบบ DOM คือมอง HTML เป็นลักษณะคล้ายต้นไม้ที่แตกกิ่งก้านสาขาออกมาตาม HTML โดย DOM จะช่วยบ่งบอกลำดับชั้นของ element ได้ ซึ่งจะมีประโยชน์ในภายหลังโดยเฉพาะการทำความเข้าใจในเรื่อง CSS และ Java Script&lt;/p&gt;


&lt;h2&gt;
  
  
  Reflect #2
&lt;/h2&gt;

&lt;p&gt;จนถึงตอนนี้เราก็จะค่อนข้างเข้าใจโครงสร้างคร่าว ๆ ของ HTML แล้ว เมื่อกลับไปดูที่ &lt;strong&gt;User Story #1&lt;/strong&gt; กำหนดให้ต้องมี element ที่มี &lt;code&gt;id="main"&lt;/code&gt; โดย element นี้ต้องเป็น element ที่คลุม element อื่น ๆ ทั้งหมด&lt;/p&gt;

&lt;p&gt;ซึ่งตอนนี้เราก็รู้แล้วว่า &lt;code&gt;id="main"&lt;/code&gt; ก็คือ attribute ดังนั้นเราก็แค่สร้าง element ที่มี attribute คือ &lt;code&gt;id="main"&lt;/code&gt; นั่นเอง&lt;/p&gt;

&lt;p&gt;คำถามต่อมาก็คือควรจะใช้ element อะไร? และที่สำคัญคือ HTML มี element อะไรให้เลือกใช้บ้าง ?&lt;/p&gt;
&lt;h3&gt;
  
  
  ประเภทของ element มีอะไรบ้าง
&lt;/h3&gt;

&lt;p&gt;element ในภาษา HTML มีหลายประเภท ขึ้นอยู่ว่าเราอยากให้ web page ออกมามีหน้าตาเป็นอย่างไร มี heading, list, มีข้อความที่เป็นตัวหนา ฯลฯ เป็นต้น&lt;/p&gt;

&lt;p&gt;สามารถดูรายละเอียดประเภทของ element ต่าง ๆ ได้ที่นี่&lt;/p&gt;

&lt;p&gt;&lt;a href="https://developer.mozilla.org/en-US/docs/Web/HTML/Element#main_root"&gt;HTML elements reference - HTML: HyperText Markup Language | MDN&lt;/a&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  Reflect #3
&lt;/h2&gt;

&lt;p&gt;กลับมาคำถามที่ว่าเราควรจะใช้ element ไหนตามโจทย์ &lt;strong&gt;User Story #1&lt;/strong&gt; ซึ่งเมื่อดูตามตัวอย่างที่ FCC ให้มาและพิจารณาจากโจทย์ข้ออื่น ๆ แล้วนั้นจะพบว่าใน webpage ต้องมีข้อมูลค่อนข้างหลากหลายประเภททั้ง text, image ดังนั้น element ที่ผมต้องการคือ element ที่สามารถคลุม element อื่น ๆ ได้ด้วยไม่ว่า element นั้นจะเป็น text หรือ image หรืออะไรก็ตาม&lt;/p&gt;

&lt;p&gt;ผมจึงเลือกใช้ element ประเภท &lt;strong&gt;Content sectioning&lt;/strong&gt; โดย element ประเภทนี้จะมีหน้าที่ช่วยจัดการ content ต่าง ๆ ให้เป็นสัดส่วน โดยผมเลือกใช้ &lt;code&gt;&amp;lt;main&amp;gt;&lt;/code&gt; เพราะว่าเป็น element ที่สามารถคลุมเนื้อหาหลัก ๆ ได้ครบถ้วนคล้าย &lt;code&gt;&amp;lt;body&amp;gt;&lt;/code&gt; ในกรณีนี้ผมเลือกใช้ &lt;code&gt;&amp;lt;main&amp;gt;&lt;/code&gt;  เพราะมีความยืดหยุ่นในการใช้งานมากกว่า&lt;/p&gt;

&lt;p&gt;ผลลัพธ์จึงออกมาดังนี้&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;main&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"main"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;/main&amp;gt;&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;คำถามต่อมาคือ &lt;code&gt;id="main"&lt;/code&gt; เป็น attribute ที่บ่งบอกถึงอะไรกันแน่&lt;/p&gt;

&lt;p&gt;&lt;code&gt;id&lt;/code&gt; ย่อมาจาก identifier มีลักษณะเป็น &lt;strong&gt;&lt;a href="https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes"&gt;global attribute&lt;/a&gt;&lt;/strong&gt; ซึ่งสามารถใช้กับ element ได้ทุกประเภท (มีข้อยกเว้นเล็กน้อยแต่จะยังไม่พูดถึง)&lt;/p&gt;

&lt;p&gt;&lt;code&gt;id&lt;/code&gt; ถูกใช้เพื่อเชื่อมโยง element เข้ากับส่วนอื่น ๆ เช่น CSS&lt;/p&gt;

&lt;p&gt;แล้วมันจะเชื่อมโยงกับ CSS ได้อย่างไรล่ะ ?&lt;/p&gt;

&lt;p&gt;ว่าก็ว่า CSS คืออะไรกันนะ&lt;/p&gt;

&lt;h3&gt;
  
  
  CSS (Cascading Style Sheets) คืออะไร ?
&lt;/h3&gt;

&lt;p&gt;CSS เป็นภาษาที่เราจะใช้ในการตกแต่งหน้าตาของ website เช่น สี, ขนาดของ font, การจัดลำดับตัวอักษร และอื่น ๆ อีกมากมายที่เราทำได้ใน CSS&lt;/p&gt;

&lt;h3&gt;
  
  
  Syntax ของ CSS หน้าตาเป็นอย่างไร ?
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="nc"&gt;.bold-text&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;font-weight&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;700&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--jIUtto9w--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://user-images.githubusercontent.com/70952936/130702428-4808becb-cbc4-4a4d-8fa7-f9aa5409768d.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--jIUtto9w--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://user-images.githubusercontent.com/70952936/130702428-4808becb-cbc4-4a4d-8fa7-f9aa5409768d.jpg" alt="CSS Syntax" width="300" height="225"&gt;&lt;/a&gt;*ภาพจาก &lt;a href="https://www.theodinproject.com/lessons/foundations-css-foundations"&gt;The Odin Project&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Syntax ของ CSS เบื้องต้นประกอบไปด้วย 3 ส่วนหลัก ๆ selector, property และ value&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Selector
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;ใน webpage ของเรานั้นมักจะ element มากมายหลายส่วน เช่น heading main footer นอกจากนั้นยังมีส่วนที่เป็น content อื่น ๆ อีกเช่น text image video&lt;/li&gt;
&lt;li&gt;เพื่อความสวยงามแล้วเราคงไม่อยากที่จะให้หน้า webpage มีสีเดียวหรือมี font ขนาดเดียวกันหมดทั้งหน้า ซึ่ง selector จะสามารถเข้ามาทำหน้าที่แก้ไขปัญหาตรงนี้&lt;/li&gt;
&lt;li&gt;selector มีหน้าที่ในการอ้างอิง (refer) ถึง element ในส่วนของ HTML ที่ CSS จะมีผล หมายความว่าเราสามารถกำหนดได้ว่า element ไหนจะมีหน้าตาอย่างไรได้นั่นเอง (และมันก็จะไม่ส่งผลต่อ element อื่น ๆ ด้วย เจ๋งไปเลยใช่มั้ยล่ะ)&lt;/li&gt;
&lt;li&gt;Selector มีหลากหลายประเภทตามแต่ลักษณะการใช้งาน ในที่นี้จะยกตัวอย่างที่พบเจอและใช้งานบ่อย ๆ ดังนี้

&lt;ul&gt;
&lt;li&gt;Universal selector&lt;/li&gt;
&lt;li&gt;Type selector&lt;/li&gt;
&lt;li&gt;Class selectors&lt;/li&gt;
&lt;li&gt;ID selector&lt;/li&gt;
&lt;li&gt;Grouping selector&lt;/li&gt;
&lt;li&gt;Chaining Selector&lt;/li&gt;
&lt;li&gt;Descendent combinator&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Universal Selector
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Universal selector จะทำการกำหนดทุก element ในหน้า webpage เช่น
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;purple&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;*&lt;/code&gt; คือ Universal selector&lt;/li&gt;
&lt;li&gt;ดังนั้นหมายความว่าทุก element จะมี &lt;code&gt;color: purple;&lt;/code&gt; นั่นเอง&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Type selector
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Type selector หรือเรียกอีกอย่างว่า element selector จะทำการกำหนด element ประเภทนั้นทั้งหมด เช่น&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;HTML&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="c"&gt;&amp;lt;!-- index.html --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;header&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;Sukit Blog&lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/header&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;main&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;h1&amp;gt;&lt;/span&gt;Welcome to my block&lt;span class="nt"&gt;&amp;lt;/h1&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;This is my projects&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/main&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;footer&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;footer part&lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/footer&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;CSS&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="c"&gt;/* styles.css */&lt;/span&gt;
&lt;span class="nt"&gt;header&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;background-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;black&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nt"&gt;main&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;background-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;lightgrey&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nt"&gt;h1&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;blue&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nt"&gt;p&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;red&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nt"&gt;footer&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;background-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;lightgreen&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ผลลัพท์ก็จะออกมาเป็น&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ecjNBhbD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3dj90i8fzsmhmrty4p2l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ecjNBhbD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3dj90i8fzsmhmrty4p2l.png" alt="Type Selector Example" width="880" height="316"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;เราจะเห็นจาก CSS ว่ามีการใช้ Type selector เช่น &lt;code&gt;&amp;lt;header&amp;gt;&lt;/code&gt; ถูกกำหนดให้มี  &lt;code&gt;background-color&lt;/code&gt; เป็น &lt;code&gt;black&lt;/code&gt; ฉะนั้นส่วนที่เป็น &lt;code&gt;&amp;lt;header&amp;gt;&lt;/code&gt; จึงปรากฎสีพื้นหลังเป็นสีดำ&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;&amp;lt;main&amp;gt;&lt;/code&gt; และ &lt;code&gt;&amp;lt;footer&amp;gt;&lt;/code&gt; ก็มีการกำหนด &lt;code&gt;background-color&lt;/code&gt; เช่นเดียวกันทำให้ทั้ง &lt;code&gt;&amp;lt;header&amp;gt;&lt;/code&gt; &lt;code&gt;&amp;lt;main&amp;gt;&lt;/code&gt; และ &lt;code&gt;&amp;lt;footer&amp;gt;&lt;/code&gt; มีสีที่แตกต่างกันตามภาพตัวอย่าง&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;&amp;lt;p&amp;gt;&lt;/code&gt; เป็น element ที่ใช้ในการแสดงข้อความแบบ paragraph ถูกกำหนดให้ color เป็น red ดังนั้นไม่ว่า &lt;code&gt;&amp;lt;p&amp;gt;&lt;/code&gt; จะอยู่ตรงไหนของหน้า webpage จะเป็นมีสีแดงเสมอ สังเกตได้จากไม่ว่าจะเป็น &lt;code&gt;&amp;lt;p&amp;gt;&lt;/code&gt; ใน &lt;code&gt;&amp;lt;head&amp;gt;&lt;/code&gt; &lt;code&gt;&amp;lt;main&amp;gt;&lt;/code&gt; หรือ &lt;code&gt;&amp;lt;footer&amp;gt;&lt;/code&gt; ก็ล้วนมีสีแดงนั่นเอง&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Class Selectors
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Class selector จะทำการกำหนด element ที่มี class attribute อยู่ใน element นั้น ๆ นี่คือตัวอย่างการใส่ class attribute ลงใน element ของ HTML&lt;/li&gt;
&lt;li&gt;การใช้ Class Selector ใน CSS จะเริ่มต้นด้วยเครื่องหมาย . นำหน้า
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"cancel-text"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  Are you sure?
&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"agree-text"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  Done
&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nc"&gt;.cancel-text&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;red&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.agree-text&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;green&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ผลลัพธ์จะออกมาเป็น&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ZlLjKdER--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/14a7oqzc175zgun2v3tk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ZlLjKdER--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/14a7oqzc175zgun2v3tk.png" alt="Class Selector Example 1" width="880" height="235"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;จาก HTML เราจะเห็นได้ว่าใน &lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt; อันแรกจะมี attribute &lt;code&gt;class="cancel-text"&lt;/code&gt; ซึ่งเมื่อดู CSS ควบคู่กันก็จะเห็นได้ว่ามีการกำหนดให้ class &lt;code&gt;.cancel-text&lt;/code&gt; มี &lt;code&gt;color&lt;/code&gt; เป็น &lt;code&gt;red&lt;/code&gt; เราจึงเห็นข้อความ “Are you sure?" เป็นสีแดง&lt;/li&gt;
&lt;li&gt;ในส่วนของ &lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt; อันที่สอง มี attribute &lt;code&gt;class="agree-text"&lt;/code&gt; ซึ่งแตกต่างจาก &lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt; อันแรก เมื่อดู CSS จะเห็นได้ว่ามีการกำหนดให้ &lt;code&gt;.agree-text&lt;/code&gt; มี &lt;code&gt;color&lt;/code&gt; เป็น &lt;code&gt;green&lt;/code&gt; เราจึงเห็นข้อความ “Done" เป็นสีเขียว&lt;/li&gt;
&lt;li&gt;Class selector จึงมีประโยชน์ในกรณีที่เราต้องการให้ &lt;strong&gt;element ประเภทเดียวกันมีล property และ value แตกต่างกัน&lt;/strong&gt; เหมือนตัวอย่างข้างบนที่มี element เป็น &lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt; เหมือนกันแต่มีสีแตกต่างกันนั่นเอง&lt;/li&gt;
&lt;li&gt;ใน 1 element มี class ได้หลาย class โดยใช้ whitespace (เคาะ space bar 1 ครั้ง) เช่น
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"messagebox"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    This is an informational note.
&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"messagebox warning"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    This note shows a warning.
&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"messagebox danger"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    This note shows danger!
&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;จะเห็นว่าใน &lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt; อันแรกจะมี class เดียว นั่นก็คือ &lt;code&gt;messagebox&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt; อันที่ 2 จะมี 2 class คือ &lt;code&gt;messagebox&lt;/code&gt; และ &lt;code&gt;warning&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt; อันที่ 3 ก็เช่นเดียวกัน มี 2 class คือ &lt;code&gt;messagebox&lt;/code&gt; และ &lt;code&gt;danger&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--xVybVNJQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/q07pmhpsrf00hlgvf6em.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--xVybVNJQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/q07pmhpsrf00hlgvf6em.png" alt="Class Selector Example 2" width="880" height="380"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  ID Selector
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;ID Selector มีคุณสมบัติคล้ายคลึงกับ Class Selector วิธีการใช้ก็คล้ายคลึงกันโดยการนำ ID attribute ใส่ลงไปใน element&lt;/li&gt;
&lt;li&gt;การใช้ ID Selector ใน CSS จะเริ่มต้นด้วยเครื่องหมาย # นำหน้า
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="c"&gt;&amp;lt;!-- index.html --&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"title"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;My profile&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="c"&gt;/* styles.css */&lt;/span&gt;

&lt;span class="nf"&gt;#title&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;white&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;background-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;red&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ผลลัพธ์จะออกมาเป็น&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--DvrfNIiR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bflozuev4xcsx8dylxl9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--DvrfNIiR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bflozuev4xcsx8dylxl9.png" alt="ID Selector Example" width="880" height="210"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ผลลัพธ์จะมีความคล้ายคลึงกับการใช้ Class selector เป็นอย่างมาก&lt;/li&gt;
&lt;li&gt;แต่ก็ยังมีส่วนที่แตกต่างกันอยู่คือ ใน 1 element จะมี ID ได้แค่อันเดียว ในขณะที่มี Class ได้หลายอัน&lt;/li&gt;
&lt;li&gt;แม้ว่า Class กับ ID จะมีความคล้ายคลึงกันในฐานะ Selector ของ CSS แต่ในฐานะที่เป็น attribute ใน HTML จะสามารถใช้งานได้หลากหลายกว่า (จะพูดถึงภายหลัง)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;ลองนึกภาพเวลาเราทำ webpage แล้วมี element class id ต่าง ๆ จำนวนมาก การจะมานั่งกำหนด property และ value ของแต่ละ element หรือ class ทีละอัน คงมีอาการปวดหลัง ตาแห้ง กันบ้าง selector ต่อไปนี้จะมีส่วนช่วยในการจัดการกับปัญหาดังกล่าว&lt;/strong&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Grouping Selector
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Grouping Selector จะเข้ามาช่วยในกรณีที่เรามี element หลาย ๆ element ที่มีลักษณะเหมือนกัน&lt;/li&gt;
&lt;li&gt;ตัวอย่างเช่น
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nc"&gt;.read&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;white&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;background-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;black&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.unread&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;white&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;background-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;black&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;จากตัวอย่างดังกล่าวเราจะเห็นได้ว่า .read กับ .unread มี property และ value &lt;strong&gt;เหมือนกัน&lt;/strong&gt; แต่ที่ต้องเขียนแยกกันเพราะเป็นคนละ class ในกรณีนี้เราสามารถใช้ grouping selector โดยใช้เครื่องหมาย , คั่น ดังตัวอย่างข้างล่าง
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nc"&gt;.read&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;span class="nc"&gt;.unread&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;white&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;background-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;black&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.read&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c"&gt;/* property อื่น ๆ ที่ไม่อยากให้เหมือนกัน */&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.unread&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c"&gt;/* property อื่น ๆ ที่ไม่อยากให้เหมือนกัน */&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;การใช้ grouping selector สามารถใช้ในรูป &lt;code&gt;class,class&lt;/code&gt; &lt;code&gt;element,element&lt;/code&gt; ก็ได้&lt;/li&gt;
&lt;li&gt;แหล่งอ้างอิงบางแหล่งเรียกการใช้เครื่องหมาย , ใน selector ลักษณะนี้ว่า Selector list&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Chaining Selector
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Chaining Selector สามารถใช้ในกรณีที่ 1 element มีหลาย class สามารถดูได้จากตัวอย่างต่อไปนี้
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="c"&gt;&amp;lt;!-- index.html --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"messagebox"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    This is an informational message.
&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"messagebox warning"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    This message shows a warning.
&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"messagebox danger"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    This message shows danger!
&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"danger"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    This won't get styled — it also needs to have the messagebox class
&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;จะเห็นว่าใน &lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt; อันแรกจะมี class เดียว นั่นก็คือ &lt;code&gt;messagebox&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt; อันที่ 2 จะมี 2 class คือ &lt;code&gt;messagebox&lt;/code&gt; และ &lt;code&gt;warning&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt; อันที่ 3 ก็เช่นเดียวกัน มี 2 class คือ &lt;code&gt;messagebox&lt;/code&gt; และ &lt;code&gt;danger&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;ทีนี้หากเราต้องการกำหนด style ให้ &lt;code&gt;messagebox&lt;/code&gt; มีลักษณะเป็นกรอบล้อมรอบสามารถทำได้ดังนี้
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="c"&gt;/* styles.css */&lt;/span&gt;
&lt;span class="nc"&gt;.messagebox&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;border&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;4px&lt;/span&gt; &lt;span class="nb"&gt;solid&lt;/span&gt; &lt;span class="m"&gt;#666&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;.5em&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;margin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;10px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ก็จะได้ผลลัพธ์ประมาณนี้&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--q3LB-LoT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2osg8cqstkp6mkgufc34.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--q3LB-LoT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2osg8cqstkp6mkgufc34.png" alt="Chaining Selector Example" width="880" height="309"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;เราจะเห็นได้ว่าทุก &lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt; ที่มี class &lt;code&gt;messagebox&lt;/code&gt; จะมีขอบขึ้นมาล้อมรอบแล้ว&lt;/li&gt;
&lt;li&gt;ต่อมาเราอยากให้ขอบของ class &lt;code&gt;messagebox&lt;/code&gt; &lt;code&gt;warning&lt;/code&gt; และ &lt;code&gt;messagebox&lt;/code&gt; &lt;code&gt;danger&lt;/code&gt; มีตัวอักษรตัวหนาและมีสีที่แตกต่างออกไป สามารถใช้ chaining selector โดยเขียนได้ในรูป &lt;code&gt;.classname1.classname2&lt;/code&gt; โดยไม่ต้องมี whitespace คั่น
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="c"&gt;/* styles.css */&lt;/span&gt;
&lt;span class="nc"&gt;.messagebox&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;border&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;4px&lt;/span&gt; &lt;span class="nb"&gt;solid&lt;/span&gt; &lt;span class="m"&gt;#666&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;.5em&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;margin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;10px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.messagebox.warning&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;border-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;orange&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;font-weight&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;bold&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.messagebox.danger&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;border-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;red&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;font-weight&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;bold&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ผลลัพธ์ก็จะออกมาดังนี้&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--sGzcc8nC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ld2cyh2dccj5s8p8238n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--sGzcc8nC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ld2cyh2dccj5s8p8238n.png" alt="Chaining Selector Example 2" width="880" height="288"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Descendant Combinator
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Combinator เป็น selector ที่รวม (combine) selector อื่น ๆ ไว้ด้วยกัน มีประโยชน์หลากหลาย&lt;/li&gt;
&lt;li&gt;Combinator มีหลายประเภท แต่ในที่นี้จะกล่าวถึงแค่ Descendent combinator อย่างเดียว เพราะพบได้พบและใช้งานบ่อย&lt;/li&gt;
&lt;li&gt;เราสามารถเขียน descendent combinator ได้โดยใช้ whitespace คั่นกลางระหว่าง element เช่น &lt;code&gt;.classname1 .classname2&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;การทำงานของ descendent combinator จะมีกระบวนการดังนี้

&lt;ul&gt;
&lt;li&gt;จะกำหนด style ให้กับ element ที่มี &lt;code&gt;class="classname2"&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;โดย element ที่มี &lt;code&gt;classname2&lt;/code&gt; นี้ต้องเป็นลูก (child) ของ element ที่มี &lt;code&gt;class="classname1"&lt;/code&gt; เท่านั้น
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="c"&gt;&amp;lt;!-- index.html --&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"box"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"content"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
                This is .content in .box
        &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"contents"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;This is .content but not in .box&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="c"&gt;/* styles.css */&lt;/span&gt;

&lt;span class="nc"&gt;.box&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;border&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;4px&lt;/span&gt; &lt;span class="nb"&gt;solid&lt;/span&gt; &lt;span class="m"&gt;#666&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;.5em&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;margin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;10px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.box&lt;/span&gt; &lt;span class="nc"&gt;.content&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;red&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ผลลัพธ์ที่ได้ก็คือ&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--55hl-OzC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/drrug1b74uhcb3oxg9gq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--55hl-OzC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/drrug1b74uhcb3oxg9gq.png" alt="Descendant Combinator Example" width="880" height="236"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;จะเห็นได้ว่าใน &lt;code&gt;&amp;lt;div class="box"&amp;gt;&lt;/code&gt; คลุม &lt;code&gt;&amp;lt;div class="content"&amp;gt;&lt;/code&gt; ไว้อยู่ ในกรณีนี้เราถือว่า &lt;code&gt;&amp;lt;div class="content"&amp;gt;&lt;/code&gt; เป็น child element ของ &lt;code&gt;class="box"&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;เมื่อเราเขียนใน CSS โดยกำหนด selector เป็น &lt;code&gt;.box .content&lt;/code&gt; ให้มี &lt;code&gt;color: red;&lt;/code&gt; ข้อความ “This is .content in .box" จึงมีสีแดงตามหลักการทำงานของ descendent combinator&lt;/li&gt;
&lt;li&gt;ส่วน &lt;code&gt;&amp;lt;div class="content"&amp;gt;&lt;/code&gt; ที่มีข้อความ “This is .content but not in box" ไม่ได้เป็น child element ใน &lt;code&gt;class="box"&lt;/code&gt; ข้อความดังกล่าวจึงไม่มีสีแดง หรือก็คือไม่ได้ถูกกำหนดใน &lt;code&gt;.box .content&lt;/code&gt; นั่นเอง&lt;/li&gt;
&lt;li&gt;Descendent combinator ใช้ได้ทั้งกับ element ทั่ว ๆ ไป และ class&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;หลังจากร่ายเรื่อง Selector มาพอเข้าใจ ต่อไปเราไปดูส่วนอื่น ๆ ของ CSS กันบ้าง&lt;/p&gt;

&lt;h3&gt;
  
  
  Property
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--jIUtto9w--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://user-images.githubusercontent.com/70952936/130702428-4808becb-cbc4-4a4d-8fa7-f9aa5409768d.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--jIUtto9w--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://user-images.githubusercontent.com/70952936/130702428-4808becb-cbc4-4a4d-8fa7-f9aa5409768d.jpg" alt="CSS Syntax" width="300" height="225"&gt;&lt;/a&gt;*ภาพจาก &lt;a href="https://www.theodinproject.com/lessons/foundations-css-foundations"&gt;The Odin Project&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;หลังจากเราเข้าใจการทำงานของ selector แล้ว ต่อไปคือการทำความเข้าใจเรื่อง property&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;property จะเป็นตัวกำหนดลักษณะ หรือ style เช่น &lt;code&gt;color: blue&lt;/code&gt; หรือ &lt;code&gt;text-align: center&lt;/code&gt; &lt;/li&gt;
&lt;li&gt;property ใน CSS มีจำนวนมากเกินจะนับ สามารถศึกษาเพิ่มเติมได้ที่นี่  &lt;a href="https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Properties_Reference"&gt;https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Properties_Reference&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;properties ที่เจอบ่อยและควรรู้มีดังนี้

&lt;ul&gt;
&lt;li&gt; &lt;code&gt;color&lt;/code&gt;: สีของข้อความ (text)&lt;/li&gt;
&lt;li&gt;  &lt;code&gt;text-align&lt;/code&gt;: จัดตำแหน่ง element เช่น ชิดซ้าย ตรงกลาง ชิดขวา&lt;/li&gt;
&lt;li&gt;  &lt;code&gt;background-color&lt;/code&gt;: สีของ background&lt;/li&gt;
&lt;li&gt;  &lt;code&gt;width&lt;/code&gt;: ขนาดความกว้าง&lt;/li&gt;
&lt;li&gt;  &lt;code&gt;height&lt;/code&gt;: ขนาดความยาว&lt;/li&gt;
&lt;li&gt;  &lt;code&gt;padding&lt;/code&gt;: ขนาดพื้นที่ภายใน element&lt;/li&gt;
&lt;li&gt;  &lt;code&gt;margin&lt;/code&gt;: ขนาดพื้นที่ภายนอก element&lt;/li&gt;
&lt;li&gt;  &lt;code&gt;font-family&lt;/code&gt;: ชนิดของ font&lt;/li&gt;
&lt;li&gt;  &lt;code&gt;font-size&lt;/code&gt;: ขนาดของ font&lt;/li&gt;
&lt;li&gt;  &lt;code&gt;border&lt;/code&gt;: ขนาด สี ของเส้นขอบ&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;เราจะเห็นภาพของแต่ละ property มากขึ้นในภายหลัง&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Value
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--jIUtto9w--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://user-images.githubusercontent.com/70952936/130702428-4808becb-cbc4-4a4d-8fa7-f9aa5409768d.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--jIUtto9w--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://user-images.githubusercontent.com/70952936/130702428-4808becb-cbc4-4a4d-8fa7-f9aa5409768d.jpg" alt="CSS Syntax" width="300" height="225"&gt;&lt;/a&gt;*ภาพจาก &lt;a href="https://www.theodinproject.com/lessons/foundations-css-foundations"&gt;The Odin Project&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;value เป็นค่าที่เราใช้กำหนด property อีกที เช่น &lt;code&gt;color: red&lt;/code&gt; คือการกำหนด property &lt;code&gt;color&lt;/code&gt; ให้มีค่า(value) เป็น &lt;code&gt;red&lt;/code&gt; หรือสีแดงนั่นเอง
&lt;/li&gt;
&lt;li&gt;เราจะศึกษาเรื่องของ value ในแต่ละ property อีกทีในภายหลัง&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Reflect #4
&lt;/h2&gt;

&lt;p&gt;หลังจากเราไปศึกษาลักษณะเบื้องต้นของ CSS ไปพอสมควรแล้วกลับมาดู code ของเราต่อ&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;main&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"main"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;/main&amp;gt;&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;สรุป&lt;/strong&gt; สิ่งที่เราเข้าใจสิ่งที่เราเขียนลงไปตอนนี้&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;เราใช้ &lt;code&gt;&amp;lt;main&amp;gt;&lt;/code&gt; เป็น element หลักให้คลุมเนื้อหาทั้งหมดใน webpage &lt;/li&gt;
&lt;li&gt;เราใช้ &lt;code&gt;id="main"&lt;/code&gt; เพื่อน่าจะได้ใช้ ID Selector ในภายหลัง&lt;/li&gt;
&lt;li&gt; &lt;code&gt;&amp;lt;main&amp;gt;&lt;/code&gt; กับ &lt;code&gt;id="main"&lt;/code&gt; แม้จะมีคำว่า main เหมือนกันแต่ไม่เกี่ยวข้องกัน อันแรกเป็นประเภทของ element ส่วนอันที่สอง main เป็นเพียงชื่อที่เราตั้งให้ attribute ID &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;ข้อนี้เป็นก้าวแรกในการทำ project ดังนั้นเนื้อหาอาจจะเยอะหน่อย แต่ในข้อต่อ ๆ ไปก็จะง่ายขึ้นครับ&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Reference&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://www.freecodecamp.org/learn/responsive-web-design/"&gt;FreeCodeCamp&lt;/a&gt;&lt;br&gt;
&lt;a href="https://developer.mozilla.org/en-US/"&gt;MDN Web Docs&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.theodinproject.com/"&gt;The Odin Project&lt;/a&gt;&lt;br&gt;
&lt;a href="https://cs50.harvard.edu/web/2020/"&gt;CS50’s Web Programming with Python and JavaScript&lt;/a&gt; By Havard University&lt;/p&gt;




&lt;p&gt;หรือจะสนับสนุนผมก็ทำได้ผ่านช่องทางข้างล่างนี้ครับ&lt;br&gt;
&lt;a href="https://www.buymeacoffee.com/sukitbunsiv"&gt;https://www.buymeacoffee.com/sukitbunsiv&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>beginners</category>
      <category>html</category>
      <category>css</category>
    </item>
    <item>
      <title>แนะนำ freeCodeCamp ก้าวแรกสู่ Self-Taught Developer และ Learning Project ใหม่ของผม</title>
      <dc:creator>Sukit.B</dc:creator>
      <pubDate>Fri, 13 May 2022 09:49:07 +0000</pubDate>
      <link>https://dev.to/sukit/aenanam-freecodecamp-kaawaerksuu-self-taught-developer-aela-learning-project-aihmkhngphm-2pf8</link>
      <guid>https://dev.to/sukit/aenanam-freecodecamp-kaawaerksuu-self-taught-developer-aela-learning-project-aihmkhngphm-2pf8</guid>
      <description>&lt;h2&gt;
  
  
  แนะนำ freeCampCode : ของฟรีและดี มีอยู่ในโลก
&lt;/h2&gt;

&lt;p&gt;*ไม่มี sponsor&lt;/p&gt;

&lt;p&gt;ผมเป็นคนหนึ่งที่พยายามเรียนรู้ทักษะ coding ด้วยตัวเอง เนื่องจากเป็นคนที่ชอบคอมพิวเตอร์ แต่ไม่ได้เรียนจบสายนี้มาโดยตรง เลยพยายามหา Resource ต่าง ๆ ในโลกออนไลน์เพื่อเรียนรู้ด้วยตัวเอง โดยหวังว่าจะมีความรู้ความสามารถพร้อมเมื่อโอกาสในการย้ายสายงานมาถึง&lt;/p&gt;

&lt;p&gt;ผมจึงออกท่องโลกอินเทอเน็ตเพื่อเสาะแสวงหาแหล่งความรู้ออนไลน์ พบว่าคอร์สต่าง ๆ ที่มีสอนกันก็มีราคาสูงอยู่ (สำหรับคนต่างประเทศที่รายได้สัมพันธ์กับค่าครองชีพคงไม่ได้รู้สึกอะไรมาก แต่สำหรับคนไทยที่รายได้ไม่ค่อยเหมาะสมกับค่าครองชีพอย่างเรา ๆ คงรู้สึกว่าค่าความรู้พวกนี้มีราคาแพงใช้ได้) จนกระทั่งเห็น youtuber สาย self-taught developer หลาย ๆ คนเชียร์ (หลายคนเรียกได้ว่า "อวย") website หนึ่งที่ฟรีและไม่มีค่าใช้จ่ายใด ๆ แอบแฝง นั่นก็คือ &lt;a href="//freecodecamp.org"&gt;freecodecamp.org&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;freeCodeCamp&lt;/strong&gt; เป็นองค์กรไม่แสวงหาผลกำไร จดทะเบียนในสหรัฐอเมริกา มีรายได้จากการรับบริจาคเป็นหลัก และไม่ว่าคุณจะบริจาคหรือไม่ ถ้าคุณเรียนจบครบถ้วนหลักสูตรก็มีสิทธิได้ certificate แบบไม่มีเงื่อนไข (หากคุณคุ้นเคยกับการเรียนคอร์สออนไลน์จะพบว่าคอร์สหลาย ๆ แหล่งก็เปิดให้เรียนฟรีทั้งคอร์ส แต่ถ้าอยากได้ certificate ก็ต้องจ่ายค่าเรียนอยู่ดี)&lt;/p&gt;

&lt;p&gt;หลักสูตรของ FCC มีมากมายหลายให้เลือกเรียน แต่ส่วนใหญ่จะมีแนวโน้มไปทางพวก web development และ data ซะส่วนใหญ่&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--HBDQCzfW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mhcniq3v2nxxsqh2m2le.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--HBDQCzfW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mhcniq3v2nxxsqh2m2le.png" alt="FCC Course" width="880" height="1356"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;ส่วนการเรียนรู้ใน FCC นั้นจะเป็นแบบ Learning by doing ในรูปแบบ Interactive coding lesson&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--yRLgfQQ2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/beopsx30akkj46nh1x9r.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--yRLgfQQ2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/beopsx30akkj46nh1x9r.png" alt="Image description" width="880" height="481"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;ซึ่งเมื่อเรียนเนื้อหาจบทั้งหมดแล้วก็จะมี project ให้ทำต่ออีก 5 ชิ้นเพื่อนำเนื้อหาที่เรียนมาประยุกต์ใช้&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;วันที่ 13/5/2022 FCC ได้ปรับเนื้อหาในคอร์ส Responsive Web Design ใหม่โดยเอา project ทั้ง 5 ไปแทรกตามเนื้อหาต่าง ๆ ซึ่งบอกเลยว่าน่าเรียนกว่าเดิมมาก ๆ ดูรายละเอียดเพิ่มเติมได้ที่นี่ &lt;a href="https://forum.freecodecamp.org/t/responsive-web-design-updates/508345"&gt;Responsive Web Design updated&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;สรุป&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;freeCampCode เหมาะกับการเริ่มต้นเรียนรู้ทักษะ coding โดยเฉพาะสาย web development (ผมยังไม่ได้ลองหลักสูตรพวก Data) &lt;/li&gt;
&lt;li&gt;ฟรีไม่เสียค่าใช้จ่ายแม้แต่บาทเดียว&lt;/li&gt;
&lt;li&gt;เหมาะกับคนที่ยังไม่แน่ใจว่าตัวเองชอบการ coding หรือไม่ เพราะว่าไม่มีค่าใช้จ่ายทำให้สามารถเรียนรู้ได้อย่างอิสระ&lt;/li&gt;
&lt;li&gt;หลักสูตรของ FCC ออกแบบมาให้ใช้เวลาเรียนรู้ 300 ชั่วโมง (แม้เรียนจริง ๆ จะไม่ถึงก็ตาม) จึงไม่เหมาะกับผู้ที่ต้องการเรียนรู้แบบเร่งรัด&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Leaning Project : ไม่ใช่แค่ทำได้ แต่ต้องทำให้เป็น
&lt;/h2&gt;

&lt;p&gt;เมื่อผมจบ Responsive web design legacy (หลักสูตรเก่า) แล้วกลับพบว่าผม skill เรื่อง HTML และ CSS ของผมอยู่ในระดับที่ "ทำได้" กล่าวคือหากมี requirement มาให้อย่างชัดเจน ผมสามารถทำ project นั้นให้ลุล่วงได้ แต่อาจจะไม่ได้เข้าใจการทำงานทั้งหมดของตัวเอง&lt;/p&gt;

&lt;p&gt;เปรียบเทียบความรู้สึกของผมให้เห็นภาพ เช่น ผมต้องการเดินทางด้วยรถยนต์จากกรุงเทพไปเชียงใหม่ ผมอาจจะเปิด google map แล้วให้มันนำทางไป แน่นอนว่าผมสามารถไปถึงเชียงใหม่ตามวัตถุประสงค์ได้แน่นอน แต่ผมไม่ได้ต้องการแค่นั้น&lt;/p&gt;

&lt;p&gt;สิ่งที่ผมต้องการคือ แม้ผมจะไม่ได้ใช้ google map ผมก็สามารถเดินทางไปเชียงใหม่ได้ หากพบปัญหาเช่น รถติด ผมสามารถเปลี่ยนไปใช้เส้นทางอื่นเพื่อไปให้ถึงจุดหมาย ผมรู้ว่าช่วงไหนมีปั๊มให้แวะพัก ช่วงไหนมีของอร่อยให้แวะกิน ช่วงไหนเป็นเส้นทางอันตราย&lt;/p&gt;

&lt;p&gt;ผมเคยเข้าร่วมโครงการ &lt;a href="https://www.teachforthailand.org/%E0%B9%82%E0%B8%84%E0%B8%A3%E0%B8%87%E0%B8%81%E0%B8%B2%E0%B8%A3%E0%B8%84%E0%B8%A3%E0%B8%B9%E0%B8%9C%E0%B8%B9%E0%B9%89%E0%B8%99%E0%B8%B3/"&gt;ครูผู้นำการเปลี่ยนแปลง&lt;/a&gt; ของมูลนิธิ Teach For Thailand อยู่ 2 ปี ทำให้ผมเชื่อมั่นในการพลังของการศึกษาและการเรียนรู้ ดังนั้นเพื่อให้ผมสามารถยกระดับตัวเองจาก "ทำได้" เป็น "ทำเป็น" ผมจึงต้องพยายามมากขึ้นกว่าเดิมอีกนิด&lt;/p&gt;

&lt;p&gt;ผมจึงสร้าง learning project ใหม่ให้กับตัวเองโดยวางวิธีการไว้ดังนี้&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;นำ requirment (บางทีเรียกว่า user story) ใน project ของ FCC มาทำการ Breakdown ให้เราเข้าใจอย่างถ่องแท้ว่า requirement ในแต่ละข้อเราใช้ความรู้ความเข้าใจเรื่องใดบ้างเพื่อทำ requirement ข้อนี้ให้สำเร็จ ผมหวังว่ากระบวนการนี้จะช่วยทำการทบทวนเนื้อหาที่เราอาจจะทำความเข้าใจแบบ "ผ่าน ๆ" ให้เข้าใจมากยิ่งขึ้น&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;ผมจะเขียนออกมาเป็น blog ในลักษณะที่ทำการพูดคุยกับตัวเอง มีหลาย ๆ คนกล่าวว่าวิธีการเรียนรู้ที่ดีที่สุดคือการ "สอน" แต่ในเบื้องต้นผมยังเป็นมือใหม่ไม่อาจไปสอนใครต่อใครได้มากมาย จึงเลือกที่จะพูดคุยกับตัวเองเพื่อสอนตัวเองก่อนเป็นเบื้องต้น&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;ผมจะนำเนื้อหาที่เขียนไว้มาเผยแพร่ใน web นี้เพื่อให้ทุก ๆ คนที่เข้ามาอ่านช่วยให้ feedback และให้ความรู้กับผมเพิ่มเติม นอกจากนี้ผมหวังว่าอย่างน้อยอาจจะเป็นตัวอย่างการเรียนรู้ให้คนอื่น ๆ เอาไปปรับใช้ให้เหมาะกับตัวเองในอนาคตต่อไป &lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;ยังไงก็ฝากทุก ๆ คนแวะเวียนมาให้กำลังใจกันด้วยนะครับ&lt;/p&gt;

</description>
      <category>freecodecamp</category>
      <category>webdev</category>
      <category>beginners</category>
      <category>learning</category>
    </item>
  </channel>
</rss>
