-
最轻量可控的动态换肤方案是用CSS自定义属性配合JS切换document.documentElement的class;主题变量统一定义在:root,各皮肤通过.theme-dark等class覆盖;优先用classList切换class而非style.setProperty;localStorage持久化需在DOM加载早期执行以防闪屏;IE不支持则降级为class方案或特性检测。
-
根本原因是编码不一致:CSS文件为UTF-8(无BOM)而HTML未声明charset,或服务器响应头charset与文件编码不符;需统一为UTF-8并确保meta、HTTP头、构建工具读取均正确。
-
最直接方案是父容器设display:flex,图片设display:block和max-width:100%防基线留白与宽高比崩坏,并用gap控制间距、flex-wrap:wrap防溢出。
-
用margin控制段落上下间距最可靠,因其直接修改浏览器默认的margin-top和margin-bottom,通用性强、不影响行高与字体渲染,且可单独设置;line-height仅影响段内行距,gap适用于Flex/Grid容器但不兼容IE,而<br>或空<p>则破坏语义且不可控。
-
ServiceWorker是运行在浏览器后台的独立JavaScript线程,作为事件驱动的代理层拦截并响应网络请求,需HTTPS注册、生命周期由浏览器控制;注册后需两次刷新才能完全激活,配合cacheAPI与fetch事件实现离线能力,缓存更新需手动清理旧版本。
-
Vue2中watch默认监听不到数组索引赋值(如arr[0]=newValue)和修改length的变化,因Object.defineProperty无法拦截;响应式操作有push、pop、shift、unshift、splice、sort、reverse;非响应式操作包括索引赋值、length修改及直接替换引用(除非deep:true)。
-
localStorage和sessionStorage只支持字符串值,存对象需JSON.stringify()、取时用JSON.parse()并加try/catch;前者同源永久存储,后者仅限当前tab;敏感信息勿存,注意容量限制与XSS风险。
-
Vite通过依赖预构建提升开发效率,利用esbuild将CommonJS/UMD转换为ESM,减少HTTP请求并加快加载速度;通过缓存机制和智能增量更新实现秒级重启,结合optimizeDeps配置可优化大型项目性能。
-
应使用语义化列表标签:无序内容用<ul>,有序步骤用<ol>,条目必须为<li>;避免<div>模拟列表;CSS控制外观时拆解list-style属性;横向布局用flex;坚持原生标签保障可访问性。
-
JavaScript隐式转换是值在不同上下文中自动类型转换:加号优先字符串拼接,算术符强制转数字,条件判断转布尔(仅false、0、-0、""、null、undefined、NaN为假),==宽松比较会类型调和,===严格比较不转换。
-
答案:结合PBR与阴影映射可在WebGL中实现物理光照与阴影。首先在片元着色器中使用BRDF模型(如GGX)计算基于反照率、金属度、粗糙度和法线贴图的光照响应,支持环境光、点光源等类型;接着通过深度纹理实现阴影映射——从光源视角渲染场景生成shadowmap,在主通道中将片段深度与shadowmap比较以判定阴影,并采用PCF滤波软化边缘;若集成Ammo.js等物理引擎,需每帧同步物体变换矩阵并更新光源视图矩阵,动态物体实时更新shadowmap,静态物体检影烘焙以优化性能;建议采用级联阴影映射提升远距离
-
绝对定位元素的margin看似无效,实则影响盒模型边界而非定位;真正控制位置的是top/right/bottom/left;仅当这些值为auto(如margin:auto居中)时margin才参与定位计算。
-
浮动与绝对定位本质冲突,混用会导致布局错乱、高度塌陷等问题;因absolute完全脱离文档流,会忽略float声明,应明确职责、择一使用,优先采用Flexbox或Grid等现代布局方案。
-
display属性切换导致尺寸突变的根本原因是不同值触发的盒模型行为完全不同:inline元素忽略宽高和上下边距,需改用inline-block或block;display:none切换会引发重排,应预留空间或用visibility/opacity替代;flex/grid中子项display变化不脱离容器布局逻辑;table相关值启用表格算法,易引发意外重算。
-
scrollbar-color仅Firefox原生支持,Chrome/Edge需用::-webkit-scrollbar;其值为滑块色和轨道色,顺序不可颠倒,且不能被WebKit伪元素覆盖。