สมัยโบราณ
ตามหลักฐานต่าง ๆ ปรากฏว่าตั้งแต่สมัยโบราณไทยเรายังไม่มีธงชาติโดยเฉพาะ เมื่อเวลาจัดกองทัพไปทำสงคราม จะใช้ธงสีต่าง ๆ ประจำทัพเป็นเครื่องหมายทัพละสี ต่อมาเมื่อมีการเดินเรือค้าขายกับต่างประเทศทางตะวันตกในสมัยกรุงศรีอยุธยา ได้ใช้ธงสีแดงติดเป็นเครื่องหมายว่าเป็นเรือสินค้าของไทย จดหมายเหตุของชาวต่างประเทศกล่าวว่า ในรัชกาลสมเด็จพระนารายณ์มหาราชมีเรือฝรั่งเศสแล่นเข้ามาสู่ปากน้ำเจ้าพระยา เมื่อถึงป้อมของไทย ไทยชักธงฮอลันดาขึ้นรับเรือฝรั่งเศส เพราะไม่มีธงชาติของตนเอง แต่เรือฝรั่งเศสไม่ยอมสลุตรับธงฮอลันดาเพราะเคยเป็นอริกันมาก่อน และถือว่าไม่ใช่ธงชาติไทย ฝ่ายไทยจึงแก้ไขโดยนำ"ธงแดง" ขึ้นชักแทนธงชาติ เรือฝรั่งเศสจึงยอมสลุตคำนับ ตั้งแต่นั้นมาธงสีแดงจึงกลายเป็นธงชาติของไทยเรื่อยมา
สมัยกรุงรัตนโกสินทร์
ไทยยังคงใช้ธงสีแดงเกลี้ยงชักเป็นเครื่องหมายประจำเรือค้าขายกับต่างประเทศ อยู่ ธงแดงนี้ใช้ชักขึ้นทั้งในเรือหลวงและเรือราษฎร ต่อมาพระบาทสมเด็จพระพุทธยอดฟ้าจุฬาโลก ทรงพระราชดำริว่า เรือหลวงและเรือราษฎรควรมีเครื่องหมายให้เห็นที่ต่างกัน จึงมีพระบรมราชโองการให้จัดทำรูปจักรสีขาวติดไว้กลางธงแดงเป็นเครื่องหมาย ใช้เฉพาะเรือหลวง ส่วนเรือค้าขายของราษฎรทั่วไปยังคงใช้ธงแดงเกลี้ยงอยู่
รัตนโกสินทร์ตอนต้น (รัชกาลที่ 2-รัชกาลที่ 3)
พระบาทสมเด็จพระพุทธเลิศหล้านภาลัย รัชกาลที่ 2 ระหว่าง พ.ศ. 2360 - 2366 โปรดให้ส่งเรือกำปั่นหลวงไปค้าขายระหว่างกรุงเทพฯ สิงคโปร์ และมาเก๊า ซึ่งเป็นสถานีค้าขายของอังกฤษ โดยโปรดให้ติดธงสีแดง แต่ ปรากฏว่าไปเหมือนกับธงเรือสินค้าของชาติมาลายูเจ้าเมือง สิงคโปร์ จึงขอให้เรือไทยใช้ธงสีอื่นให้ต่างกันออกไป ในระยะนั้นประจวบกับมีช้างเผือกมาสู่พระบารมีพระบาทสมเด็จพระพุทธเลิศหล้า นภาลัย จึงมีพระบรมราชโองการให้ทำรูปช้างเผือกไว้กลางวงจักร
รัชกาลที่ 4
รัชกาลพระบาทสมเด็จพระจอมเกล้าเจ้าอยู่หัว ได้ทำหนังสือสัญญาเปิดการค้าขายกับชาวตะวันตกในพ.ศ. 2398 มีเรือสินค้าของประเทศต่างๆ ในยุโรปและอเมริกาเดินทางเข้ามาค้าขายมากขึ้น และมีสถานกงสุล ตั้งอยู่ในกรุงเทพฯ สถานที่เหล่านั้นล้วนชักธงชาติของตนขึ้นเป็นของตนขึ้นเป็นสำคัญ จึงจำเป็นที่จะต้องมีธงชาติที่แน่นอน จึงทรงพระราชดำริว่า ธงสีแดงซึ่งเรือสินค้าไทยใช้อยู่นั้นซ้ำกับประเทศอื่น ยากแก่การสังเกตไม่สมควรใช้อีกต่อไป ควรจะใช้ธงอย่างเรือหลวงเป็นธงชาติ แต่โปรดให้เอารูปจักรออกเสียเพราะเป็นเครื่องหมายเฉพาะพระเจ้าแผ่นดิน คงไว้แต่รูปช้างเผือกอยู่กลางธงแดง
รัชกาลที่ 5
ในระหว่างรัชกาลพระบาทสมเด็จพระจุลจอมเกล้าเจ้าอยู่หัว ได้มีการออกพระราชบัญญัติว่าด้วยแบบอย่างธงหลายครั้ง คือพระราชบัญญัติว่าด้วยแบบอย่างธงสยาม รศ.110 พระราชบัญญัติธงรัตนโกสินทรศก 116 พระราชบัญญัติธง รัตนโกสินทรศก 118 ทุกฉบับได้ยืนยันลักษณะของธงชาติว่าเป็นธงพื้นแดง กลางเป็นรูปช้างเผือก ไม่ทรงเครื่องหันหน้าเข้าเสาทั้งสิ้น
รัชกาลที่ 6
ต่อมาในรัชกาลพระบาทสมเด็จพระมงกุฎเกล้าเจ้าอยู่หัว ทรงโปรดเกล้าฯ ให้ออกประกาศแก้ไขเพิ่มเติมพระราชบัญญัติธง รัตนโกสินทรศก 129 เมื่อวันที่ 21 พฤศจิกายน 2459 แก้ไขลักษณะธงชาติเป็นธงพื้นแดง กลางเป็นรูปช้างเผือกทรงเครื่องยืนแท่น หันหลังเข้าเสา ประกาศนี้เริ่มให้บังคับใช้ ตั้งแต่วันที่ 1 มกราคม 2459 (ขณะนั้นยังนับเดือนเมษายนเป็นเดือนเริ่มศักราชใหม่ )
สงครามโลกครั้งที่ 1
ในพ.ศ. 2460 พระบาทสมเด็จพระมงกุฎเกล้าเจ้าอยู่หัว ทรงนำประเทศไทยเข้าร่วมสงครามโลกครั้งที่ 1 ทรงพระราชดำริว่า การประกาศสงครามนับเป็นความเจริญก้าวหน้าขั้นหนึ่งของประเทศ สมควรจะมีสิ่งเตือนใจ สำหรับวาระนี้ไว้ภายหน้า สิ่งนั้นควรได้แก่ "ธงชาติ" ทรงเห็นว่าลักษณะที่แก้ไขใน พ.ศ. 2459 นั้น ยังไม่สง่างาม ทรงโปรดเกล้าฯ ให้เพิ่มแถบน้ำเงินแก่ขึ้นอีกสีหนึ่งเป็นสามสี ตามลักษณะของธงนานาชาติที่ใช้กันอยู่ เพื่อให้เป็นเครื่องหมายว่าไทยเข้าร่วมกับฝ่ายสัมพันธมิตร และอีกประการหนึ่งสีน้ำเงินเป็นสีประจำพระชนมวารเฉพาะพระองค์ จึงเป็นสีที่ควรประดับไว้ในธงชาติไทย ดังนั้นในปี 2460 จึงทรงพระกรุณาโปรดเกล้าฯ ให้ตราพระราชบัญญัติ ธง พระพุทธศักราช 2460 ออกประกาศเมื่อวันที่ 28 กันยายน พ.ศ. 2460 มีผลบังคับภายหลังวันออกประกาศในหนังสือราชกิจจานุเบกษาแล้ว 30 วัน ลักษณะธงชาติมีดังนี้ คือ
เป็นธงรูปสี่เหลี่ยมรี ขนาดกว้าง 2 ส่วน ยาว 3 ส่วน มีแถบสีนำเงินแก่กว้าง 1 ใน 3 ของความกว้างของธงอยู่กลาง มีแถบสีขาวกว้าง 1 ใน 6 ของความกว้างของธงข้างละแถบ แล้วมีแถบแดงกว้างเท่ากับแถบขาวประกอบข้างนอกอีกข้างละแถบ และ พระราชทานนามว่า "ธงไตรรงค์" ส่วนธงรูปช้างกลางธงพื้นแดงของเดิมนั้นให้ยกเลิก ความหมายของสีธงไตรรงค์คือ สีแดงหมายถึงชาติ และ ความสามัคคี ของคนในชาติ สีขาวหมายถึงศาสนา ซึ่งเป็นเครื่องอบรมสั่งสอนจิตใจให้บริสุทธิ์ สีนำเงินหมายถึงพระมหากษัตริย์ผู้ทรงเป็นประมุขของประเทศ
รัชกาลที่ 7 จนถึงปัจจุบัน
ครั้นถึงรัชกาลที่ 7 พระบาทสมเด็จพระปกเกล้าเจ้าอยู่หัว ทรงโปรดเกล้าฯ ได้มีพระราชบันทึกพระราชทานไปยังองคมนตรี เพื่อให้เสนอความเห็นของคนหมู่มากว่า จะคงใช้ธงไตรรงค์ดังที่ใช้อยู่เป็นธงชาติต่อไป หรือจะกลับไปใช้ธงช้างแทน หรือจะปรับปรุงเปลี่ยนแปลงลักษณะธงชาติ กับวิธีใช้ธงไตรรงค์อย่างไร ปรากฏว่าความเห็นขององคมนตรีแตกต่างกระจายกันมาก จึงมิได้กราบบังคมทูลข้อชี้ขาด ดังนั้นจึงทรงพระกรุณาโปรดเกล้าฯ ให้คงใช้ธงไตรรงค์เป็นธงชาติต่อไปตามพระราชวินิจฉัยลงวันที่ 25 พฤษภาคม พ.ศ. 2470 ในรัชกาลพระบาทสมเด็จพระเจ้าอยู่หัวอานันทมหิดล รัชกาลที่ 8 ได้มีการปรับปรุงพระราชบัญญัติธงซึ่งยังคงใช้ธงไตรรงค์เป็นธงชาติเช่นเดิม แต่ ได้อธิบายลักษณะธงไว้เข้าใจง่ายและชัดเจน ดังนี้มีขนาดเป็นรูปสี่เหลี่ยมผืนผ้า กว้าง 6 ส่วน ยาว 9 ส่วน ด้านกว้างแบ่งเป็น 5 แถบ ตลอดความยาวของผืนธง ตรงกลางเป็นแถบสีน้ำเงินแก่ กว้าง 2 ส่วน ต่อจากแถบสีน้ำเงินแก่ออกไปทั้งสองข้างเป็นแถบสีขาวกว้างข้างละ 1 ส่วน ต่อจากแถบสีขาวออกไปทั้งสองข้างเป็นแถบสีแดงกว้างข้างละ 1 ส่วน นับแต่นั้นมาไม่มีข้อความใดๆ เปลี่ยนแปลงลักษณะของธงชาติอีก ธงไตรรงค์ จึงเป็นธงชาติไทยสืบมาจนปัจจุบัน