CSS 的filter属性就是你的 “魔法棒”,只需几行代码,就能为网页元素赋予各种惊艳的视觉效果,轻松提升页面质感。

认识filter属性

filter属性是 CSS 中用于对元素应用图形效果(如模糊、阴影、颜色调整等)的属性。它就像一个 “视觉特效师”,能让普通的图片、文字、按钮瞬间变得与众不同。filter属性的值是一个或多个滤镜函数的组合,每个滤镜函数都对应一种特定的效果。filter属性的基本语法如下:

.element {
  filter: filter-function();
}

例如,我们要为一个图片添加模糊效果,可以这样写:

img {
  filter: blur(3px);
}

这里的blur()就是一个滤镜函数,3px表示模糊的程度,数值越大,模糊效果越明显。

常用滤镜函数

2.1 模糊效果:blur()blur()函数用于给元素添加模糊效果,常被用于背景图片的虚化处理,营造出朦胧的美感,或是在鼠标悬停时,为元素添加动态的模糊过渡效果。

img {
  filter: blur(3px);
  transition: filter .5s ease-in-out;
}

img:hover {
  filter: blur(1px);
}

这个例子则展示了通过过渡动画,让图片在鼠标悬停时平滑地产生模糊变化,增加交互趣味性。
2.2 阴影效果:drop-shadow()
drop-shadow()函数可以为元素添加阴影,与box-shadow属性类似,但drop-shadow()更专注于模拟投影效果,且能更好地与滤镜链中的其他效果结合使用。

/* 为卡片添加投影 */
.card {
  filter: drop-shadow(0 4px 8px rgba(0, 0, 0, 0.8));
}

上述代码中,0表示水平偏移量,4px表示垂直偏移量,8px是模糊半径,rgba(0, 0, 0, 0.8)则定义了阴影的颜色和透明度。通过调整这些参数,就能轻松打造出不同风格的阴影效果。
2.3 亮度调整:brightness()brightness()函数用于调整元素的亮度,可以让图片或元素变得更亮或更暗,数值范围是0%(全黑)到200%(两倍亮度),默认值为100%。

/* 降低图片亮度 */
.dim-image {
  filter: brightness(70%);
}

/* 鼠标悬停时,图片变亮 */
.highlight-image {
  transition: filter 0.3s ease;
}

.highlight-image:hover {
  filter: brightness(120%);
}

利用brightness()函数,我们可以实现图片在不同状态下的亮度变化,例如在图片列表中,让鼠标悬停的图片变亮,突出显示重点内容。
2.4 对比度调整:contrast()contrast()函数用于调整元素的对比度,数值范围同样是0%(完全没有对比度)到200%(两倍对比度),默认值为100%。提高对比度可以让元素的颜色更加鲜明,降低对比度则能营造出柔和的视觉效果。

/* 增加文字对比度 */
.strong-contrast-text {
  filter: contrast(400%);
}

/* 降低图片对比度 */
.soft-image {
  filter: contrast(50%);
}

2.5 色彩反转:invert()
invert()函数可以反转元素的颜色,将黑色变为白色,白色变为黑色,其他颜色也会相应地进行反转。它常用于创造有趣的视觉反差,或是制作具有科幻感、未来感的页面效果。

img {
  transition: filter 0.3s ease;
}

img:hover {
  filter: invert(100%);
}

兼容性与注意事项

虽然filter属性在现代浏览器中得到了广泛支持,但在一些老旧浏览器(如 IE 系列)中可能存在兼容性问题。为了确保网页在各种浏览器中都能正常显示,可以使用 CSS 特性查询(@supports)来提供回退方案:

.element {
  /* 不支持filter时的样式 */
  background-color: #ccc;
}

@supports (filter: blur(0)) {
  .element {
    /* 支持filter时的样式 */
    filter: blur(3px);
    background-color: transparent;
  }
}

转自:前端老鹰


非常的简单,只需要两步就可以轻松实现。css样式什么的需要自行进行解决。 第一步把下面的函数代码添加到相关文件中,例如:function.php


    //内置友链,参数为内容,字符串形式。
    function xm_yl($content){
    
        if (strpos($content, '{link') !== false) {
    
    $content = preg_replace_callback('/{link title="(.+?)"}(.+?){\/link}/', function ($match){
       $nr = str_replace(['<br>', '<p>', '</p>'], '', $match[2]);
        $content = '<div class="link_body"><div class="link_title">'.$match[1].'</div>'.$nr.'</div>';
        return $content;
    }, $content);   
        }
    
    
        if (strpos($content, '{linka') !== false) {
            
            $content = preg_replace('/{linka url="(.+?)"}(.+?){\/linka img="(.+?)"}/','<a href="\\1" target="_blank"><div class="link_body_list"><div class="link_body_img"><img class="lazyload" data-src="\\3" src="//520917.xyz/app/app/view/xmuix/public/img/jz.jpg"></div><div class="link_body_name">\\2</div></div></a>', $content);
        }
    
    
        return $content;
    }

第二步在相关要实现友链的文件中添加以下代码。

<!--?php echo xm_yl($this--->content);?>

第三步在内容中添加友链ubb代码即可

    {link title="分类标题"}
    {linka url="url地址"}名称{/linka img="图片"}
    {/link}

转自:寻梦博客


在互联网中,我们常常需要快速获取各类图片资源。今天,就为大家带来一个超实用的教程,教你轻松搭建属于自己的随机图片获取API,从此告别四处寻觅图片API的繁琐。

方法一、外链读取txt

1.新建文件api.php

    <?php
    // 使用__DIR__常量获取当前脚本所在目录,并拼接文件路径
    $filename = __DIR__. '/img.txt';
    if (!file_exists($filename)) {
        die('文件不存在');
    }
    // 打开文件并检查是否成功
    $fs = fopen($filename, "r");
    if (!$fs) {
        die('无法打开文件');
    }
    // 从文本获取链接
    $pics = [];
    while (!feof($fs)) {
        $line = trim(fgets($fs));
        if ($line!== '') {
            array_push($pics, $line);
        }
    }
    fclose($fs);
    // 从数组随机获取链接
    $pic = $pics[array_rand($pics)];
    // 获取type参数
    $type = isset($_GET['type'])? $_GET['type'] : '';
    switch ($type) {
        // JSON返回
        case 'json':
            header('Content - type:text/json');
            die(json_encode(['pic' => $pic]));
        default:
            // 验证链接是否合法
            if (!filter_var($pic, FILTER_VALIDATE_URL)) {
                die('无效的图片链接');
            }
            die(header("Location: $pic"));
    }

2.新建文件img.txt

    http://example.com/image1.jpg
    http://example.com/image2.jpg
    http://example.com/image3.jpg

访问你的网址/api.php访问就可以实现了,api.php和 img.txt 理想存放目录是在同一目录下。
如果将img.txt放于特定目录。此时,需在api.php中修改$filename变量指定完整路径,如:
$filename = '/var/www/wwwroot/data/img.txt';

方法二、读取本地目录模式

    <?php
    $img_array = glob("images/*.{gif,jpg,png}", GLOB_BRACE);
    if (!empty($img_array)) {
        $img = array_rand($img_array);
        $dz = $img_array[$img];
        header("Location: " . $dz);
        exit; // 重定向后终止脚本执行
    } else {
        echo "没有找到符合条件的图片文件。";
    }
    ?>

图片丢到images文件夹下,访问api.php即可

来源:白衣博客


添加

在 index.php 的 $this->title(); 前面加上 $this->sticky();例如下面这段代码

    <h2 class="title"><a href="<?php $this->permalink() ?>"><?php $this->sticky(); $this->title() ?></a></h2>
    //其实就是这个
    <?php $this->sticky(); $this->title() ?>

创建后台设置选项:

在主题的 functions.php 文件中添加代码,创建一个新的后台设置选项来存储置顶文章的 cid

    // 在主题的 functions.php 文件中
    $stickyCids = new Typecho_Widget_Helper_Form_Element_Text('stickyCids', NULL, NULL, _t('置顶文章CID'), _t('在这里填入置顶文章CID,支持多填,用英文逗号隔开'));
    $form->addInput($stickyCids);
    $stickyCids->setAttribute('class', 'j-setting-content j-setting-global');

前台index.php添加

    <?php
    $stickyCids = $this->options->stickyCids;
    if ($stickyCids) {
        // 用英文逗号分割
        $sticky_cids = explode(',', $stickyCids);
        // 去除每个元素的空格并过滤掉空元素
        $sticky_cids = array_filter(array_map('trim', $sticky_cids), 'trim');
        $sticky_html = "<span style='color:red'>[置顶] </span>";
        $db = Typecho_Db::get();
        $pageSize = $this->options->pageSize;
        $select1 = $this->select()->where('type =?', 'post');
        $select2 = $this->select()->where('type =? && status =? && created <?', 'post', 'publish', time());
        $this->row = [];
        $this->stack = [];
        $this->length = 0;
        $order = '';
        $stickyCidMap = [];
        $whereClauses = [];
        $whereParams = [];
        foreach ($sticky_cids as $i => $cid) {
            $whereClauses[] = 'cid =?';
            $whereParams[] = $cid;
            $order.= " when ". $cid. " then ". $i;
            $select2->where('table.contents.cid!=?', $cid);
            $stickyCidMap[$cid] = $i;
        }
        if (!empty($whereClauses)) {
            $select1->where(implode(' OR ', $whereClauses),...$whereParams);
        }
        if (empty(trim($order))) {
            $orderBy = 'table.contents.created';
            $sort = Typecho_Db::SORT_DESC;
        } else {
            $orderBy = null;
            $sort = "(case cid$order end)";
        }
        if ($orderBy!== null) {
            $select1->order($orderBy, $sort);
        }
        if ($this->_currentPage == 1) {
            $stickyPosts = $db->fetchAll($select1);
            // 对获取到的置顶文章按照设置的顺序排序
            usort($stickyPosts, function ($a, $b) use ($stickyCidMap) {
                return $stickyCidMap[$a['cid']] - $stickyCidMap[$b['cid']];
            });
            foreach ($stickyPosts as $sticky_post) {
                $sticky_post['sticky'] = $sticky_html;
                $this->push($sticky_post);
            }
        }
        $uid = $this->user->uid;
        if ($uid) {
            $select2->orWhere('authorId =? && status =?', $uid, 'private');
        }
        $sticky_posts = $db->fetchAll($select2->order('table.contents.created', Typecho_Db::SORT_DESC)->page($this->_currentPage, $this->parameter->pageSize));
        foreach ($sticky_posts as $sticky_post) {
            $this->push($sticky_post);
        }
        $this->setTotal($this->getTotal() - count($sticky_cids));
    }
    ?>

来源:https://deepsea.xin/archives/77.html


起因

前不久在大佬论坛,坛友手上,购买了域名1314.xyz。
本人喜欢520/920/1314/3344/这一类很俗气的“爱情数字”米。
就花了点小钱购买了1314.xyz,准备收藏和用来!使用邮件功能。
以此达到让人眼前一亮的邮件:
520@1314.xyz、等等,简短又顺的。

绑定

但是,在我去绑定时,告知“域名已存在”,意思就是被人绑定了,问了一下域名前任,他没说没有绑,只用了QQ邮箱收费版绑过,但已注销。

反馈

没办法,我只通继续去网易反馈,前前后后反馈了6次才解决。
(期间发送了域名证书,个人身份证照正反面)
每个企业都有自己的营销方式,因为我用的是免费版的,他们显示“已存在”,过1天左右,收费版的业务员打电话给我推销收费版的功能。

解决方法

结果,我直接开喷,并明确告知他们“免费版的问题都处理不好,谁会考虑收费版的”,“最基础的都解决不了,收费的又能怎样,是不是反馈结果都会石沉大海”等等之类,说他们处理业务的能力不行。
只过去1天时间,主动来邮件了,告知我30分钟后绑定试试!!
有些时候,好好说话解决不了问题。
大家处理业务时,有那些“开喷”后,就处理好的事情呢?

后来,还是去看了他们说的收费版价格:大概原价9600,约现价4500/年。

👼


Typecho-Options
TTDF后台设置框架独立版
支持文章字段,如果不需要直接删除fields.php即可

下载

GitHub: https://github.com/ShuShuicu/Typecho-Options

快速上手

在主题functions.php引入options.php即可快速调用设置选择框架进行开发
functions.php:

<?php
if (!defined('__TYPECHO_ROOT_DIR__')) exit;
// 引入设置框架
require_once 'options.php';

开发示例

主题后台设置项
字段类型 描述
Text 文本框
Textarea 文本域
Radio 单选框
Select 下拉框
Checkbox 多选框
Html 自定义 HTML 标签

setup.php

$options = [
    '基础设置' => [
        'title' => '基础设置',
        'fields' => [
            [
                // 'Html' => '自定义HTML标签',
                'type' => 'Html',
                'content' => '<h3>感谢使用 TTDF 进行开发</h3>'
            ],
            [
                // 'Text' => '文本框',
                'type' => 'Text',
                'name' => 'SubTitle',
                'value' => null,
                'label' => '副标题',
                'description' => '这是一个文本框,用于设置网站副标题,如果为空则不显示。'
            ],
            [
                // 'Textarea' => '文本域',
                'type' => 'Textarea',
                'name' => 'TTDF_Textarea',
                'value' => null,
                'label' => '文本域',
                'description' => '用于输入多行文本'
            ]
        ]
    ],
    'select-elements' => [
        'title' => '选择设置',
        'fields' => [
            [
                // 'Radio' => '单选框',
                'type' => 'Radio',
                'name' => 'TTDF_Radio',
                'value' => 'option1',
                'label' => '单选框',
                'description' => '用于选择一个选项',
                'options' => [
                    'option1' => '选项一',
                    'option2' => '选项二',
                    'option3' => '选项三'
                ]
            ],
            [
                // 'Select' => '下拉框',
                'type' => 'Select',
                'name' => 'TTDF_Select',
                'value' => 'option2',
                'label' => '下拉框',
                'description' => '用于从列表中选择',
                'options' => [
                    'option1' => '选项一',
                    'option2' => '选项二',
                    'option3' => '选项三'
                ]
            ],
            [
                // 'Checkbox' => '多选框',
                'type' => 'Checkbox',
                'name' => 'TTDF_Checkbox',
                'value' => ['option1', 'option3'],
                'label' => '多选框',
                'description' => '用于选择多个选项',
                'options' => [
                    'option1' => '选项一',
                    'option2' => '选项二',
                    'option3' => '选项三'
                ]
            ]
        ]
    ],
    'TTDF-Options' => [
        'title' => '其他设置',
        'fields' => [
            [
                'type' => 'Select',
                'name' => 'TTDF_RESTAPI_Switch',
                'value' => 'false',
                'label' => 'REST API',
                'description' => 'TTDF框架内置的 REST API<br/>详细教程见 <a href="https://github.com/Typecho-Framework/Typecho-Theme-Development-Framework#rest-api" target="_blank">官方文档 REST API 部分</a>',
                'options' => [
                    'true' => '开启',
                    'false' => '关闭'
                ]
            ],
        ]
    ],
    'HTML-Demo' => [
        'title' => 'HTML示例',
        // 定义HTML TAB栏
        'html' => [
            [
                // 'Content' => '自定义输出HTML内容',
                'content' => '<h2>欢迎使用TTDF框架</h2>
            <p>Typecho Theme Development Framework</p>
            <blockquote style="border-left: 4px solid #ccc; padding-left: 20px; margin: 20px 0;">
                <p>一个 Typecho 主题开发框架,设计之初是写给自己用的。<br>
                <del>还算不上框架只能说让开发变得更简单些</del></p>
            </blockquote>'
            ],
        ]
    ],
];

return $options;

文章字段项

字段类型 描述
Text 文本框
Textarea 文本域
Radio 单选框
Select 下拉框
Checkbox 多选框

$fields =  [
    [
        // Text
        'type' => 'Text',
        'name' => 'TTDF_Fields_Text',
        'value' => null, // 默认值为 null
        'label' => '文本框',
        'description' => '用于输入单行文本',
        // 添加字段属性
        'attributes' => [
            'style' => 'width: 100%;'
        ]
    ],
    [
        // Textarea
        'type' => 'Textarea',
        'name' => 'TTDF_Fields_Textarea',
        'value' => null, // 默认值为 null
        'label' => '文本域',
        'description' => '用于输入多行文本',
        // 添加字段属性
        'attributes' => [
            'style' => 'width: 100%;height: 100px;'
        ]
    ],
    [
        // Radio
        'type' => 'Radio',
        'name' => 'TTDF_Fields_Radio',
        'value' => null, // 默认值为 null
        'label' => '单选框',
        'description' => '用于选择一个选项',
        'options' => [
            'option1' => '选项一',
            'option2' => '选项二',
            'option3' => '选项三'
        ]
    ],
    [
        // Select
        'type' => 'Select',
        'name' => 'TTDF_Fields_Select',
        'value' => null, // 默认值为 null
        'label' => '下拉框',
        'description' => '用于从列表中选择',
        'options' => [
            'option1' => '选项一',
            'option2' => '选项二',
            'option3' => '选项三'
        ]
    ],
    [
        // Checkbox
        'type' => 'Checkbox',
        'name' => 'TTDF_Fields_Checkbox',
        'value' => [], // 默认值为空数组
        'label' => '多选框',
        'description' => '用于选择多个选项',
        'options' => [
            'option1' => '选项一',
            'option2' => '选项二',
            'option3' => '选项三'
        ]
    ]
];

return $fields;

回忆

今天闲得没事,翻开了QQ相册,这个QQ号是我在读初中时给了我弟弟的,没想到这么多年过去了,他的没有清理过QQ相册,今天访问了一下相册,发现了这张图片。
IMG_20250721_144403.jpg

核算时间

图片日期显示的是2013-7-29,隐约记得那时候的WAP自建助站很多,如图片上一样的自助建站多如牛毛(夸张),自己也申请玩过,没想到建站历史竟然这般悠久,2013年,我才读初三(2013)高中(2014-2016),大学(2016-2019),我大学毕业是2019-7-1号。
时间过得真快啊,毕业6年了,距离2013也有12年了。

其实看到图片那一刻,真的发现时间真快。今年29岁,17岁(2013年)接触网站这些东西。

第一个注册的域名大概是.vip后缀的,时间太久了,已忘记,只记得买了没用过,不懂怎么解析使用?就能等过期!!!

此时此刻,只想听一首,“十一年”,因为“十二年”他们还没唱。

音乐播放


首先感谢原buyu1.2.9主题作者(朱某的生活印记),buyu,是个好主题,含义我这里仍然用这个名字,“不语”以BuYu-GK2.0版本,因为站在巨人的肩膀上。

原主题

开源typecho主题buyu1.2.9

修改后演示(本站)

Image_1753029932165.png
实际演示会逐渐更新,其次感谢>见特别鸣谢●等博客的样式等参考。
本着“留其精髓,去其糟粕”理念,buyu主题基础上,修改成现在的这个主题。手机端保持着单栏样式,单栏没侧边等花里花哨的功能,专注于写作阅读。
PC端屏幕较大,保持三栏样式,以增加娱乐功能。

保留的原主题特点和功能

1.音频/折叠面板短代码
2.主题设置备份
3.评论表情
4.图片懒加载功能
5.图片灯箱功能
6.归档
7.文章编辑器字符统计
8.网站 Favicon 图标
9.内容输入框下方字数/可输入多少字/超出多少个字提示
10.代码复制功能等等

修改新增功能

1.自定义头像换源
2.QQ音乐歌单歌曲
3.PC端左侧边个人信息
4.PC端左侧边个人技能(写死)
5.PC端右侧域名收藏
6.PC端右侧QQ音乐播放
7.全站样式更新。
8.双侧边CSS写在侧边php中
9.粒子向上动画
10.回到顶部
11.移动公告等等其他功能

感谢

阿呆日记莫比乌斯周天记等等,让我参考学习。

总结

目前该主题自用,本身站在大家的代码上起来的,本着的是学习态度,感觉我改的蛮好的。每事就看这看那的。慢慢的的用着套用代码加CSS、JS修饰,网站就简单了。反正我都是复制粘贴大法。谢谢观看!!

短代码

~~删除线内容~~
<u>下划线内容</u>
`短代码`
这是一个脚注[^1]。
[^1]: 这是一个脚注示例。

!!!
<p align="center">居中</p>
<p align="right">居右</p>
<font size="5" color="red">颜色&大小</font>
!!!

音频短代码
[audio name="音频名称" artist="音频作者" url="音频链接" cover="音频封面链接"]
----------------
折叠面板短代码
<details><summary>标题</summary>
内容
</details>