<a>元素href属性是否必填?图标显示与尺寸问题及代码求助
首先明确说:HTML规范里<a>的href属性并不是强制必填的。但不带href的<a>会被浏览器当成普通行内元素(类似<span>),而非可交互的链接——这就是你遇到图标不显示、样式失控问题的核心原因。
下面针对你的具体问题逐一解决:
问题1:无href时图标无法显示
当<a>没有href时,浏览器不会把它识别为链接元素,Font Awesome图标的渲染上下文会受影响。你可以通过两个简单步骤修复:
- 给
<a>加role="link"属性,明确它的语义是链接 - 手动补全基础样式,模拟链接的交互和布局特性
示例CSS:
a[role="link"] { cursor: pointer; /* 显示手型光标,符合用户对链接的预期 */ display: inline-block; /* 让元素支持宽高设置 */ }
问题2:设置href=""后无法修改图标尺寸
把href设为空字符串后,<a>是标准链接元素,但Font Awesome图标本质是字体图标,默认是行内元素——行内元素的width/height属性本来就不生效。推荐两种解决方案:
方案1:用font-size控制图标大小(更符合Font Awesome设计逻辑)
#tweet-prop i.fa { font-size: 28px; /* 直接改字体大小就能缩放图标 */ }
方案2:把<a>或<i>设为行内块元素,再设置宽高
#tweet-prop { display: inline-block; width: 30px; height: 30px; line-height: 30px; /* 让图标垂直居中 */ }
关于jQuery设置href的优化建议
你的代码逻辑是对的,但可以做些小优化提升可读性和健壮性:
- 避免全局变量污染,把
quoteContent这类变量放在点击事件内部 - 加载新内容前先清空旧内容,避免加载延迟时显示旧数据
- 简化JSONP请求的写法(jQuery会自动处理回调)
优化后的代码:
$(document).ready(function() { $("#click").click(function() { // 加载中提示 $("#quote-form").html("正在获取新名言..."); $.getJSON("//quotesondesign.com/wp-json/posts?filter[orderby]=rand&filter[posts_per_page]=1", function(key) { const quoteContent = key[0].content; const quoteAuthor = key[0].title; const content = `${quoteContent}<p>— ${quoteAuthor}</p>`; $("#quote-form").html(content); // 构造并设置Twitter分享链接 const tweetUrl = `https://twitter.com/intent/tweet?hashtags=quotes&related=freecodecamp&text=${encodeURIComponent(`"${quoteContent}" - ${quoteAuthor}`)}`; $("#tweet-prop").attr('href', tweetUrl); }); }); });
另外提两个HTML里的小问题:
- 你同时引入了Bootstrap 3.3.7和4.0.0-alpha.6,这会导致样式冲突,建议只保留一个版本
<body>标签没有闭合,记得补上</body>
内容的提问来源于stack exchange,提问作者Gaurav Thantry
相关产品推荐
相关产品推荐

