0 2分钟 2 月

信息栏是介绍人物的重要部分,虽然我们实际上是通过自己设计的插件管理信息栏,但是我们也会专门说明在在只使用HTML和CSS的情况下这里的信息栏怎么使用和制作。

为什么制作信息栏

信息栏最重要的是通过列表的形式直观展示一个人的信息,对于文章来说,人物介绍中有着相当多零碎且繁琐的内容,信息栏是处理这些内容的最优解。

除此之外,信息栏的正确使用也可以避免这些繁琐内容污染文章本身的内容,在文章本身絮絮叨叨讲述角色的爱好、基本信息甚至外貌会影响观感。

如果你要制作的是网络百科和角色展示这样的网站或页面,信息栏是非常重要的部分

信息栏的制作

通过上文我们也知道了,信息栏的本质其实是有一定复杂度的表格,如果没有代码基础,我们更建议用自定义HTML而非编辑表格,有代码基础的可以通过自己建立一个插件解决,例如重现Fandom里的信息栏编辑页面。

也是因此,信息栏的基础是“表格”以及表格内容的填充,所以第一步就是你要知道你需要介绍什么,这样的思路无论是介绍人物,还是事件、理论、地区、物件等等都一样适用,但是我们建议以基本信息为基础来制作信息栏,例如姓名、种族、生卒年、基础的外貌、爱好、基本的社会关系等等,而具体的经历、性格等等这些可以展开的更适合放入文章的主题内容,可以参考现实中的各个网络百科的介绍栏,如果你想要写动漫的角色介绍,那么萌娘百科和一些自建的维基网站就是不错的选择。

当你想好这些内容之后,我们就可以制作信息栏了。

以下为我们直接使用的信息栏的HTML和JS:

<!-- 角色信息栏 - HTML结构 (含折叠功能) -->
<div class="character-info-box">
    <!-- 图片区域 -->
    <div class="character-image-container">
        <!--
            如果有图片,使用下面这行并替换 src 和 alt
            <img src="你的图片URL" alt="角色中文名" class="character-image">
        -->
        <div class="default-image-text">
            待补充图像<br>
            (需要图像文件)
        </div>
    </div>

    <!-- 信息表格 -->
    <table class="info-table">
        <thead>
            <tr>
                <!-- 表头格式: 中文名 (英文名) -->
                <th colspan="2">角色中文名 (Character English Name)</th>
            </tr>
        </thead>
        <tbody>
            <!-- 基本信息 - 折叠部分 -->
            <tr class="section-header" onclick="toggleSection('basic-info')">
                <td class="label-cell section-label" colspan="2">基本信息 <span class="toggle-icon">+</span></td>
            </tr>
            <tbody id="basic-info" class="section-content">
                <tr>
                    <td class="label-cell">中文名</td>
                    <td class="content-cell">-</td>
                </tr>
                <tr>
                    <td class="label-cell">日文名</td>
                    <td class="content-cell">-</td>
                </tr>
                <tr>
                    <td class="label-cell">英文名</td>
                    <td class="content-cell">-</td>
                </tr>
                <tr>
                    <td class="label-cell">真性</td>
                    <td class="content-cell">-</td>
                </tr>
                <tr>
                    <td class="label-cell">生日</td>
                    <td class="content-cell">-</td>
                </tr>
                <tr>
                    <td class="label-cell">学校</td>
                    <td class="content-cell">-</td>
                </tr>
                <tr>
                    <td class="label-cell">组织</td>
                    <td class="content-cell">-</td>
                </tr>
            </tbody>

            <!-- 外貌 - 折叠部分 -->
            <tr class="section-header" onclick="toggleSection('appearance')">
                <td class="label-cell section-label" colspan="2">外貌 <span class="toggle-icon">+</span></td>
            </tr>
            <tbody id="appearance" class="section-content">
                <tr>
                    <td class="label-cell">身高</td>
                    <td class="content-cell">-</td>
                </tr>
                <tr>
                    <td class="label-cell">体重</td>
                    <td class="content-cell">-</td>
                </tr>
                <tr>
                    <td class="label-cell">三围</td>
                    <td class="content-cell">-</td>
                </tr>
                <tr>
                    <td class="label-cell">发色</td>
                    <td class="content-cell">-</td>
                </tr>
                <tr>
                    <td class="label-cell">瞳色</td>
                    <td class="content-cell">-</td>
                </tr>
                <tr>
                    <td class="label-cell">特征</td>
                    <td class="content-cell">-</td>
                </tr>
            </tbody>

            <!-- 爱好 - 折叠部分 -->
            <tr class="section-header" onclick="toggleSection('hobbies')">
                <td class="label-cell section-label" colspan="2">爱好 <span class="toggle-icon">+</span></td>
            </tr>
            <tbody id="hobbies" class="section-content">
                <tr>
                    <td class="label-cell">动物</td>
                    <td class="content-cell">-</td>
                </tr>
                <tr>
                    <td class="label-cell">颜色</td>
                    <td class="content-cell">-</td>
                </tr>
                <tr>
                    <td class="label-cell">食物</td>
                    <td class="content-cell">-</td>
                </tr>
                <tr>
                    <td class="label-cell">书籍</td>
                    <td class="content-cell">-</td>
                </tr>
                <tr>
                    <td class="label-cell">影画</td>
                    <td class="content-cell">-</td>
                </tr>
                <tr>
                    <td class="label-cell">音乐</td>
                    <td class="content-cell">-</td>
                </tr>
                <tr>
                    <td class="label-cell">地点</td>
                    <td class="content-cell">-</td>
                </tr>
                <tr>
                    <td class="label-cell">人</td>
                    <td class="content-cell">-</td>
                </tr>
                <tr>
                    <td class="label-cell">擅长</td>
                    <td class="content-cell">-</td>
                </tr>
                <tr>
                    <td class="label-cell">重要之物</td>
                    <td class="content-cell">-</td>
                </tr>
                <tr>
                    <td class="label-cell">厌恶</td>
                    <td class="content-cell">-</td>
                </tr>
            </tbody>
        </tbody>
    </table>
</div>

<!-- 折叠功能所需的 JavaScript -->
<script>
    function toggleSection(sectionId) {
        var content = document.getElementById(sectionId);
        var icon = content.previousElementSibling.querySelector('.toggle-icon');
        if (content.style.display === "none" || content.style.display === "") {
            content.style.display = "table-row-group";
            icon.textContent = "-";
        } else {
            content.style.display = "none";
            icon.textContent = "+";
        }
    }

    // 页面加载完成后,默认折叠所有部分
    document.addEventListener('DOMContentLoaded', function() {
        var sections = document.querySelectorAll('.section-content');
        sections.forEach(function(section) {
            section.style.display = "none"; // 默认隐藏
            // 更新图标
            var header = section.previousElementSibling;
            if (header) {
                var icon = header.querySelector('.toggle-icon');
                if (icon) {
                    icon.textContent = "+";
                }
            }
        });
    });
</script>

以下为我们为信息栏制作的CSS(在主题的额外CSS中):

  /* 角色信息栏容器样式 */
  .character-info-box {
    width: 300px; /* 电脑/平板上保持 300px 宽度 */
    float: right; /* 浮动到右侧 */
    margin: 10px 0 10px 15px; /* 外边距 */
    border: 2px solid #87CEEB; /* 天蓝色边框 */
    border-radius: 5px; /* 圆角 */
    background-color: #f9f9f9; /* 背景色 */
    font-family: Arial, sans-serif;
    font-size: 14px;
    box-sizing: border-box; /* 包含padding和border */
    overflow: hidden; /* 防止内容溢出 */
    /* flex-shrink: 0; float布局下不需要 */
  }

  /* 图片容器 */
  .character-image-container {
    width: 100%;
    height: 350px;
    display: flex;
    align-items: center;
    justify-content: center;
    background-color: #e0f7fa;
    border-bottom: 1px solid #87CEEB;
  }

  /* 默认图片文字 */
  .default-image-text {
    color: #7f7f7f;
    font-style: italic;
    text-align: center;
    padding: 20px;
  }

  /* 角色图片样式 */
  .character-image {
    max-width: 100%;
    max-height: 100%;
    object-fit: contain;
  }

  /* 表格样式 */
  .info-table {
    width: 100%;
    border-collapse: collapse;
    table-layout: fixed;
  }

  /* 表头样式 */
  .info-table th {
    background-color: #87CEEB;
    color: white;
    padding: 10px 5px;
    text-align: center;
    font-weight: bold;
    border: 1px solid #d0e8f9;
    font-size: 16px;
  }

  /* 表格数据单元格样式 */
  .info-table td {
    padding: 8px 10px;
    border: 1px solid #ddd;
    vertical-align: top;
    word-wrap: break-word;
  }

  /* --- 关键优化 1: 调整列宽 --- */
  /* 表格第一列为标签 (压缩宽度) */
  .label-cell {
    /* width: 30%; */ /* --- 移除原来的 30% 宽度 --- */
    width: 90px; /* --- 设置一个更紧凑的固定宽度 --- */
    font-weight: bold;
    background-color: #e1f5fe;
    font-size: 13px;
  }

  /* 表格第二列为内容 (占据剩余空间) */
  .content-cell {
    /* width: 70%; */ /* --- 移除原来的 70% 宽度 --- */
    width: calc(100% - 90px); /* --- 剩余空间给内容列 --- */
    font-size: 13px;
  }

  /* --- 关键优化 2: 响应式设计 (适配手机) --- */
  @media screen and (max-width: 768px) {
    .character-info-box {
      width: 100%; /* 手机上宽度变为 100% */
      float: none; /* 取消浮动,使其换行显示 */
      max-width: none; /* 覆盖可能的 max-width 限制 */
      margin: 10px 0; /* 调整手机上的外边距 */
    }
  }

  /* --- 折叠功能相关样式 (保持不变) --- */
  .section-header {
    cursor: pointer;
    user-select: none;
  }

  .section-label {
    background-color: #b3e5fc;
    text-align: left;
    font-weight: bold;
    padding: 8px 10px;
    position: relative;
  }

  .toggle-icon {
    position: absolute;
    right: 10px;
    transition: transform 0.2s ease;
  }

  .section-content {
    /* display 属性由 JavaScript 控制 */
  }

  .section-header:hover .section-label {
    background-color: #9fd7f9;
  }

而现在我们的信息栏是通过插件实现的,这会在相关的文章介绍里说明。

发表回复

幽灵学生记录

雨宫

1分钟 3 月