当前位置:网站首页>博客搭建十:hugo博客添加友链
博客搭建十:hugo博客添加友链
2022-07-30 02:06:00 【亲自巡山的大王】
交个朋友,为博客添加友链功能(还不完善,显示界面不美观),详情参看https://ziyue.tech/friend/有好的解决办法会继续在这里更新。
hugo博客文件架构:
注:以下操作均在你的本地博客根目录下进行(换了主题理论上依然可用)
config.toml:所有的hugo站点都有一个全局配置文件,用来配置整个站点的信息,hugo默认提供了跟多配置指令。
content:站点下所有的内容页面,也就是我们创建的md文件都在这个content目录下面。
data:data目录用来存储网站用到一些配置、数据文件。文件类型可以是yaml|toml|json等格式。
layouts:存放用来渲染content目录下面内容的模版文件,模版.html格式结尾,layouts可以同时存储在项目目录和themes//layouts目录下(不建议)。
static:用来存储图片、css、js等静态资源文件。
themes:用来存储主题,主题可以方便的帮助我们快速建立站点,也可以方便的切换网站的风格样式。
public:hugo编译后生成网站的所有文件都存储在这里面,把这个目录放到任意web服务器就可以发布网站成功。
首先,在博客根目录创建assets/css文件夹,在css文件夹下创建_page和_partial文件夹,在_page文件夹下创建_single.scss文件并填写以下内容(或者拷贝你主题文件夹下的该文件然后添加一句@import “…/_partial/_single/friend”;):
@import "../_partial/_single/toc";
@import "../_partial/_single/friend";
.single {
.single-title {
margin: 2rem 0 .5rem;
font-size: 1.6rem;
font-weight: bold;
line-height: 140%;
}
.single-subtitle {
margin: .5rem 0;
font-size: 1.2rem;
font-weight: normal;
line-height: 100%;
}
.post-meta {
font-size: .875rem;
color: $global-font-secondary-color;
span {
display: inline-block;
}
[theme=dark] & {
color: $global-font-secondary-color-dark;
}
@include link(false, true);
.author {
font-size: 1.05rem;
}
}
.featured-image {
margin: .5rem 0 1rem 0;
img {
display: block;
max-width: 100%;
height: auto;
margin: 0 auto;
overflow: hidden;
}
img.lazyloaded {
width: 100%;
}
}
.content {
> h2 {
font-size: 1.5rem;
& code {
font-size: 1.25rem;
}
}
> h3 {
font-size: 1.375rem;
& code {
font-size: 1.125rem;
}
}
> h4 {
font-size: 1.25rem;
& code {
font-size: 1rem;
}
}
> h5 {
font-size: 1.125rem;
}
> h6 {
font-size: 1rem;
}
h2,
h3,
h4,
h5,
h6 {
font-weight: bold;
margin: 1.2rem 0;
[theme=dark] & {
font-weight: bolder;
}
}
> h2,
> h3,
> h4,
> h5,
> h6 {
> .header-mark::before {
content: "|";
margin-right: .3125rem;
color: $single-link-color;
[theme=dark] & {
color: $single-link-color-dark;
}
}
}
> h2 > .header-mark::before {
content: "#";
}
p {
margin: .5rem 0;
}
b, strong {
font-weight: bold;
[theme=dark] & {
color: #ddd;
}
}
@include link(false, false);
a {
@include overflow-wrap(break-word);
[theme=dark] & b, [theme=dark] & strong {
color: $single-link-color-dark;
}
}
[theme=dark] a:hover b, [theme=dark] a:hover strong {
color: $single-link-hover-color-dark;
}
ul, ol {
margin: .5rem 0;
padding-left: 2.5rem;
}
ul {
list-style-type: disc;
}
ruby {
background: $code-background-color;
rt {
color: $global-font-secondary-color;
}
[theme=dark] & {
background: $code-background-color-dark;
rt {
color: $global-font-secondary-color-dark;
}
}
}
.table-wrapper {
overflow-x: auto;
&::-webkit-scrollbar {
background-color: $table-background-color;
[theme=dark] & {
background-color: $table-background-color-dark;
}
}
> table {
width: 100%;
max-width: 100%;
margin: .625rem 0;
border-spacing: 0;
background: $table-background-color;
border-collapse: collapse;
[theme=dark] & {
background: $table-background-color-dark;
}
thead {
background: $table-thead-color;
[theme=dark] & {
background-color: $table-thead-color-dark;
}
}
th, td {
padding: .3rem 1rem;
border: 1px solid darken($table-thead-color, 2%);
[theme=dark] & {
border-color: darken($table-thead-color-dark, 2%);
}
}
}
}
img {
max-width: 100%;
min-height: 1em;
}
figure {
margin: .5rem;
text-align: center;
.image-caption:not(:empty) {
min-width: 20%;
max-width: 80%;
display: inline-block;
padding: .5rem;
margin: 0 auto;
font-size: .875rem;
color: #969696;
}
img {
display: block;
width: 100%;
height: auto;
margin: 0 auto;
overflow: hidden;
}
}
.lazyload, .lazyloading {
@include object-fit(scale-down);
}
.lazyloaded {
@include object-fit(fill);
}
blockquote {
display: block;
border-left: .5rem solid $blockquote-color;
background-color: rgba($blockquote-color, .2);
padding: .25rem .75rem;
margin: 1rem 0;
[theme=dark] & {
border-left-color: $blockquote-color-dark;
background-color: rgba($blockquote-color-dark, .2);
}
}
.footnotes {
color: $global-font-secondary-color;
[theme=dark] & {
color: $global-font-secondary-color-dark;
}
p {
margin: .25rem 0;
}
}
@import "../_partial/_single/code";
@import "../_partial/_single/instagram";
@import "../_partial/_single/admonition";
@import "../_partial/_single/echarts";
@import "../_partial/_single/mapbox";
@import "../_partial/_single/music";
@import "../_partial/_single/bilibili";
hr {
margin: 1rem 0;
position: relative;
border-top: 1px dashed $global-border-color;
border-bottom: none;
[theme=dark] & {
border-top: 1px dashed $global-border-color-dark;
}
}
kbd {
display: inline-block;
padding: .25rem;
background-color: $global-background-color;
border: 1px solid $global-border-color;
border-bottom-color: $global-border-color;
@include border-radius(3px);
@include box-shadow(inset 0 -1px 0 $global-border-color);
font-size: .8rem;
font-family: $code-font-family;
color: $code-color;
[theme=dark] & {
background-color: $global-background-color-dark;
border: 1px solid $global-border-color-dark;
border-bottom-color: $global-border-color-dark;
@include box-shadow(inset 0 -1px 0 $global-border-color-dark);
color: $code-color-dark;
}
}
.version {
height: 1.25em;
vertical-align: text-bottom;
}
}
@import "../_partial/_single/footer";
@import "../_partial/_single/comment";
}
.typeit {
.highlight {
padding: .375rem;
font-size: .875rem;
font-family: $code-font-family;
font-weight: bold;
word-break: break-all;
white-space: pre-wrap;
}
--ti-cursor-font-family: $global-font-family;
--ti-cursor-font-size: $global-font-size;
--ti-cursor-font-weight: $global-font-weight;
--ti-cursor-line-height: $global-line-height;
--ti-cursor-color: $global-font-secondary-color;
--ti-cursor-margin-left: 0;
[theme=dark] & {
--ti-cursor-color: $global-font-secondary-color-dark;
}
}
.lg-toolbar .lg-icon::after {
color: #999;
}
然后,在D:\myblog\assets\css_partial下创建_single文件夹,并在_single文件夹下创建_friend.scss文件,填写以下内容:
#article-container {
word-wrap: break-word;
overflow-wrap: break-word
}
#article-container a {
color: #49b1f5
}
#article-container a:hover {
text-decoration: underline
}
#article-container img {
margin: 0 auto .8rem
}
.flink#article-container .friend-list-div > .friend-div a .friend-info,
.flink#article-container .friend-list-div > .friend-div a .friend-name {
overflow: hidden;
-o-text-overflow: ellipsis;
text-overflow: ellipsis;
white-space: nowrap
}
.flink#article-container .friend-list-div {
overflow: auto;
padding: 10px 10px 0;
text-align: center;
}
.flink#article-container .friend-list-div > .friend-div {
position: relative;
float: left;
overflow: hidden;
margin: 15px 7px;
width: calc(100% / 3 - 15px);
height: 90px;
border-radius: 8px;
line-height: 17px;
-webkit-transform: translateZ(0)
}
@media screen and (max-width: 1100px) {
.flink#article-container .friend-list-div > .friend-div {
width: calc(50% - 15px) !important
}
@media screen and (max-width: 600px) {
.flink#article-container .friend-list-div > .friend-div {
width: calc(100% - 15px) !important
}
}
}
.flink#article-container .friend-list-div > .friend-div:hover {
background: rgba(87, 142, 224, 0.15);
}
.flink#article-container .friend-list-div > .friend-div:hover img {
-webkit-transform: rotate(360deg);
-moz-transform: rotate(360deg);
-o-transform: rotate(360deg);
-ms-transform: rotate(360deg);
transform: rotate(360deg)
}
.flink#article-container .friend-list-div > .friend-div:before {
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
z-index: -1;
background: var(--text-bg-hover);
content: '';
-webkit-transition: -webkit-transform .3s ease-out;
-moz-transition: -moz-transform .3s ease-out;
-o-transition: -o-transform .3s ease-out;
-ms-transition: -ms-transform .3s ease-out;
transition: transform .3s ease-out;
-webkit-transform: scale(0);
-moz-transform: scale(0);
-o-transform: scale(0);
-ms-transform: scale(0);
transform: scale(0)
}
.flink#article-container .friend-list-div > .friend-div:hover:before,
.flink#article-container .friend-list-div > .friend-div:focus:before,
.flink#article-container .friend-list-div > .friend-div:active:before {
-webkit-transform: scale(1);
-moz-transform: scale(1);
-o-transform: scale(1);
-ms-transform: scale(1);
transform: scale(1)
}
.flink#article-container .friend-list-div > .friend-div a {
color: var(--font-color);
text-decoration: none
}
.flink#article-container .friend-list-div > .friend-div a img{
float: left;
margin: 15px 10px;
width: 60px;
height: 60px;
border-radius: 35px;
-webkit-transition: all .3s;
-moz-transition: all .3s;
-o-transition: all .3s;
-ms-transition: all .3s;
transition: all .3s
}
.flink#article-container .friend-list-div > .friend-div a .friend-name {
display: block;
padding: 16px 10px 0 0;
height: 40px;
font-weight: 700;
font-size: 20px
}
.flink#article-container .friend-list-div > .friend-div a .friend-info {
display: block;
padding: 1px 10px 1px 0;
height: 50px;
font-size: 13px
}
在博客根目录layouts文件夹下创建shortcodes文件夹,然后在该文件夹下创建friend.html文件并填写以下内容:
{
{ if .IsNamedParams }}
{
{- $src := .Get "logo" -}}
{
{- $small := .Get "logo_small" | default $src -}}
{
{- $large := .Get "logo_large" | default $src -}}
<div class="friend-div">
<a target="_blank" href={
{ .Get "url" | safeURL }} title={
{ .Get "name" }} >
<img class="lazyload"
src="/svg/loading.min.svg"
data-src={
{ $src | safeURL }}
alt={
{ .Get "name" }}
data-sizes="auto"
data-srcset="{
{ $small | safeURL }}, {
{ $src | safeURL }} 1.5x, {
{ $large | safeURL }} 2x" />
<span class="friend-name">{
{ .Get "name" }}</span>
<span class="friend-info">{
{ .Get "word" }}</span>
</a>
</div>
{
{ end }}
最后,在博客根目录content里创建friend文件夹并创建index.md文件,在配置文件里修改菜单增加友链按钮。
[[menu.main]]
weight = 6 # 友链这个按钮的权重,数字越大排位越靠后
identifier = "friend"
name = "友链"
url = "/friend/"
在index.md文件里添加以下内容即可,就是正常的md文件,可任意在别的区域增加你想显示的信息,这个 { {< friend name=“kai” url=“http://ziyue.tech” logo=“https://s2.loli.net/2022/07/26/T4VPEMvKFzQ3O1A.jpg” word=“A funny guy” >}}是你要添加的友链,在对应的双引号区间填写具体信息。(注:【 div class=“friend-list-div” 】下要保留一个空行,如果删去友链会显示不出来,我试出来的(滑稽),层级关系之间缩进2个空格)
<div class="flink" id="article-container">
<div class="friend-list-div" >
{
{< friend name="kai" url="http://ziyue.tech" logo="https://s2.loli.net/2022/07/26/T4VPEMvKFzQ3O1A.jpg" word="A funny guy" >}}
...
</div>
</div>
嗯,暂时这样,由hexo迁移至hugo博客功能基本完善了,这个系列应该也就完更了,后面就是好好写内容。
欢迎到我的博客来玩:https://ziyue.tech/
边栏推荐
猜你喜欢
随机推荐
绘图问题记录
LeetCode 2352. Equal Row Column Pairs
consul operation
使用SqlSessionFactory工具类抽取
LeetCode Question of the Day (874. Walking Robot Simulation)
org.apache.ibatis.binding.BindingException Invalidbound statement (not found)的解决方案和造成原因分析(超详细)
解决:npm ERR code ELIFECYCLE npm ERR errno 1(安装脚手架过程中,在npm run dev 时发生错误)
快速入门jsp
菜刀、冰蝎、蚁剑、哥斯拉的流量特征
基于燃压缩空气储能系统的零碳微能源互联网优化调度(Matlab代码实现)
SwiftUI SQLite Database Storage Tutorial Collection (2022 Edition)
JS develops 3D modeling software
fluttter学习之ButtonStyle 、MaterialStateProperty
EL 表达式
日期时间存入数据库会差一天?
【C语言刷LeetCode】2295. 替换数组中的元素(M)
[Microservice~Nacos] Configuration Center of Nacos
手把手教你实现一个流动的渐变色边框
Drawing Problem Log
【VMWARE--共享文件】









