Laravel邮箱验证?验证功能如何添加?

答案:Laravel邮箱验证通过实现MustVerifyEmail接口、添加email_verified_at字段、配置验证路由与中间件、设置邮件服务实现,用户点击签名链接完成验证。

laravel邮箱验证?验证功能如何添加?

Laravel的邮箱验证功能,说白了,就是给你的用户一个确认身份的机制,确保注册时提供的邮箱是真实有效的。添加这个功能,Laravel其实已经为你铺好了大部分路,你只需要做几步简单的配置和代码调整,就能让它跑起来。核心就是通过发送一个带签名链接的邮件,让用户点击后标记为已验证。

解决方案

在Laravel中添加邮箱验证功能,主要涉及以下几个步骤,它们环环相扣,构成了整个验证流程:

首先,要让你的用户模型知道它需要被验证。这通过实现

IlluminateContractsAuthMustVerifyEmail

接口来完成。打开

app/Models/User.php

文件,修改成这样:

<?phpnamespace AppModels;use IlluminateContractsAuthMustVerifyEmail;use IlluminateDatabaseEloquentFactoriesHasFactory;use IlluminateFoundationAuthUser as Authenticatable;use IlluminateNotificationsNotifiable;use LaravelSanctumHasApiTokens;class User extends Authenticatable implements MustVerifyEmail // 这里是关键{    use HasApiTokens, HasFactory, Notifiable;    // ... 其他属性和方法}

接下来,确保你的

users

表中有一个

email_verified_at

字段。这个字段是用来存储用户邮箱验证成功的时间戳的。如果你是新项目,Laravel自带的

create_users_table

迁移文件里通常已经包含了这个字段。如果不是,你需要手动添加一个迁移:

php artisan make:migration add_email_verified_at_to_users_table --table=users

然后在生成的迁移文件中添加:

// ...public function up(){    Schema::table('users', function (Blueprint $table) {        $table->timestamp('email_verified_at')->nullable()->after('email');    });}public function down(){    Schema::table('users', function (Blueprint $table) {        $table->dropColumn('email_verified_at');    });}// ...

运行

php artisan migrate

来执行迁移。

然后,我们需要告诉Laravel哪些路由需要邮箱验证。最简单的方式是在

routes/web.php

中使用

Auth::routes(['verify' => true])

use IlluminateSupportFacadesAuth;Auth::routes(['verify' => true]);Route::get('/home', [AppHttpControllersHomeController::class, 'index'])    ->name('home')    ->middleware('verified'); // 确保只有验证过的用户才能访问

Auth::routes(['verify' => true])

会自动注册所有必要的验证路由,比如发送验证邮件、验证链接处理等。

middleware('verified')

则是一个非常重要的中间件,它会拦截未验证的用户访问特定路由,并将其重定向到验证通知页面。

最后,也是最关键的一步,是配置你的邮件服务。Laravel默认使用

MAIL_MAILER=smtp

,但你需要根据实际情况配置

MAIL_HOST

,

MAIL_PORT

,

MAIL_USERNAME

,

MAIL_PASSWORD

,

MAIL_ENCRYPTION

,

MAIL_FROM_ADDRESS

,

MAIL_FROM_NAME

.env

变量。例如,使用 Mailgun 或 SES 会更稳定可靠。

MAIL_MAILER=smtpMAIL_HOST=smtp.mailtrap.io # 生产环境请替换为真实SMTP服务器MAIL_PORT=2525MAIL_USERNAME=null # 替换为你的SMTP用户名MAIL_PASSWORD=null # 替换为你的SMTP密码MAIL_ENCRYPTION=tlsMAIL_FROM_ADDRESS="hello@example.com"MAIL_FROM_NAME="${APP_NAME}"

完成这些步骤后,当用户注册时,Laravel会自动发送一封验证邮件到其注册邮箱。用户点击邮件中的链接后,

email_verified_at

字段就会被填充,用户状态变为已验证。

为什么我的Laravel邮箱验证邮件发不出去?

这是个非常常见的问题,我遇到过不少开发者在邮箱验证功能上线前夕才发现邮件根本发不出去。通常,这背后有几个核心原因,排查起来也有章可循。

首当其冲的,是你的

.env

邮件配置是否正确。我见过太多次,开发者在本地用

MAIL_MAILER=log

或者

array

调试得好好的,一上生产环境就忘了改成真实的 SMTP 配置,或者填错了服务器地址、端口、用户名和密码。

MAIL_HOST

MAIL_PORT

MAIL_USERNAME

MAIL_PASSWORD

这些参数,只要有一个不对,邮件就飞不出去。特别是端口和加密方式(

MAIL_ENCRYPTION

),不同服务商要求可能不同,比如有些是

tls

,有些是

ssl

,端口也可能是

587

465

。务必仔细核对你的邮件服务提供商(比如Gmail, Mailgun, SendGrid, AWS SES等)提供的配置信息。

其次,服务器的网络环境也是一个隐形杀手。你的服务器防火墙可能阻止了对外发邮件的端口(通常是

25

,

465

,

587

)。如果你在云服务器上部署,检查一下安全组或防火墙规则,确保这些端口是开放的。有时候,ISP(互联网服务提供商)或者云服务商本身也会限制默认的

25

端口,以防止垃圾邮件。这种情况下,你可能需要换一个端口或者使用一个专用的邮件API服务。

再者,如果你的邮件发送是通过队列(Queue)处理的,那么你得确保队列监听器正在运行。很多时候,为了不阻塞用户请求,Laravel会将邮件发送任务推送到队列中。如果你没有启动

php artisan queue:work

或者

php artisan horizon

,那么这些邮件任务就一直躺在队列里,永远不会被发送出去。检查一下你的

config/queue.php

配置,以及

MAIL_QUEUE_ENABLED

(如果自定义了)等变量。

最后,查看日志文件是解决问题的金钥匙。Laravel会将很多错误信息记录在

storage/logs/laravel.log

文件中。如果邮件发送失败,这里通常会有详细的错误堆栈信息,比如连接超时、认证失败、邮件地址无效等等。仔细阅读这些日志,往往能直接指出问题所在。

当然,还有一些更深层次的问题,比如DNS的SPF和DKIM记录配置不正确,这会导致邮件被标记为垃圾邮件,但通常不会导致邮件完全发不出去,只是收不到。对于生产环境,这些配置也是至关重要的。

如何自定义Laravel邮箱验证通知邮件的样式和内容?

Laravel默认的邮箱验证邮件虽然功能齐全,但样式比较朴素,内容也相对通用。如果你想让验证邮件更符合你的品牌形象,或者添加一些个性化的信息,自定义是完全可行的。

核心思路是覆盖Laravel默认的

VerifyEmail

通知类。Laravel在发送验证邮件时,实际上是触发了一个

IlluminateAuthNotificationsVerifyEmail

通知。你可以通过创建一个自己的通知类来替换它。

首先,在你的

User

模型中,你可以重写

sendEmailVerificationNotification

方法,让它使用你自己的通知类:

// app/Models/User.phpuse AppNotificationsMyVerifyEmail; // 假设你的自定义通知类在这里class User extends Authenticatable implements MustVerifyEmail{    // ...    /**     * Send the email verification notification.     *     * @return void     */    public function sendEmailVerificationNotification()    {        $this->notify(new MyVerifyEmail());    }}

接下来,创建你自己的

MyVerifyEmail

通知类。你可以通过

php artisan make:notification MyVerifyEmail

命令来生成。然后,你需要在这个类中定义

toMail

方法,来构建你的邮件内容。最简单的方式是继承Laravel自带的

VerifyEmail

通知,然后重写

toMail

方法:

// app/Notifications/MyVerifyEmail.phpnamespace AppNotifications;use IlluminateAuthNotificationsVerifyEmail as BaseVerifyEmail;use IlluminateNotificationsMessagesMailMessage;use IlluminateSupportCarbon;use IlluminateSupportFacadesURL;class MyVerifyEmail extends BaseVerifyEmail{    /**     * Get the mail representation of the notification.     *     * @param  mixed  $notifiable     * @return IlluminateNotificationsMessagesMailMessage     */    public function toMail($notifiable)    {        $verificationUrl = $this->verificationUrl($notifiable);        return (new MailMessage)                    ->subject('欢迎来到我们的平台!请验证您的邮箱') // 自定义邮件主题                    ->greeting('您好,' . $notifiable->name . '!') // 自定义问候语                    ->line('感谢您注册我们的服务。为了确保您的账户安全,请点击下方按钮验证您的邮箱地址。') // 自定义邮件正文                    ->action('验证邮箱', $verificationUrl) // 自定义按钮文本和链接                    ->line('如果您没有注册此账户,请忽略此邮件。') // 额外信息                    ->salutation('祝好,' . config('app.name') . '团队'); // 自定义结束语    }    /**     * Get the verification URL for the given notifiable.     *     * @param  mixed  $notifiable     * @return string     */    protected function verificationUrl($notifiable)    {        return URL::temporarySignedRoute(            'verification.verify',            Carbon::now()->addMinutes(config('auth.verification.expire', 60)),            [                'id' => $notifiable->getKey(),                'hash' => sha1($notifiable->getEmailForVerification()),            ]        );    }}

这里我直接复制了

BaseVerifyEmail

中的

verificationUrl

方法,以确保签名链接的生成逻辑不变。你可以在

toMail

方法中尽情发挥,使用

MailMessage

的各种链式方法来构建邮件。

如果你需要更复杂的HTML邮件模板,你可以创建一个

Mailable

类,然后在

toMail

方法中返回这个

Mailable

实例。例如:

// app/Notifications/MyVerifyEmail.php// ...use AppMailCustomVerificationMail; // 你的自定义Mailableclass MyVerifyEmail extends BaseVerifyEmail{    // ...    public function toMail($notifiable)    {        $verificationUrl = $this->verificationUrl($notifiable);        return (new CustomVerificationMail($verificationUrl))                    ->to($notifiable->email);    }}// app/Mail/CustomVerificationMail.phpnamespace AppMail;use IlluminateBusQueueable;use IlluminateContractsQueueShouldQueue;use IlluminateMailMailable;use IlluminateQueueSerializesModels;class CustomVerificationMail extends Mailable{    use Queueable, SerializesModels;    public $verificationUrl;    public function __construct($verificationUrl)    {        $this->verificationUrl = $verificationUrl;    }    public function build()    {        return $this->subject('请验证您的邮箱地址')                    ->markdown('emails.verify-email') // 指向你的Blade模板                    ->with([                        'url' => $this->verificationUrl,                        'userName' => $this->to[0]['name'] ?? '用户', // 假设你可以获取到用户名                    ]);    }}

然后创建一个

resources/views/emails/verify-email.blade.php

模板,用HTML和Blade语法来设计你的邮件。这样就能够完全掌控邮件的视觉呈现了。

在API应用中,Laravel邮箱验证应该如何实现?

在API应用中实现邮箱验证,与传统Web应用有所不同,因为API通常不涉及重定向和Session管理,而是通过JSON响应和Token认证进行交互。核心挑战在于如何处理验证链接的点击,以及如何将验证状态反馈给前端应用。

首先,

MustVerifyEmail

接口和

email_verified_at

字段依然是基础,这些后端逻辑是通用的。

当用户注册后,你可以通过API返回一个成功的响应,并在后台触发邮件发送。邮件内容中包含的验证链接,不应该指向传统的Web路由,而应该指向一个专门用于API验证的端点。

假设你的前端应用是一个SPA (Single Page Application) 或移动应用:

修改验证链接的生成逻辑:

User

模型中,或者你自定义的

MyVerifyEmail

通知类中,你需要修改

verificationUrl

方法,使其生成的链接指向你的前端应用的一个特定路由,并且这个路由会带上Laravel生成的签名验证参数。

例如,如果你的前端验证页面是

https://your-frontend.com/verify-email?signature=...&expires=...&id=...&hash=...

,那么在通知类中可以这样生成:

// app/Notifications/MyVerifyEmail.php// ...protected function verificationUrl($notifiable){    // 假设你的前端验证页面URL    $frontendVerificationUrl = config('app.frontend_url') . '/verify-email';    return URL::temporarySignedRoute(        'verification.verify.api', // 这是一个你自定义的API验证路由名称        Carbon::now()->addMinutes(config('auth.verification.expire', 60)),        [            'id' => $notifiable->getKey(),            'hash' => sha1($notifiable->getEmailForVerification()),            'redirect' => $frontendVerificationUrl, // 将前端URL作为参数传递        ]    );}

这里

config('app.frontend_url')

是你在

.env

中定义的前端应用的基URL。

创建API验证路由和控制器:

routes/api.php

中定义一个用于处理验证链接的路由。这个路由会接收到签名参数,并进行验证。

// routes/api.phpuse IlluminateSupportFacadesRoute;use AppHttpControllersApiEmailVerificationController;Route::get('/email/verify/{id}/{hash}', [EmailVerificationController::class, 'verify'])    ->middleware(['auth:sanctum', 'signed']) // 使用 'signed' 中间件验证URL签名    ->name('verification.verify.api');Route::post('/email/resend', [EmailVerificationController::class, 'resend'])    ->middleware(['auth:sanctum', 'throttle:6,1'])    ->name('verification.resend.api');

注意这里的

auth:sanctum

signed

中间件。

signed

中间件会检查URL的签名是否有效且未过期。

实现API验证控制器:

app/Http/Controllers/Api/EmailVerificationController.php

中,你需要编写

verify

方法来处理实际的验证逻辑。

// app/Http/Controllers/Api/EmailVerificationController.phpnamespace AppHttpControllersApi;use AppHttpControllersController;use IlluminateHttpRequest;use AppModelsUser;use IlluminateAuthEventsVerified;use IlluminateAuthAccessAuthorizationException;class EmailVerificationController extends Controller{    public function verify(Request $request, User $user)    {        // 检查URL的ID和哈希是否匹配        if (! hash_equals((string) $request->route('id'), (string) $user->getKey())) {            throw new AuthorizationException;        }        if (! hash_equals((string) $request->route('hash'), sha1($user->getEmailForVerification()))) {            throw new AuthorizationException;        }        // 检查用户是否已经验证过        if ($user->hasVerifiedEmail()) {            // 如果已经验证,可以返回一个成功响应,或者重定向到前端的某个页面            return response()->json(['message' => 'Email already verified.'], 200);        }        // 执行验证        if ($user->markEmailAsVerified()) {            event(new Verified($user));        }        // 验证成功,返回JSON响应        return response()->json(['message' => 'Email verified successfully.'], 200);    }    public function resend(Request $request)    {        $user = $request->user();        if ($user->hasVerifiedEmail()) {            return response()->json(['message' => 'Email already verified.'], 400);        }        $user->sendEmailVerificationNotification();        return response()->json(['message' => 'Verification link resent.'], 200);    }}

这里,当用户点击邮件中的链接时,请求会打到这个

verify

API端点。前端应用在收到邮件后,用户点击链接,如果这个链接被配置为打开前端应用的某个页面,那么前端应用需要解析URL参数(

id

,

hash

,

signature

等),然后将这些参数通过API请求(比如一个GET请求)发送到

verification.verify.api

这个后端路由。后端处理验证逻辑,然后返回JSON响应给前端。前端根据JSON响应来更新UI,比如显示“验证成功”或“验证失败”。

前端处理:前端应用需要有一个专门的页面或组件来处理验证链接。当用户点击邮件中的链接,如果链接指向前端应用,前端需要:

解析URL中的

id

,

hash

,

signature

等参数。将这些参数发送到后端的

verification.verify.api

端点。根据后端返回的JSON响应,显示验证结果。如果验证成功,可能需要提示用户登录或自动登录(如果前端可以处理Token)。

这种方式将验证逻辑完全放在后端API中,前端只负责触发和展示结果,保持了前后端分离的原则。

以上就是Laravel邮箱验证?验证功能如何添加?的详细内容,更多请关注php中文网其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/146744.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月2日 11:45:44
下一篇 2025年12月2日 12:14:14

相关推荐

  • HTMLrev 上的免费 HTML 网站模板

    HTMLrev 是唯一的人工策划的库专门专注于免费 HTML 模板,适用于由来自世界各地慷慨的模板创建者制作的网站、登陆页面、投资组合、博客、电子商务和管理仪表板世界。 这个人就是我自己 Devluc,我已经工作了 1 年多来构建、改进和更新这个很棒的免费资源。我自己就是一名模板制作者,所以我知道如…

    2025年12月24日
    300
  • 如何使用 Laravel 框架轻松整合微信支付与支付宝支付?

    如何通过 laravel 框架整合微信支付与支付宝支付 在 laravel 开发中,为电商网站或应用程序整合支付网关至关重要。其中,微信支付和支付宝是中国最流行的支付平台。本文将介绍如何使用 laravel 框架封装这两大支付平台。 一个简单有效的方法是使用业内认可的 easywechat lara…

    2025年12月24日
    000
  • Laravel 框架中如何无缝集成微信支付和支付宝支付?

    laravel 框架中微信支付和支付宝支付的封装 如何将微信支付和支付宝支付无缝集成到 laravel 框架中? 建议解决方案 考虑使用 easywechat 的 laravel 版本。easywechat 是一个成熟、维护良好的库,由腾讯官方人员开发,专为处理微信相关功能而设计。其 laravel…

    2025年12月24日
    300
  • 如何在 Laravel 框架中轻松集成微信支付和支付宝支付?

    如何用 laravel 框架集成微信支付和支付宝支付 问题:如何在 laravel 框架中集成微信支付和支付宝支付? 回答: 建议使用 easywechat 的 laravel 版,easywechat 是一个由腾讯工程师开发的高质量微信开放平台 sdk,已被广泛地应用于许多 laravel 项目中…

    2025年12月24日
    000
  • 使用Laravel框架如何整合微信支付和支付宝支付?

    使用 Laravel 框架整合微信支付和支付宝支付 在使用 Laravel 框架开发项目时,整合支付网关是常见的需求。对于微信支付和支付宝支付,推荐采用以下方法: 使用第三方库:EasyWeChat 的 Laravel 版本 建议直接使用现有的 EasyWeChat 的 Laravel 版本。该库由…

    2025年12月24日
    000
  • 如何将微信支付和支付宝支付无缝集成到 Laravel 框架中?

    如何简洁集成微信和支付宝支付到 Laravel 问题: 如何将微信支付和支付宝支付无缝集成到 Laravel 框架中? 答案: 强烈推荐使用流行的 Laravel 包 EasyWeChat,它由腾讯开发者维护。多年来,它一直保持更新,提供了一个稳定可靠的解决方案。 集成步骤: 安装 Laravel …

    2025年12月24日
    100
  • 使用 React 构建 Fylo 云存储网站

    介绍 在这篇博文中,我们将逐步介绍如何使用 react 创建一个功能丰富的云存储网站。该网站受 fylo 启发,提供了主页、功能、工作原理、感言和页脚等部分。在此过程中,我们将讨论用于构建这个完全响应式网站的结构、组件和样式。 项目概况 该项目由多个部分组成,旨在展示云存储服务。每个部分都是用 re…

    2025年12月24日 好文分享
    000
  • 使用 React 构建食谱查找器网站

    介绍 在本博客中,我们将使用 react 构建一个食谱查找网站。该应用程序允许用户搜索他们最喜欢的食谱,查看趋势或新食谱,并保存他们最喜欢的食谱。我们将利用 edamam api 获取实时食谱数据并将其动态显示在网站上。 项目概况 食谱查找器允许用户: 按名称搜索食谱。查看趋势和新添加的食谱。查看各…

    2025年12月24日 好文分享
    200
  • 不可变数据结构:ECMA 4 中的记录和元组

    不可变数据结构:ecmascript 2024 中的新功能 ecmascript 2024 引入了几个令人兴奋的更新,但对我来说最突出的一个功能是引入了不可变数据结构。这些新结构——记录和元组——改变了 javascript 中数据管理的游戏规则。它们提供了一种令人满意的方式来保持我们的数据健全、安…

    2025年12月24日
    100
  • 为什么前端固定定位会发生移动问题?

    前端固定定位为什么会出现移动现象? 在进行前端开发时,我们经常会使用CSS中的position属性来控制元素的定位。其中,固定定位(position: fixed)是一种常用的定位方式,它可以让元素相对于浏览器窗口进行定位,保持在页面的固定位置不动。 然而,有时候我们会遇到一个问题:在使用固定定位时…

    2025年12月24日
    000
  • 学会从头开始学习CSS,掌握制作基本网页框架的技巧

    从零开始学习CSS,掌握网页基本框架制作技巧 前言: 在现今互联网时代,网页设计和开发是一个非常重要的技能。而学习CSS(层叠样式表)是掌握网页设计的关键之一。CSS不仅可以为网页添加样式和布局,还可以为用户呈现独特且具有吸引力的页面效果。在本文中,我将为您介绍一些基本的CSS知识,以及一些常用的代…

    2025年12月24日
    200
  • 从初学到专业:掌握这五种前端CSS框架

    CSS是网站设计中重要的一部分,它控制着网站的外观和布局。前端开发人员为了让页面更加美观和易于使用,通常使用CSS框架。这篇文章将带领您了解这五种前端CSS框架,从入门到精通。 Bootstrap Bootstrap是最受欢迎的CSS框架之一。它由Twitter公司开发,具有可定制的响应式网格系统、…

    2025年12月24日
    200
  • 揭秘Web标准涵盖的语言:了解网页开发必备的语言范围

    在当今数字时代,互联网成为了人们生活中不可或缺的一部分。作为互联网的基本构成单位,网页承载着我们获取和分享信息的重要任务。而网页开发作为一门独特的技术,离不开一些必备的语言。本文将揭秘Web标准涵盖的语言,让我们一起了解网页开发所需的语言范围。 首先,HTML(HyperText Markup La…

    2025年12月24日
    000
  • 克服害怕做选择的恐惧症:这五个前端CSS框架将为你解决问题

    选择恐惧症?这五个前端CSS框架能帮你解决问题 近年来,前端开发者已经进入了一个黄金时代。随着互联网的快速发展,人们对于网页设计和用户体验的要求也越来越高。然而,要想快速高效地构建出漂亮的网页并不容易,特别是对于那些可能对CSS编码感到畏惧的人来说。所幸的是,前端开发者们早已为我们准备好了一些CSS…

    2025年12月24日
    200
  • 揭开Web开发的语言之谜:了解构建网页所需的语言有哪些?

    Web标准中的语言大揭秘:掌握网页开发所需的语言有哪些? 随着互联网的快速发展,网页开发已经成为人们重要的职业之一。而要成为一名优秀的网页开发者,掌握网页开发所需的语言是必不可少的。本文将为大家揭示Web标准中的语言大揭秘,介绍网页开发所需的主要语言。 HTML(超文本标记语言)HTML是网页开发的…

    2025年12月24日
    400
  • 常用的网页开发语言:了解Web标准的要点

    了解Web标准的语言要点:常见的哪些语言应用在网页开发中? 随着互联网的不断发展,网页已经成为人们获取信息和交流的重要途径。而要实现一个高质量、易用的网页,离不开一种被广泛接受的Web标准。Web标准的制定和应用,涉及到多种语言和技术,本文将介绍常见的几种语言在网页开发中的应用。 首先,HTML(H…

    2025年12月24日
    000
  • 网页开发中常见的Web标准语言有哪些?

    探索Web标准语言的世界:网页开发中常用的语言有哪些? 在现代社会中,互联网的普及程度越来越高,网页已成为人们获取资讯、娱乐、交流的重要途径。而网页的开发离不开各种编程语言的应用和支持。在这个虚拟世界的网络,有许多被广泛应用的标准化语言,用于为用户提供优质的网页体验。本文将探索网页开发中常用的语言,…

    2025年12月24日
    000
  • 深入探究Web标准语言的范围,涵盖了哪些语言?

    Web标准是指互联网上的各个网页所需遵循的一系列规范,确保网页在不同的浏览器和设备上能够正确地显示和运行。这些标准包括HTML、CSS和JavaScript等语言。本文将深入解析Web标准涵盖的语言范围。 首先,HTML(HyperText Markup Language)是构建网页的基础语言。它使…

    2025年12月24日
    000
  • 深入理解CSS框架与JS之间的关系

    深入理解CSS框架与JS之间的关系 在现代web开发中,CSS框架和JavaScript (JS) 是两个常用的工具。CSS框架通过提供一系列样式和布局选项,可以帮助我们快速构建美观的网页。而JS则提供了一套功能强大的脚本语言,可以为网页添加交互和动态效果。本文将深入探讨CSS框架和JS之间的关系,…

    2025年12月24日
    000
  • CSS 超链接属性解析:text-decoration 和 color

    CSS 超链接属性解析:text-decoration 和 color 超链接是网页中常用的元素之一,它能够在不同页面之间建立连接。为了使超链接在页面中有明显的标识和吸引力,CSS 提供了一些属性来调整超链接的样式。本文将重点介绍 text-decoration 和 color 这两个与超链接相关的…

    2025年12月24日
    000

发表回复

登录后才能评论
关注微信