理解 CSS 可视化格式化


CSS 中的可视化格式化基于盒模型。CSS 可视化格式化是一个与算法相对应的模型,该算法处理并转换文档的每个元素以生成一个或多个符合 CSS 盒模型的框。

生成的框的布局取决于几个属性,例如:

  • 尺寸

  • 类型 - 原子内联级、块级、内联或内联块级

  • 定位 - 绝对、浮动或普通

  • 与文档的子元素和相邻元素的关系

  • 外部信息 - 视口和图像的宽度-高度等。

CSS 处理元素的盒生成 -

  • 块级

    这些元素在其自身的上方和下方强制换行,并占用可用整个宽度,即使其内容不需要它。

    例如:分隔符 (<div>)、标题 (<h1> 到 <h6>) 等。

  • 内联级

    这些元素在其自身的上方和下方不强制换行,并且仅占用内容所需的宽度。

    例如 - 跨度 (<span>)、强元素 (<strong>)

块级盒生成

这些元素在其自身的上方和下方强制换行,并占用可用整个宽度,即使其内容不需要它。让我们看一个例子 -

示例

在这个例子中,我们将围绕块级元素,如 <form>、<fieldset>、<div> 等进行操作 -

<!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>

示例

在这个例子中,我们将围绕块级元素 <form>、<div> 等进行操作 -

<!DOCTYPE html>
<html>
<head>
   <title>CSS Block-level Elements and Block Boxes</title>
   <style>
      form {
         width:70%;
         margin: 0 auto;
         text-align: center;
      }
      * {
         padding: 2px;
         box-sizing: border-box;
         /*margin:5px;*/
      }
      input[type="button"] {
         border-radius: 10px;
      }
      .child{
         height: 40px;
         width: 100%;
         color: white;
         border: 4px solid black;
      }
      .child:nth-of-type(1){
         background-color: #FF8A00;
      }
      .child:nth-of-type(2){
         background-color: #F44336;
      }
      .child:nth-of-type(3){
         background-color: #C303C3;
      }
   </style>
</head>
<body>
   <form>
      <fieldset>
         <legend>CSS Block-level Elements and Block Boxes</legend>
         <div id="container">Color Orange
            <div class="child"></div>Color Red
            <div class="child"></div>Color Violet
            <div class="child"></div>
         </div><br>
      </fieldset>
   </form>
</body>
</html>

内联级盒生成

这些元素在其自身的上方和下方不强制换行,并且仅占用内容所需的宽度。让我们看一个内联级盒生成的例子 -

示例

在这个例子中,我们将围绕内联级元素 <em> 进行操作 -

<!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>

示例

在这个例子中,我们将围绕内联级元素 <span> 进行操作 -

<!DOCTYPE html>
<html>
<head>
   <title>CSS Inline-level Elements and Inline Boxes</title>
   <style>
      form {
         width:70%;
         margin: 0 auto;
         text-align: center;
      }
      * {
         padding: 2px;
      }
      input[type="button"] {
         border-radius: 10px;
      }
      .child{
         color: white;
         border: 4px solid black;
      }
      .child:nth-of-type(1){
         background-color: #FF8A00;
      }
      .child:nth-of-type(2){
         background-color: #F44336;
      }
      .child:nth-of-type(3){
         background-color: #C303C3;
      }
   </style>
</head>
<body>
   <form>
      <fieldset>
         <legend>CSS Inline-level Elements and Inline Boxes</legend>
         <div><span class="child">Orange</span> Color<span class="child">Red</span> Color<span class="child">Violet</span> Color</div><br>
      </fieldset>
   </form>
</body>
</html>

更新于: 2023-12-27

173 次查看

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告