我是第一次使用CSS网格构建网站。由于并非所有浏览器都支持此功能,因此我设置了一组后备样式,并有条件地使用@supports not (display:grid)。但我也想将其用作移动样式表,并且仅在较大的屏幕上使用CSS网格-这可以通过简单的媒体查询来实现@media screen and (max-width:700px)。现在的问题是-如果其中任何一个都成立,也就是说,如果浏览器不支持CSS网格或者浏览器窗口的宽度不超过700像素,我想使用我的后备样式表。
所以我的问题是-我怎么问的浏览器@supports或@media在同一时间?嵌套它们是行不通的,因为这本质上是在要求它们都为真,并且仅将整个样式表复制粘贴@supports到中,这是错误的@media。
基本上,我想要这样的东西:
(@supports not (display:grid)) or (@media screen and (max-width:700px)){
/*my stylesheet*/
}
Run Code Online (Sandbox Code Playgroud) 我有一个自定义 HTML 标签<fancy-foo>,我想扩展其功能。一些<fancy-foo>元素将使用pretty-bar自定义元素进行扩展,以便我可以在我的 HTML 中使用它们作为
<fancy-foo is="pretty-bar">
<!-- content -->
</fancy-foo>
Run Code Online (Sandbox Code Playgroud)
所以,我定义类FancyFoo和PrettyBar,定义fancy-foo元素并使用扩展它pretty-bar,像这样:
class FancyFoo extends HTMLElement {
constructor() {
super();
}
}
class PrettyBar extends FancyFoo {
constructor() {
super();
}
}
window.customElements.define('fancy-foo', FancyFoo);
window.customElements.define('pretty-bar', PrettyBar, {extends: 'fancy-foo'});
Run Code Online (Sandbox Code Playgroud)
可悲的是,谷歌浏览器吐出错误
未捕获的 DOMException:无法在“CustomElementRegistry”上执行“define”:“fancy-foo”是有效的自定义元素名称
这是一个奇怪的错误。奇怪的是,它说“fancy-foo”是一个有效的自定义元素名称;我知道,但为什么会抛出错误?
这里发生了什么?
好的,所以我写了这个简单的javascript函数,使我的代码更具可读性:
Number.prototype.isBetween=function(a,b){
return(this>=a&&this<b);
};
Run Code Online (Sandbox Code Playgroud)
现在结果非常慢:我尝试了这个"基准"(我真的不知道如何正确地做这些事情,但这证明了我的观点):
var res=0;
var k=20;
var t=new Date().getTime();
for(var i=0;i<10000000;i++){if(k.isBetween(13,31)){res++;}}
console.log(new Date().getTime()-t);
Run Code Online (Sandbox Code Playgroud)
与
var res=0;
var k=20;
var t=new Date().getTime();
for(var i=0;i<10000000;i++){if(k>=13&&k<31)){res++;}}
console.log(new Date().getTime()-t);
Run Code Online (Sandbox Code Playgroud)
并且第一个脚本需要大约3000毫秒的chrome(并且chrome是我正在使用的和我感兴趣的东西),而第二个脚本只需要24ms - 整个因子125 更快.是扩展现有的类javascript提供了一个非常糟糕的主意?这里发生了什么?
我在javascript文件的源代码中有一个带有换行符的字符串,如下所示:
var str = 'new
line';
Run Code Online (Sandbox Code Playgroud)
现在,我想删除代码中的换行符。我对此一无所获,我不断了解\n和\r。
提前致谢!