Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> CSS

โมเดลการจัดรูปแบบภาพ (Visual Formatting Model) ใน CSS


โมเดลการจัดรูปแบบภาพ (Visual Formatting) ใน CSS เป็นโมเดลที่สอดคล้องกับอัลกอริทึมซึ่งประมวลผลและแปลงแต่ละองค์ประกอบของเอกสารเพื่อสร้างกล่องหนึ่งหรือหลายกล่องที่สอดคล้องกับ CSS Box Model

การจัดวางของกล่องที่สร้างขึ้นขึ้นอยู่กับคุณสมบัติหลายอย่าง เช่น:

  • ขนาด (Dimensions)
  • ประเภท - atomic inline-level, block, inline, หรือ inline-block
  • การจัดตำแหน่ง - absolute, float, หรือ normal
  • ความสัมพันธ์กับองค์ประกอบลูกและองค์ประกอบข้างเคียงในเอกสาร
  • ข้อมูลภายนอก - ความกว้าง-สูงของ viewport และรูปภาพ ฯลฯ

การสร้างกล่อง CSS ขององค์ประกอบที่ประมวลผลแล้ว:

  • ระดับบล็อก (Block level)
    • องค์ประกอบเหล่านี้บังคับให้เกิดการขึ้นบรรทัดใหม่ด้านบนและด้านล่าง และใช้ความกว้างทั้งหมดที่มีอยู่ แม้ว่าเนื้อหาจะไม่จำเป็นต้องใช้ก็ตาม
    • ตัวอย่าง: Divisions (<div>), Heading (<h1> ถึง <h6>), ฯลฯ
  • ระดับอินไลน์ (Inline level)
    • องค์ประกอบเหล่านี้ไม่บังคับให้เกิดการขึ้นบรรทัดใหม่ และใช้ความกว้างเพียงพอสำหรับเนื้อหาเท่านั้น
    • ตัวอย่าง: Spans (<span>), Strong element (<strong>)

ตัวอย่าง

ลองดูตัวอย่างการสร้างกล่องระดับบล็อก:

<!DOCTYPE html> <html> <head> <title>HTML Heading</title> <style> form {    width:70%;    margin: 0 auto;    text-align: center; } * {    padding: 2px;    margin:5px; } input[type="button"] {    border-radius: 10px; } #headingPreview h2{    background-color: #DC3545; } </style> </head> <body> <form> <fieldset> <legend>HTML Heading</legend> <input type="text" id="textSelect" placeholder="Type Heading Here..."> <div id="radioBut"> <label>H1</label><input class="radio" type="radio" name="heading" value="h1" checked > <label>H2</label><input class="radio" type="radio" name="heading" value="h2"> <label>H3</label><input class="radio" type="radio" name="heading" value="h3"> <label>H4</label><input class="radio" type="radio" name="heading" value="h4"> <label>H5</label><input class="radio" type="radio" name="heading" value="h5"> <label>H6</label><input class="radio" type="radio" name="heading" value="h6"> </div> <div>Heading Preview: <span id="headingPreview">Output will show up here</span></div> <input type="button" onclick="changeHeading()" value="Preview"> </fieldset></form> <script> var textSelect = document.getElementById("textSelect"); var headingPreview = document.getElementById("headingPreview"); function changeHeading() {    if(textSelect.value === '')       headingPreview.innerHTML = 'Write a Heading';    else{       for(var i=0; i<6; i++){          var radInp = document.getElementsByClassName('radio')[i];          if(radInp.checked === true && textSelect.value !== ''){             headingPreview.innerHTML = '<'+radInp.value+'>'+textSelect.value+'</'+radInp.value+'>';             headingPreview.innerHTML += '<'+radInp.value+'>'+textSelect.value+'</'+radInp.value+'>';          }       }    } } </script></body></html>

ผลลัพธ์

จะได้ผลลัพธ์ดังนี้:

หลังจากคลิกปุ่ม 'Preview' โดยช่องข้อความว่างเปล่า:

โมเดลการจัดรูปแบบภาพ (Visual Formatting Model) ใน CSS

หลังจากคลิกปุ่ม 'Preview' โดยช่องข้อความไม่ว่างและปุ่ม radio 'h2' ถูกเลือก:

โมเดลการจัดรูปแบบภาพ (Visual Formatting Model) ใน CSS

ตัวอย่าง

ลองดูตัวอย่างการสร้างกล่องระดับอินไลน์:

<!DOCTYPE html> <html> <head> <title>em element</title> <style> form {    width:70%;    margin: 0 auto;    text-align: center; } * {    padding: 2px;    margin:5px; } input[type="button"] {    border-radius: 10px; } em{    background-color: #FF8A00; } </style> </head> <body> <form> <fieldset> <legend>em-element</legend> <label for="textSelect">Formatter: </label> <input id="textSelect" type="text" placeholder="John Doe"> <input type="button" onclick="convertItalic()" value="Check"> <div id="divDisplay"></div> </fieldset> </form> <script> var divDisplay = document.getElementById("divDisplay"); var textSelect = document.getElementById("textSelect"); function convertItalic() {    for(i=0; i<2; i++){       var italicObject = document.createElement("EM");       var italicText = document.createTextNode(textSelect.value);       italicObject.appendChild(italicText);       divDisplay.appendChild(italicObject);    } } </script> </body> </html>

ผลลัพธ์

จะได้ผลลัพธ์ดังนี้:

ก่อนคลิกปุ่ม 'Check':

โมเดลการจัดรูปแบบภาพ (Visual Formatting Model) ใน CSS

หลังคลิกปุ่ม 'Check':

โมเดลการจัดรูปแบบภาพ (Visual Formatting Model) ใน CSS