惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

V
Vulnerabilities – Threatpost
T
The Blog of Author Tim Ferriss
S
SegmentFault 最新的问题
D
DataBreaches.Net
博客园_首页
罗磊的独立博客
B
Blog
T
Threat Research - Cisco Blogs
C
Cisco Blogs
GbyAI
GbyAI
Engineering at Meta
Engineering at Meta
WordPress大学
WordPress大学
G
GRAHAM CLULEY
H
Help Net Security
酷 壳 – CoolShell
酷 壳 – CoolShell
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
爱范儿
爱范儿
SecWiki News
SecWiki News
T
Threatpost
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Schneier on Security
Schneier on Security
T
The Exploit Database - CXSecurity.com
Google Online Security Blog
Google Online Security Blog
T
Tor Project blog
小众软件
小众软件
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Y
Y Combinator Blog
H
Hacker News: Front Page
V
V2EX
Security Latest
Security Latest
Cloudbric
Cloudbric
Simon Willison's Weblog
Simon Willison's Weblog
Attack and Defense Labs
Attack and Defense Labs
D
Darknet – Hacking Tools, Hacker News & Cyber Security
P
Proofpoint News Feed
博客园 - 三生石上(FineUI控件)
NISL@THU
NISL@THU
S
Secure Thoughts
Blog — PlanetScale
Blog — PlanetScale
博客园 - 司徒正美
V2EX - 技术
V2EX - 技术
Vercel News
Vercel News
P
Palo Alto Networks Blog
IT之家
IT之家
MyScale Blog
MyScale Blog
有赞技术团队
有赞技术团队
Application and Cybersecurity Blog
Application and Cybersecurity Blog
D
Docker
Google DeepMind News
Google DeepMind News
Webroot Blog
Webroot Blog

张鑫旭-鑫空间-鑫生活

1分钟速度了解text-align match-parent声明 « 张鑫旭-鑫空间-鑫生活 光标的形状也能设置了,就是CSS caret-shape属性 « 张鑫旭-鑫空间-鑫生活 pretext与文字四面环绕效果的实现 « 张鑫旭-鑫空间-鑫生活 JSON.rawJSON方法的作用是什么? « 张鑫旭-鑫空间-鑫生活 如何使用CSS判断鼠标从哪个方向进入元素? « 张鑫旭-鑫空间-鑫生活 借助mediabunny纯JS实现视频水印、剪裁、合成等功能 « 张鑫旭-鑫空间-鑫生活 务必谨慎使用JS WeakRef弱引用 « 张鑫旭-鑫空间-鑫生活 CSS六边形头像的实现与蜂巢布局 « 张鑫旭-鑫空间-鑫生活 CSS corner-shape与背景底纹技术 « 张鑫旭-鑫空间-鑫生活 浅学WebTransport API:下一代Web双向通信技术 « 张鑫旭-鑫空间-鑫生活 HTML dialog元素新支持了closedBy属性 « 张鑫旭-鑫空间-鑫生活 HTML interestfor属性与悬停popover交互效果 « 张鑫旭-鑫空间-鑫生活 CSS3模拟window7炫酷界面效果展示 « 张鑫旭-鑫空间-鑫生活 图片旋转+剪裁js插件(兼容各浏览器) « 张鑫旭-鑫空间-鑫生活 纯js无图片无外链CSS图片幻灯片播放插件 « 张鑫旭-鑫空间-鑫生活 CSS border三角、圆角图形生成技术简介 « 张鑫旭-鑫空间-鑫生活 CSS “渐进增强”在web制作中常见应用举例 « 张鑫旭-鑫空间-鑫生活 让IE6/IE7/IE8浏览器支持CSS3属性 « 张鑫旭-鑫空间-鑫生活 jQuery – 高亮动态显示页面HTML代码插件 « 张鑫旭-鑫空间-鑫生活 翻译 – 逐渐消失的Flash网站 « 张鑫旭-鑫空间-鑫生活 CSS reset的重新审视 – 避免样式重置 « 张鑫旭-鑫空间-鑫生活 新浪微博插入话题后部分文字选中的js实现 « 张鑫旭-鑫空间-鑫生活 JavaScript实现http地址自动检测并添加URL链接 « 张鑫旭-鑫空间-鑫生活 CSS实现兼容性的渐变背景(gradient)效果 « 张鑫旭-鑫空间-鑫生活 CSS content内容生成技术以及应用 « 张鑫旭-鑫空间-鑫生活 CSS gradient渐变之webkit核心浏览器下的使用 « 张鑫旭-鑫空间-鑫生活 CSS渐变之CSS3 gradient在Firefox3.6下的使用 « 张鑫旭-鑫空间-鑫生活 区分IE8/IE7/IE6及其他浏览器-CSS “\9″hack « 张鑫旭-鑫空间-鑫生活 CSS实现跨浏览器兼容性的盒阴影效果 « 张鑫旭-鑫空间-鑫生活 CSS3&HTML5各浏览器支持情况一览表 « 张鑫旭-鑫空间-鑫生活 翻译 – CSS Sprites:实用技术还是生厌之物? « 张鑫旭-鑫空间-鑫生活 纯CSS实现易拉罐3D滚动效果 « 张鑫旭-鑫空间-鑫生活 纯CSS实现侧边栏/分栏高度自动相等 « 张鑫旭-鑫空间-鑫生活 CSS+JavaScript实现页面不同布局的切换 « 张鑫旭-鑫空间-鑫生活 JavaScript实现最简单的拖拽效果 « 张鑫旭-鑫空间-鑫生活 自己写的无图片版jQuery zxxbox弹出框插件 « 张鑫旭-鑫空间-鑫生活 中国古代道家思想与网页重构的思考 « 张鑫旭-鑫空间-鑫生活 让所有浏览器支持HTML5 video视频标签 « 张鑫旭-鑫空间-鑫生活 纯CSS实现各类气球泡泡对话框效果 « 张鑫旭-鑫空间-鑫生活 JS HEX十六进制与RGB, HSL颜色的相互转换 « 张鑫旭-鑫空间-鑫生活 CSS实现兼容性的渐变、高光等文字效果 « 张鑫旭-鑫空间-鑫生活 去除冗余 – 精简您的CSS样式代码 « 张鑫旭-鑫空间-鑫生活 对overflow与zoom”清除浮动”的一些认识 « 张鑫旭-鑫空间-鑫生活 jQuery Pagination Ajax分页插件中文详解 « 张鑫旭-鑫空间-鑫生活 absolute绝对定位的非绝对定位用法 « 张鑫旭-鑫空间-鑫生活 网页布局思想浅议-淘宝新版首页为实例 « 张鑫旭-鑫空间-鑫生活 回流与重绘:CSS性能让JavaScript变慢? « 张鑫旭-鑫空间-鑫生活 CSS float浮动的深入研究、详解及拓展(二) « 张鑫旭-鑫空间-鑫生活 CSS float浮动的深入研究、详解及拓展(一) « 张鑫旭-鑫空间-鑫生活 60个极富创造性的震撼的电影海报设计 « 张鑫旭-鑫空间-鑫生活 jQuery Lightbox(balupton版)图片展示插件讲解 « 张鑫旭-鑫空间-鑫生活 博客内嵌flash音乐播放器代码、下载与使用 « 张鑫旭-鑫空间-鑫生活 CSS3 animate实现图片墙3D翻转效果 « 张鑫旭-鑫空间-鑫生活 图片旋转效果的一些研究、jQuery插件及实例 « 张鑫旭-鑫空间-鑫生活 CSS3 border-image详解、应用及jQuery插件 « 张鑫旭-鑫空间-鑫生活 jQuery-两款不同原理的圆角插件讲解 « 张鑫旭-鑫空间-鑫生活 页面可用性之outline轮廓外框的一些研究 « 张鑫旭-鑫空间-鑫生活 CSS3 transition实现超酷图片墙动画效果 « 张鑫旭-鑫空间-鑫生活 HTML CSS列表元素ul,ol,dl的研究与应用 « 张鑫旭-鑫空间-鑫生活 jQuery图片文本滚动切换插件jCarousel中文翻译与详解 « 张鑫旭-鑫空间-鑫生活 酷酷的jQuery鼠标悬停图片放大切换显示效果 « 张鑫旭-鑫空间-鑫生活 IE6下z-index犯癫不起作用bug的初步研究 « 张鑫旭-鑫空间-鑫生活 checkbox复选框的一些深入研究与理解 « 张鑫旭-鑫空间-鑫生活 jQuery之使用slideToggle实现垂直下拉菜单 « 张鑫旭-鑫空间-鑫生活 jQuery-innerfade内部列表自动淡入淡出插件 « 张鑫旭-鑫空间-鑫生活 jQuery-火焰灯效果导航菜单 « 张鑫旭-鑫空间-鑫生活 IE下css bug集合-翻译自haslayout.net « 张鑫旭-鑫空间-鑫生活 翻译-IE7/8@font-face嵌入字体与文字平滑 « 张鑫旭-鑫空间-鑫生活 jQuery-马化腾产品设计与用户体验的一些技术实现 « 张鑫旭-鑫空间-鑫生活 像素的世界及其在web开发制作中的应用 « 张鑫旭-鑫空间-鑫生活 css行高line-height的一些深入理解及应用 « 张鑫旭-鑫空间-鑫生活 CSS实现圆角六色渐变自适应按钮详解 « 张鑫旭-鑫空间-鑫生活 我熟知的三种三栏网页宽度自适应布局方法 « 张鑫旭-鑫空间-鑫生活 jQuery照片图像剪裁插件Jcrop中文翻译详解 « 张鑫旭-鑫空间-鑫生活 Ajax Upload多文件上传插件翻译及中文演示 « 张鑫旭-鑫空间-鑫生活 告别图片—使用字符实现兼容性的圆角尖角效果beta版 « 张鑫旭-鑫空间-鑫生活 大小不固定的图片、多行文字的水平垂直居中 « 张鑫旭-鑫空间-鑫生活 jQuery boxy弹出层对话框插件中文演示及讲解 « 张鑫旭-鑫空间-鑫生活 JavaScript实现新浪微博文字放大显示动画效果 « 张鑫旭-鑫空间-鑫生活 翻译:让网络更快一些——最小化浏览器中的回流(reflow) « 张鑫旭-鑫空间-鑫生活 jQuery之addClasas与removeClass使用实例 « 张鑫旭-鑫空间-鑫生活 关于Google圆角高光高宽自适应按钮及其拓展 « 张鑫旭-鑫空间-鑫生活 JavaScript实现图片幻灯片滚动播放动画效果 « 张鑫旭-鑫空间-鑫生活 jQuery-鼠标经过显示大图并跟随鼠标效果插件 « 张鑫旭-鑫空间-鑫生活 关于gif图片(或png8)杂边锯齿的问题 « 张鑫旭-鑫空间-鑫生活 对html与body的一些研究与理解 « 张鑫旭-鑫空间-鑫生活 鲜为人知的一个解决兼容性问题的利器——小数 « 张鑫旭-鑫空间-鑫生活 搜狐白社会似iphone短信对话框效果的优化 « 张鑫旭-鑫空间-鑫生活 关于文字内容溢出用点点点(…)省略号表示 « 张鑫旭-鑫空间-鑫生活 jquery之append与insertBefore使用实例 « 张鑫旭-鑫空间-鑫生活 jQuery之图片关联伸缩效果 « 张鑫旭-鑫空间-鑫生活 jquery之图片左右切换动画效果 « 张鑫旭-鑫空间-鑫生活 jQuery之replace字符串替换实现不同尺寸图片切换 « 张鑫旭-鑫空间-鑫生活 jQuery-实现图片的放大镜显示效果 « 张鑫旭-鑫空间-鑫生活 jQuery-单击文字或图片内容放大显示效果插件 « 张鑫旭-鑫空间-鑫生活 reflection.js-实现图片投影倒影效果js插件 « 张鑫旭-鑫空间-鑫生活 jQuery-很酷的弹出层效果js插件 « 张鑫旭-鑫空间-鑫生活 复选框单选框与文字对齐问题的研究与解决 « 张鑫旭-鑫空间-鑫生活 css margin的相关属性,问题及应用 « 张鑫旭-鑫空间-鑫生活 IE6下png背景不透明问题的综合拓展 « 张鑫旭-鑫空间-鑫生活
CSS repeat()函数详细介绍 « 张鑫旭-鑫空间-鑫生活
张鑫旭,zhangxinxu · 2019-12-07 · via 张鑫旭-鑫空间-鑫生活

by zhangxinxu from https://www.zhangxinxu.com/wordpress/?p=9116
本文欢迎分享与聚合,全文转载就不必了,尊重版权,圈子就这么大,若急用可以联系授权。

一、前言以及兼容性

前文讲了CSS minmax()函数,现在趁热打铁,介绍下CSS repeat()函数。

repeat()函数要想理解透彻,熟练掌握,要比minmax()函数时间多多了。

该如何讲才能让大家更容易理解呢?琢磨了下,可以从实例入手,一步一步。

在展开一个一个实例之前,我们先看下这个函数的兼容性。

兼容性

CSS repeat()函数兼容性如下图:

CSS repeat函数兼容性

Edge 16+支持,然后Firefox浏览器那里有个上标表示Firefox浏览器暂时只支持列属性的repeat()函数。主要你的项目不是需要兼容非常老的手机,移动端是可以放心使用的。

二、通过实例介绍CSS repeat()函数

CSS repeat()函数只能作用在grid-template-columnsgrid-template-rows这两个CSS属性上,由于目前Firefox浏览器只支持在grid-template-columns属性上使用repeat()函数,所以本文接下来所有案例都只显示列,也就是宽度的设置。

1. repeat()函数作用

先看下面代码:

.container {
    grid-template-columns: 40px auto 60px;
}

表示我们的布局分为三列,每列的宽度分别是40pxauto,以及60px

没有任何问题,再看下面代码:

.container {
    grid-template-columns: 40px auto 60px 40px auto 60px;
}

表示我们的布局分为六列,每列的宽度分别是40pxauto60px40pxauto60px

好像也没什么问题。

现在,假设我们的布局是12列的,请问,CSS代码会是怎样的?

如果按照上面写法,是不是应该写成下面这样?

.container {
    grid-template-columns: 40px auto 60px 40px auto 60px 40px auto 60px 40px auto 60px;
}

哇,就像老太太裹脚布——又臭又长。

代码量多,看得眼花,还不好理解,维护起来也不方便。

此时,repeat()的价值就体现了,什么,12列?小菜一碟。请看表演:

.container {
    grid-template-columns: repeat(4, 40px auto 60px);
}

非常好理解,重复4次,每次的重复单元是40px auto 60px这3个尺寸。

于是就有如下GIF所示的效果(点击播放,112K),是我最爱的深天蓝色哦:

12栏repeat设置效果

您可以狠狠地点击这里:CSS repeat()函数基本使用demo

2. repeat()函数可以同时多个

例如,前面3列宽度都是40px,紧跟着3列宽度是60px,剩下1列宽度auto,则可以这么设置:

.container {
    grid-template-columns: repeat(3, 40px) repeat(3, 60px) auto;
}

配上我最爱的深天空蓝,效果如下GIF截屏所示:

多个repeat函数效果示意

您可以狠狠地点击这里:多个repeat()函数同时使用demo

3. repeat()函数支持对网格线命名

如果网格线的命名也是重复有规律的,则也可以用在repeat()函数中,

例如:

.container {
    grid-template-columns: repeat(3, [col-start] 1fr [col-end]) auto;
}

其中,[col-start][col-end]只是一个自定义的命名,没有什么特殊的含义,关键是[],至于里面写的内容,其实只要大家看得懂就行,这里,直接repeat(3, [列开始] 1fr [列结束])也是一样的效果。

网格线命名主要给Grid布局中的子项使用的,具体可以参见“写给自己看的display: grid布局教程”一文。

三、其他关键字和函数

上面的案例中,repeat()函数只演示了数值类型和auto关键字的效果。

实际上,CSS repeat()函数还支持其他多个关键字和函数。

1. min-content/max-content

min-contentmax-content尺寸是根据内容来的,min-content是最小内容尺寸,中文的最小内容单位是一个汉字,英文的最小内容单位是单词,因此min-content最终宽度是所有这些最小内容单元最长的那个单元宽度;max-content是最大内容宽度,可以理解为文本内容不换行时候的宽度。详细知识可以参考这篇文章

这里,我们通过一个案例看看min-content/max-content在Grid布局中的效果,CSS代码如下:

.container {
    grid-template-columns: repeat(2, min-content auto max-content) auto;
}

如下GIF录屏图片所示:

min-content和max-content在repeat函数中效果

min-content所在列的宽度就是单词content的宽度;max-content所在列的宽度就是整个语句不换行时候的宽度。

min-contentmax-content在实际开发的时候是不会相对于字符进行尺寸设定的,而是相对于图片或者内联性质的容器元素,比方说容器宽度不确定同时一行最多显示一个容器(min-content),或者所有元素在一行显示(max-content)。

您可以狠狠地点击这里:repeat(min-content, max-content)示意demo

2. minmax()函数

minmax(min, max)函数表示当前这个格子的尺寸范围在minmax之间。

例如:

.container {
    grid-template-columns: repeat(2, minmax(min-content, max-content) 40px) auto;
}

效果如下GIF,112K,点击播放:

minmax示意效果图

第1列和第3列的宽度最小是min-content对应的宽度,最大是max-content对应的宽度。

您可以狠狠地点击这里:CSS repeat()函数中使用minmax() demo

关于minmax()函数更多知识与细节,请参考上一篇文章“CSS minmax()函数简介”。

2. fit-content()函数

fit-content()函数是干什么用的呢?

一言以蔽之,尺寸适应于内容,但不超过设定的尺寸。

底层计算公式如下,源自规范文档(MDN上显示的的是错误的):

min(minimum, max(limit, max-content))

minimum并不具体指代某一个对应的参数类型,不等于min-content也不等于auto。究竟是什么意思呢?经过我的研究,啥都不是!或者说,无论是W3C官方的公式还是MDN上的公式都是会有理解障碍的。

更新于2020-05-21
minimum指的是尺寸下限,通常由最小内容尺寸决定,如果min-width/min-height尺寸比最小内容尺寸大,则尺寸下限由min-width/min-height决定。

底层计算公式是:

max(minimum, min(limit, max-content))

———- 更新 end ——–

大家请使用下面的公式进行计算吧:

fit-content(limit) = min(min(auto, limit), min(auto, max-content))

其中:

  • max-content就是指max-content对应的尺寸,而auto就是指auto关键字对应的尺寸。
  • min()就是JS中Math.min()的意思,取小值。

只看公式会有点懵,不急,实例说话:

.container {
    grid-template-columns: repeat(2, fit-content(100px) 40px) auto;
}

效果如下,依然是我最爱的深天蓝色:

fit-content效果GIF示意

其中,第1列和第3列应用了fit-content(100px)

含义分别如下:

  • 第1列
    3个中文,min-content宽度为1em,14px;max-content宽度为3em,42px。

    初始状态下,auto关键字应该显示的宽度远大于max-content,那么auto就用666px代替吧。套用公式就是:

    fit-content(100px) = min(min(666, 100), min(666, 42)) = 42px
    // 最大max-content尺寸

    随着容器宽度变小,auto关键字对应的宽度也越来越小,可以一直小到min-content宽度,也就是14px,此时调用公式就是:

    fit-content(100px) = min(min(14, 100), min(14, 42)) = 14px
    // 小到min-content尺寸
  • 第3列
    这一列的中文字符特别的多,max-content远远大于100px,我们不妨用一个666px代替。

    初始状态下,auto关键字对应的宽度是大于100px的,不妨用233px代替,因此,此时fit-content(100px)的尺寸计算值就是限定的100px大小:

    fit-content(100px) = min(min(233, 100), min(233, 666)) = 100px
    // 限定的尺寸

    100px大小示意

    随着容器宽度变小,auto关键字对应的宽度也越来越小,可以一直小到min-content宽度,这里min-content的宽度值应该是'100px'这5个字符的宽度了,我量了一下,在我的电脑下面是38像素。

    于是公式用起来:

    fit-content(100px) = min(min(38, 100), min(38, 666)) = 38px

    得到宽度是38px

当然日常平时开发啊,我们不需要套用公式计算它最终显示的值。因为公式虽然复杂,但最终的表现形式用语言描述就非常简单。

“尺寸由内容决定,内容越多尺寸越大,但不超过限定的尺寸。”


语法

fit-content( [ <length> | <percentage> ] )

只支持长度值和百分比值。

四、如果重复的数量不确定

以上所有案例展示的都是我们知道列表数目的情况下,如果我们不知道列表数目具体是多少,这个时候我们该如何使用repeat()函数呢?

CSS中有两个关键字就是用在这种场景下的,这两个关键字分别是auto-fillauto-fit

1. auto-fill

根据Grid布局中每一个子项的尺寸自动计算需要填充的数量。

计算规则是,当前列表数量下的总尺寸不会超出Grid容器的最大正整数值。

举个例子,有如下CSS代码:

.container {
    grid-template-columns: repeat(auto-fill, minmax(100px, 1fr));
}

表示布局究竟有多少列是不确定的,但是每一列的宽度最小是100px

效果如下,默认宽度很宽的情况下,最后会有匿名的格子:

隐匿的格子示意

随着尺寸变小,列数会跟着动态变化,同时宽度自动填充Grid容器(因为设置了1fr)。

弹性变化效果示意

您可以狠狠地点击这里:CSS repeat()函数auto-fill自动填充demo

当我们使用auto-fill自动填充的时候,repeat()函数是不能和auto一起使用的,例如下面这种写法是无效的:

.container {
    /* 无效 */
    grid-template-columns: repeat(auto-fill, minmax(100px, 1fr)) auto;
}

但是可以和长度只和百分比值一起使用,例如:

.container {
    /* 有效 */
    grid-template-columns: repeat(auto-fill, minmax(100px, 1fr)) 20%;
}

这样,每一行最后一列的宽度都会是容器的20%大小,截图示意:

最后一列20%

2. auto-fit

auto-fitauto-fill的行为是相似的,区别在于auto-fit会把空的匿名格子进行折叠合并,而这个合并的0px大小格子可以认为具有单个格子轨道大小调整的功能,对了,其两侧的格子过道也会合并。

什么意思呢?

auto-fill自动填充的时候,如果Grid容器的尺寸特别的宽,则最后会有一些空的格子占位:

隐匿的格子示意

但是auto-fit自动适应的时候,如果Grid容器的尺寸特别的宽,则最后会有一些空的格子会合并成1个,且宽度是0:

auto-fit区别示意

也就是auto-fit场景下,无论Grid容器多宽,子项元素一定是尺寸一定是填满的;当Grid容器尺寸没有富余的时候,两者表现又是一样的。

眼见为实,效果对比,代码如下:

.container {
    grid-template-columns: repeat(auto-fit, minmax(100px, 1fr));
}

效果如下:

弹性变化效果示意

您可以狠狠地点击这里:CSS repeat()函数auto-fit自动适应demo (大屏下才能看出和auto-fill差异)

实际开发的时候,按照我个人经验,建议使用auto-fit

五、后言及实用性

这篇文章的细节要比我一开始写的时候以为的要多很多,以至于周末两天就写了这一篇文章,小说来不及更新了。

Grid布局适合方方正正纵横交错的布局,在IE10浏览器支持的那一版语法中,Grid布局的优势其实并不是很明显,其实现的东西基本上都有类似的替代方案,所以,当时我表示内心很平静,没有任何波动。

什么时候开始觉得Grid布局还挺屌的呢?

就是浏览器开始纷纷支持repeat()minmax()fit-content()等函数和auto-fillauto-fit等关键字之后,其实现的弹性布局效果是以往没有任何CSS属性能够实现的,让Grid布局的等级提升了。

然后自己也意识到一个问题,Grid布局提升并不是我一开始以为的repeat()函数,更多的是repeat()函数里面支持的那些关键字和函数,以及整个全新的CSS体系。

如果大家的项目对兼容性的要求还没有那么严格,不妨试试使用Grid布局的新语法新特性。

特别是那些纵横交错的布局(见下面适合使用Grid布局的示意):

Grid布局和Flex布局各自代表案例

行文不易,做demo也不易,GIF录屏方便大家学习理解更不易。

如果您觉得本文内容不错,欢迎微信群或朋友圈转发,就是对这些“不易”最大的支持。

本文为原创文章,欢迎分享,勿全文转载,如果实在喜欢,可收藏,永不过期,且会及时更新知识点及修正错误,阅读体验也更好。
本文地址:https://www.zhangxinxu.com/wordpress/?p=9116

(本篇完)