0

0

如何在网页中正确打印居中对齐的菱形图案(含空格分隔)

聖光之護

聖光之護

发布时间:2026-01-05 23:45:17

|

486人浏览过

|

来源于php中文网

原创

如何在网页中正确打印居中对齐的菱形图案(含空格分隔)

本文详解 javascript 中使用 `document.write` 打印菱形图案时出现错位的根本原因,并提供基于等宽字体与 html 空格处理规范的完整解决方案。

在 Web 环境中用 JavaScript 打印菱形图案(如 * 构成的钻石形),看似是简单的循环逻辑问题,实则涉及 HTML 渲染机制字体排版特性 的双重影响。你遇到的“菱形歪斜”现象,根本原因并非代码逻辑错误,而是:

  • 普通空格(" ")在 HTML 中会被浏览器自动合并压缩(多个连续空格仅渲染为一个),导致缩进失效;
  • ❌ *非等宽字体(如默认的 sans-serif)中,空格字符宽度 ≠ `` 字符宽度**,即使空格未被压缩,视觉上仍无法对齐。

正确解法:双管齐下

1. 使用  (不换行空格)替代普通空格

  是 HTML 实体,表示不可折叠的空白字符,能确保每个“空格”都被独立渲染。注意:必须写为  (带分号),否则部分浏览器可能解析失败。

2. 强制启用等宽字体(Monospace)

在 CSS 中设置容器(如

或包裹
)使用等宽字体,确保   和 * 占据完全相同的水平空间:
body {
  font-family: 'Courier New', Consolas, monospace;
}

3. 修正逻辑:统一使用   控制间距与星号间隔

原代码中 document.write(" ", "*") 混用了普通空格和星号,既易被压缩又不对齐。应全部替换为  ,并注意:每颗星前需一个  ,但首颗星前的空格由外层缩进循环控制,避免冗余。

以下是修复后的完整、可运行代码:

UXbot
UXbot

AI产品设计工具

下载
function printDiamond(input) {
  if (typeof input === 'number' && input >= 1 && input <= 100) {
    // 上半部分(含顶点)
    for (let i = 1; i <= input; i++) {
      // 左侧缩进空格(共 input - i 个  )
      for (let b = 1; b <= input - i; b++) {
        document.write(' ');
      }
      // 星号行:i 颗星,每颗前加  (注意:第一颗星前已有缩进,此处从第二颗起补间隔)
      // 更清晰做法:先写一颗星,再循环写 " *" 共 i-1 次
      document.write('*');
      for (let a = 2; a <= i; a++) {
        document.write(' *');
      }
      document.write('
'); } // 下半部分(不含顶点) for (let i = input - 1; i >= 1; i--) { for (let b = 1; b <= input - i; b++) { document.write(' '); } document.write('*'); for (let a = 2; a <= i; a++) { document.write(' *'); } document.write('
'); } } else { console.error('Input must be a number between 1 and 100.'); } } // 调用示例 printDiamond(5);
? 关键细节说明: 每行星号之间用  * 连接,而非 " *",杜绝普通空格风险; 首颗星直接 document.write('*'),避免左侧多出一个无意义的  ; document.write('') 必须显式换行,HTML 不会自动识别 \n; 建议添加输入校验(如 input >= 1),增强鲁棒性。

替代方案(更现代、推荐)

虽然 document.write 可快速验证逻辑,但已不推荐用于生产环境(会阻塞解析、无法在 DOM 加载后调用)。更优实践是:

function printDiamondToElement(input, containerId = 'diamond-output') {
  const container = document.getElementById(containerId);
  if (!container) return;

  let html = '';
  const maxStars = input;

  // 构建上半部
  for (let i = 1; i <= maxStars; i++) {
    const spaces = ' '.repeat(maxStars - i);
    const stars = '*'.padStart(i, ' *'); // 简洁生成 "*,  *, ..."
    html += `
${spaces}${stars}
`; } // 构建下半部 for (let i = maxStars - 1; i >= 1; i--) { const spaces = ' '.repeat(maxStars - i); const stars = '*'.padStart(i, ' *'); html += `
${spaces}${stars}
`; } container.innerHTML = html; }

配合 CSS:

#diamond-output {
  font-family: monospace;
  line-height: 1;
}

✅ 总结:菱形对齐 =  (语义化空格) + monospace(视觉等宽) + pre/
(保留格式)。掌握这三点,即可稳定输出工整钻石图案。

相关文章

全能打印神器
全能打印神器

全能打印神器是一款非常好用的打印软件,可以在电脑、手机、平板电脑等设备上使用。支持无线打印和云打印,操作非常简单,使用起来也非常方便,有需要的小伙伴快来保存下载体验吧!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
js获取数组长度的方法
js获取数组长度的方法

在js中,可以利用array对象的length属性来获取数组长度,该属性可设置或返回数组中元素的数目,只需要使用“array.length”语句即可返回表示数组对象的元素个数的数值,也就是长度值。php中文网还提供JavaScript数组的相关下载、相关课程等内容,供大家免费下载使用。

547

2023.06.20

js刷新当前页面
js刷新当前页面

js刷新当前页面的方法:1、reload方法,该方法强迫浏览器刷新当前页面,语法为“location.reload([bForceGet]) ”;2、replace方法,该方法通过指定URL替换当前缓存在历史里(客户端)的项目,因此当使用replace方法之后,不能通过“前进”和“后退”来访问已经被替换的URL,语法为“location.replace(URL) ”。php中文网为大家带来了js刷新当前页面的相关知识、以及相关文章等内容

373

2023.07.04

js四舍五入
js四舍五入

js四舍五入的方法:1、tofixed方法,可把 Number 四舍五入为指定小数位数的数字;2、round() 方法,可把一个数字舍入为最接近的整数。php中文网为大家带来了js四舍五入的相关知识、以及相关文章等内容

729

2023.07.04

js删除节点的方法
js删除节点的方法

js删除节点的方法有:1、removeChild()方法,用于从父节点中移除指定的子节点,它需要两个参数,第一个参数是要删除的子节点,第二个参数是父节点;2、parentNode.removeChild()方法,可以直接通过父节点调用来删除子节点;3、remove()方法,可以直接删除节点,而无需指定父节点;4、innerHTML属性,用于删除节点的内容。

471

2023.09.01

JavaScript转义字符
JavaScript转义字符

JavaScript中的转义字符是反斜杠和引号,可以在字符串中表示特殊字符或改变字符的含义。本专题为大家提供转义字符相关的文章、下载、课程内容,供大家免费下载体验。

394

2023.09.04

js生成随机数的方法
js生成随机数的方法

js生成随机数的方法有:1、使用random函数生成0-1之间的随机数;2、使用random函数和特定范围来生成随机整数;3、使用random函数和round函数生成0-99之间的随机整数;4、使用random函数和其他函数生成更复杂的随机数;5、使用random函数和其他函数生成范围内的随机小数;6、使用random函数和其他函数生成范围内的随机整数或小数。

990

2023.09.04

如何启用JavaScript
如何启用JavaScript

JavaScript启用方法有内联脚本、内部脚本、外部脚本和异步加载。详细介绍:1、内联脚本是将JavaScript代码直接嵌入到HTML标签中;2、内部脚本是将JavaScript代码放置在HTML文件的`<script>`标签中;3、外部脚本是将JavaScript代码放置在一个独立的文件;4、外部脚本是将JavaScript代码放置在一个独立的文件。

655

2023.09.12

Js中Symbol类详解
Js中Symbol类详解

javascript中的Symbol数据类型是一种基本数据类型,用于表示独一无二的值。Symbol的特点:1、独一无二,每个Symbol值都是唯一的,不会与其他任何值相等;2、不可变性,Symbol值一旦创建,就不能修改或者重新赋值;3、隐藏性,Symbol值不会被隐式转换为其他类型;4、无法枚举,Symbol值作为对象的属性名时,默认是不可枚举的。

548

2023.09.20

免费看漫画app合集_2026免费漫画app排行榜入口
免费看漫画app合集_2026免费漫画app排行榜入口

2026年免费漫画APP合集来啦!为你精心整理最新免费漫画APP排行榜入口,涵盖漫蛙漫画、香香漫画、包子漫画等热门神器,海量正版国漫、日漫、韩漫资源全免费阅读,无需付费解锁章节!高清全彩画质、每日极速更新,支持离线下载、智能推荐、条漫阅读模式,热血、恋爱、悬疑、古风、搞笑等题材应有尽有。无论你是追新番老粉还是小白漫迷,这里都能让你一站式追漫到爽,告别广告干扰和会员套路!赶紧点击入口下载体验,开启2026无限免费漫画之旅吧!

13

2026.01.07

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Sass 教程
Sass 教程

共14课时 | 0.7万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 2.8万人学习

CSS教程
CSS教程

共754课时 | 18万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号