Style 对象
Style 对象表示一个个别的样式声明。
访问 Style 对象
Style 对象可以从文档的头部区域访问,或者从指定的 HTML 元素访问。
从文档的头部区域访问 style 对象:
var x = document.getElementsByTagName("STYLE");尝试一下
访问一个指定元素的 style 对象:
var x = document.getElementById("myH1").style;
创建 Style 对象
您可以使用 document.createElement() 方法来创建 <style> 元素:
var x = document.createElement("STYLE");尝试一下
您也可以设置一个已有元素的 style 属性:
document.getElementById("myH1").style.color = "red";
Style 对象属性
"CSS" 列表示该属性是在哪一个 CSS 版本中定义的(CSS1、CSS2 或 CSS3)。
属性 | 描述 | CSS |
---|---|---|
alignContent | 设置或返回当灵活容器内的各项没有占用所有可用的空间时各项之间的对齐方式(水平)。 | 3 |
alignItems | 设置或返回灵活容器内的各项的对齐方式。 | 3 |
alignSelf | 设置或返回灵活容器内被选中项目的对齐方式。 | 3 |
animation | 是下面除了 animationPlayState 属性之外的其他属性的速记属性。 | 3 |
animationDelay | 设置或返回动画何时开始。 | 3 |
animationDirection | 设置或返回是否循环交替反向播放动画。 | 3 |
animationDuration | 设置或返回动画完成需花费的秒数或毫秒数。 | 3 |
animationFillMode | 设置或返回当动画不播放时(当动画完成时,或当动画有一个延迟未开始播放时),要应用到元素的样式。 | 3 |
animationIterationCount | 设置或返回动画的播放次数。 | 3 |
animationName | 设置或返回关键帧 @keyframes 动画的名称。 | 3 |
animationTimingFunction | 设置或返回动画的速度曲线。 | 3 |
animationPlayState | 设置或返回动画是运行的还是暂停的。 | 3 |
background | 设置或返回在一个声明中的所有背景属性。 | 1 |
backgroundAttachment | 设置或返回背景图像是否固定或随页面滚动。 | 1 |
backgroundColor | 设置或返回元素的背景色。 | 1 |
backgroundImage | 设置或返回元素的背景图像。 | 1 |
backgroundPosition | 设置或返回的背景图像的起始位置。 | 1 |
backgroundRepeat | 设置或返回如何重复背景图像。 | 1 |
backgroundClip | 设置或返回背景的绘制区域。 | 3 |
backgroundOrigin | 设置或返回背景图像的定位区域。 | 3 |
backgroundSize | 设置或返回背景图像的大小。 | 3 |
backfaceVisibility | 设置或返回当一个元素背对屏幕时是否可见。 | 3 |
border | 设置或返回在一个声明中的 borderWidth、borderStyle 和 borderColor。 | 1 |
borderBottom | 设置或返回在一个声明中的所有 borderBottom* 属性。 | 1 |
borderBottomColor | 设置或返回下边框的颜色。 | 1 |
borderBottomLeftRadius | 设置或返回左下角边框的形状。 | 3 |
borderBottomRightRadius | 设置或返回右下角边框的形状。 | 3 |
borderBottomStyle | 设置或返回下边框的样式。 | 1 |
borderBottomWidth | 设置或返回下边框的宽度。 | 1 |
borderCollapse | 设置或返回表格的边框是否被折叠为一个单一的边框。 | 2 |
borderColor | 设置或返回元素边框的颜色(最多可以有四个值)。 | 1 |
borderImage | 一个用于设置或返回所有的 borderImage* 属性的速记属性。 | 3 |
borderImageOutset | 设置或返回边框图像区域超出边界框的量。 | 3 |
borderImageRepeat | 设置或返回图像边框是重复拼接图块还是延伸图块。 | 3 |
borderImageSlice | 设置或返回图像边框的向内偏移。 | 3 |
borderImageSource | 设置或返回要作为边框使用的图像。 | 3 |
borderImageWidth | 设置或返回图像边框的宽度。 | 3 |
borderLeft | 设置或返回在一个声明中的所有 borderLeft* 属性。 | 1 |
borderLeftColor | 设置或返回左边框的颜色。 | 1 |
borderLeftStyle | 设置或返回左边框的样式。 | 1 |
borderLeftWidth | 设置或返回左边框的宽度。 | 1 |
borderRadius | 一个用于设置或返回四个 border*Radius 属性的速记属性。 | 3 |
borderRight | 设置或返回在一个声明中的所有 borderRight* 属性。 | 1 |
borderRightColor | 设置或返回右边框的颜色。 | 1 |
borderRightStyle | 设置或返回右边框的样式。 | 1 |
borderRightWidth | 设置或返回右边框的宽度。 | 1 |
borderSpacing | 设置或返回表格中单元格之间的距离。 | 2 |
borderStyle | 设置或返回元素边框的样式(最多可以有四个值)。 | 1 |
borderTop | 设置或返回在一个声明中的所有 borderTop* 属性。 | 1 |
borderTopColor | 设置或返回上边框的颜色。 | 1 |
borderTopLeftRadius | 设置或返回左上角边框的形状。 | 3 |
borderTopRightRadius | 设置或返回右上角边框的形状。 | 3 |
borderTopStyle | 设置或返回上边框的样式。 | 1 |
borderTopWidth | 设置或返回上边框的宽度。 | 1 |
borderWidth | 设置或返回元素边框的宽度(最多可以有四个值)。 | 1 |
bottom | 设置或返回定位元素的底部位置。 | 2 |
boxDecorationBreak | 设置或返回分页处元素的背景和边框行为,或者换行处内联元素的背景和边框行为。 | 3 |
boxShadow | 设置或返回元素的下拉阴影。 | 3 |
boxSizing | 允许您以特定的方式定义匹配某个区域的特定元素。 | 3 |
captionSide | 设置或返回表格标题的位置。 | 2 |
clear | 设置或返回元素相对浮动对象的位置。 | 1 |
clip | 设置或返回定位元素的可见部分。 | 2 |
color | 设置或返回文本的颜色。 | 1 |
columnCount | 设置或返回元素应该被划分的列数。 | 3 |
columnFill | 设置或返回如何填充列。 | 3 |
columnGap | 设置或返回列之间的间隔。 | 3 |
columnRule | 一个用于设置或返回所有的 columnRule* 属性的速记属性。 | 3 |
columnRuleColor | 设置或返回列之间的颜色规则。 | 3 |
columnRuleStyle | 设置或返回列之间的样式规则。 | 3 |
columnRuleWidth | 设置或返回列之间的宽度规则。 | 3 |
columns | 一个用于设置或返回 columnWidth 和 columnCount 的速记属性。 | 3 |
columnSpan | 设置或返回一个元素应横跨多少列。 | 3 |
columnWidth | 设置或返回列的宽度。 | 3 |
content | 与 :before 和 :after 伪元素一起使用,来插入生成的内容。 | 2 |
counterIncrement | 增加一个或多个计数器。 | 2 |
counterReset | 创建或重置一个或多个计数器。 | 2 |
cursor | 设置或返回鼠标指针显示的光标类型。 | 2 |
direction | 设置或返回文本的方向。 | 2 |
display | 设置或返回元素的显示类型。 | 1 |
emptyCells | 设置或返回是否显示表格中的空单元格的边框和背景。 | 2 |
filter | 设置或返回图片滤镜(可视效果,如:高斯模糊与饱和度) | 3 |
flex | 相对于同一容器其他灵活的项目,设置或返回项目的长度。 | 3 |
flexBasis | 设置或灵活项目的初始长度。 | 3 |
flexDirection | 设置或返回灵活项目的方向。 | 3 |
flexFlow | 是 flexDirection 和 flexWrap 属性的速记属性。 | 3 |
flexGrow | 设置或返回项目将相对于同一容器内其他灵活的项目进行扩展的量。 | 3 |
flexShrink | 设置或返回项目将相对于同一容器内其他灵活的项目进行收缩的量。 | 3 |
flexWrap | 设置或返回灵活项目是否拆行或拆列。 | 3 |
cssFloat | 设置或返回元素的水平对齐方式。 | 1 |
font | 设置或返回一个声明中的 fontStyle、fontVariant、fontWeight、fontSize、lineHeight 和 fontFamily。 | 1 |
fontFamily | 设置或返回文本的字体。 | 1 |
fontSize | 设置或返回文本的字体尺寸。 | 1 |
fontStyle | 设置或返回字体样式是否是 normal(正常的)、italic(斜体)或 oblique(倾斜的)。 | 1 |
fontVariant | 设置或返回是否以小型大写字母显示字体。 | 1 |
fontWeight | 设置或返回字体的粗细。 | 1 |
fontSizeAdjust | 当使用备用字体时,确保文本的可读性。 | 3 |
fontStretch | 从字体库中选择一种正常的、浓缩的或扩大的字体。 | 3 |
hangingPunctuation | 规定一个标点符号是否可以放置在线框外。 | 3 |
height | 设置或返回元素的高度。 | 1 |
hyphens | 设置如何拆分单词来提高段落布局。 | 3 |
icon | 向作者提供为一个带有等价于图标的元素定义样式的功能。 | 3 |
imageOrientation | 规定一个用户代理应用到图像上的顺时针方向的旋转。 | 3 |
justifyContent | 设置或返回当灵活容器内的各项没有占用所有可用的空间时各项之间的对齐方式(垂直)。 | 3 |
left | 设置或返回定位元素的左部位置。 | 2 |
letterSpacing | 设置或返回文本中字符之间的空间。 | 1 |
lineHeight | 设置或返回在文本中行之间的距离。 | 1 |
listStyle | 设置或返回一个声明中的 listStyleImage、listStylePosition 和 listStyleType。 | 1 |
listStyleImage | 设置或返回作为列表项标记的图像。 | 1 |
listStylePosition | 设置或返回列表项标记的位置。 | 1 |
listStyleType | 设置或返回列表项标记的类型。 | 1 |
margin | 设置或返回元素的外边距(最多可以有四个值)。 | 1 |
marginBottom | 设置或返回元素的的下外边距。 | 1 |
marginLeft | 设置或返回元素的左外边距。 | 1 |
marginRight | 设置或返回元素的右外边距。 | 1 |
marginTop | 设置或返回元素的上外边距。 | 1 |
maxHeight | 设置或返回元素的最大高度。 | 2 |
maxWidth | 设置或返回元素的最大宽度。 | 2 |
minHeight | 设置或返回元素的最小高度。 | 2 |
minWidth | 设置或返回元素的最小宽度。 | 2 |
navDown | 设置或返回当使用向下箭头导航键时要导航到哪里。 | 3 |
navIndex | 设置或返回元素的显示顺序。 | 3 |
navLeft | 设置或返回当使用向左箭头导航键时要导航到哪里。 | 3 |
navRight | 设置或返回当使用向右箭头导航键时要导航到哪里。 | 3 |
navUp | 设置或返回当使用向上箭头导航键时要导航到哪里。 | 3 |
opacity | 设置或返回元素的不透明度。 | 3 |
order | 设置或返回一个灵活的项目相对于同一容器内其他灵活项目的顺序。 | 3 |
orphans | 设置或返回当元素内有分页时,必须在页面底部预留的最小行数。 | 2 |
outline | 设置或返回在一个声明中的所有 outline 属性。 | 2 |
outlineColor | 设置或返回一个元素周围的轮廓颜色。 | 2 |
outlineOffset | 对轮廓进行偏移,并在边框边缘进行绘制。 | 3 |
outlineStyle | 设置或返回一个元素周围的轮廓样式。 | 2 |
outlineWidth | 设置或返回一个元素周围的轮廓宽度。 | 2 |
overflow | 设置或返回如何处理呈现在元素框外面的内容。 | 2 |
overflowX | 规定如果内容溢出元素的内容区域,是否对内容的左/右边缘进行裁剪。 | 3 |
overflowY | 规定如果内容溢出元素的内容区域,是否对内容的上/下边缘进行裁剪。 | 3 |
padding | 设置或返回元素的内边距(最多可以有四个值)。 | 1 |
paddingBottom | 设置或返回元素的下内边距。 | 1 |
paddingLeft | 设置或返回元素的左内边距。 | 1 |
paddingRight | 设置或返回元素的右内边距。 | 1 |
paddingTop | 设置或返回元素的上内边距。 | 1 |
pageBreakAfter | 设置或返回元素后的分页行为。 | 2 |
pageBreakBefore | 设置或返回元素前的分页行为。 | 2 |
pageBreakInside | 设置或返回元素内的分页行为。 | 2 |
perspective | 设置或返回 3D 元素被查看的视角。 | 3 |
perspectiveOrigin | 设置或返回 3D 元素的底部位置。 | 3 |
position | 设置或返回用于元素定位方法的类型(static、relative、absolute 或 fixed)。 | 2 |
quotes | 设置或返回嵌入引用的引号类型。 | 2 |
resize | 设置或返回是否可由用户调整元素的尺寸大小。 | 3 |
right | 设置或返回定位元素的右部位置。 | 2 |
tableLayout | 设置或返回表格单元格、行、列的布局方式。 | 2 |
tabSize | 设置或返回制表符(tab)字符的长度。 | 3 |
textAlign | 设置或返回文本的水平对齐方式。 | 1 |
textAlignLast | 设置或返回当 text-align 属性设置为 "justify" 时,如何对齐一个强制换行符前的最后一行。 | 3 |
textDecoration | 设置或返回文本的修饰。 | 1 |
textDecorationColor | 设置或返回文本修饰的颜色。 | 3 |
textDecorationLine | 设置或返回文本修饰要使用的线条类型。 | 3 |
textDecorationStyle | 设置或返回文本修饰中的线条样式。 | 3 |
textIndent | 设置或返回文本第一行的缩进。 | 1 |
textJustify | 设置或返回当 text-align 属性设置为 "justify" 时,要使用的对齐方法。 | 3 |
textOverflow | 设置或返回当文本溢出包含它的元素,应该发生什么。 | 3 |
textShadow | 设置或返回文本的阴影效果。 | 3 |
textTransform | 设置或返回文本的大小写。 | 1 |
top | 设置或返回定位元素的顶部位置。 | 2 |
transform | 向元素应用 2D 或 3D 转换。 | 3 |
transformOrigin | 设置或返回被转换元素的位置。 | 3 |
transformStyle | 设置或返回被嵌套的元素如何呈现在 3D 空间中。 | 3 |
transition | 一个用于设置或返回四个过渡属性的速记属性。 | 3 |
transitionProperty | 应用过渡效果的 CSS 属性的名称。 | 3 |
transitionDuration | 设置或返回完成过渡效果需要花费的时间(以秒或毫秒计)。 | 3 |
transitionTimingFunction | 设置或返回过渡效果的速度曲线。 | 3 |
transitionDelay | 设置或返回过渡效果何时开始。 | 3 |
unicodeBidi | 设置或返回文本是否被重写,以便在同一文档中支持多种语言。 | 2 |
verticalAlign | 设置或返回元素中内容的垂直对齐方式。 | 1 |
visibility | 设置或返回元素是否应该是可见的。 | 2 |
whiteSpace | 设置或返回如何处理文本中的制表符、换行符和空格符。 | 1 |
width | 设置或返回元素的宽度。 | 1 |
wordBreak | 设置或返回非 CJK 语言的换行规则。 | 3 |
wordSpacing | 设置或返回文本中单词之间的空间。 | 1 |
wordWrap | 允许长单词或 URL 地址换行到下一行。 | 3 |
widows | 设置或返回一个元素必须在页面顶部的可见行的最小数量。 | 2 |
zIndex | 设置或返回定位元素的堆叠顺序。 | 2 |
如您还有不明白的可以在下面与我留言或是与我探讨QQ群308855039,我们一起飞!
三部分 附录(因为暂时不支持插入超链接所以部分内容无法显示)
附录一 DIV命名规范
附录二 CSS精灵
a { display:block; width:200px; height:65px; line-height:65px; /*定义状态*/ text-indent:-2015px; /*隐藏文字*/ background-image:url(button.png); /*定义背景图片*/ background-position:0 0; /*定义链接的普通状态,此时图像显示的是顶上的部分*/ } a:hover { background-position:0 -66px; /*定义链接的滑过状态,此时显示的为中间部分,向下取负值*/ } a:active { background-position:0 -132px; /*定 义链接的普通状态,此时显示的是底部的部分,向下取负值*/ }
附录三 一些tips解决方案
页面优化实践
写DIV+CSS 的一些常识
常用代码片段
body, div, dl, dt, dd, ul, ol, li, h1, h2, h3, h4, h5, h6, pre, code, form, fieldset, legend, input, button, textarea, p, blockquote, th, td { margin:0; padding:0; } body { background:#fff; color:#555; font-size:14px; font-family: Verdana, Arial, Helvetica, sans-serif; } td, th, caption { font-size:14px; } h1, h2, h3, h4, h5, h6 { font-weight:normal; font-size:100%; } address, caption, cite, code, dfn, em, strong, th, var { font-style:normal; font-weight:normal; } a { color:#555; text-decoration:none; } a:hover { text-decoration:underline; } img { border:none; } ol,ul,li { list-style:none; } input, textarea, select, button { font:14px Verdana,Helvetica,Arial,sans-serif; } table { border-collapse:collapse; } html { overflow-y: scroll; } .clearfix:after { content: "."; display: block; height:0; clear:both; visibility: hidden; } .clearfix { *zoom:1; }
<meta name=”viewport” content=”width=320,target-densitydpi=dpi_value,initial-scale=1, user-scalable=no”/>
table-layout: fixed; word-break: break-all;;border-collapse: collapse
<div id=”abc” style=”display:table;text-align:center;width:100%;height:100%;”> <span style=”background:#f00; display:table-cell; vertical-align:middle;”> <input type=”button” value=”item1″ /> </span> </div>
filter:alpha(opacity=50); /*1-100*/ -moz-opacity:0.5; /*0-1.0*/ -khtml-opacity:0.5; /*0-1.0*/ opacity:0.5; /*0-1.0*/
white-space:nowrap; text-overflow:ellipsis; overflow:hidden;
.fix{zoom:1;} .fix:after{ display:block; content:'clear'; clear:both; line-height:0; visibility:hidden; }
一些总结
一些概念
学习从来不是一个人的事情,要有个相互监督的伙伴,想要学习或交流前端问题的小伙伴可以私信“学习”小明加群获取2019web前端最新入门资料,一起学习,一起成长!
有些人玩游戏,是为了寻求刺激;有些人玩游戏,是为了休闲安静地打发时间。二者的感受如何才能兼得,近日,苏格兰爱丁堡的一位开发者 Anslo 潜心开发了 16 个月,发布了一款名为 《Slow Roads》(slowroads.io)的免费、轻松的驾驶游戏,可以让玩家在电脑上体验《速度与激情》的感觉,还能欣赏由程序自动生成的优美风景。此外,这款游戏可以直接在浏览器中运行,无需登录或者安装,对于玩家而言,即开即玩。
玩法
《Slow Roads》一经推出之后,便受到了不少玩家的关注和试玩。和传统驾驶类游戏有所不同,这款游戏在玩法和技术实现上有着巨大的差异。
首先,在游戏玩法上,它没有撞车、没有失败更没有输赢。随着汽车的行驶,道路会一直在延伸,风景秀丽的景观在身边飞驰,最为值得关注无论是春夏秋冬,还是白天、傍晚、黑夜,亦或是森林、沙漠、环山,场景都可以一键“无缝切换”。
另外,驾驶的车也可以切换为轿车、长途汽车、自行车。
如果你的方向盘偏离了道路,也可以按一下「R」键将车重新定位到快速道上,甚至道路也是可以选择的。当然,如果你愿意,还可以驾驶越野车或者体验一下水下行驶的感觉。
当然,玩累了,还可以开启自动驾驶模式。
同时,这款游戏的操作也非常简单,W 键或向上箭头是加速,S 键或向下箭头是刹车。A 键和 D 键(或左右箭头)控制转向;玩家也可以通过按住 Shift 或双击 W 键来升级汽车;C 键可改变摄像机角度,Q 键和 E 键在可用的天气和照明条件下循环。如果你不喜欢键盘控制,也可以改用基于鼠标的转向。
在技术实现上,与使用传统游戏引擎开发的游戏不同,Anslo 表示,《Slow Roads》使用了 three.js 的 3D JavaScript 库构建,可直接在 Chrome、Firefox、Safari 和 Edge 浏览器中运行。与此同时,上述的场景切换都是由程序自动生成,通过技术实现,可以动态生成无限地图和处理事务。这是一个相当复杂且有趣的技术演示。用开发者 Anslo 自己的话来形容,「该游戏的实验正在挑战浏览器游戏的合理边界」。
接下来,我们不妨一起来看一下具体的技术原理。
技术实现
事实上,这一款游戏的制作不仅需要深厚的开发功底,也需要有设计、物理学等知识储备。在《Slow Roads》中,作者首先通过生成一个高度图,采用了类似于 Perlin 噪声的算法,并进行了修改优化,从而实现更真实的山丘景观。
继而使用一个 npm 包 Alea(https://www.npmjs.com/package/alea)用作 PRNG(伪随机数生成器,Preudo Random Number Generator),用于复制和粘贴实现。
当完成第一步开发之后,第二步便是进行车子行驶的道路规划。Anslo 选择采用了以下步骤:
选择地图中一个不太陡峭、不太深的地方,作为行驶的起点。同时,这也是道路中线的第一个点。
进而选择一个方向,并测量周围的高度图,以此评估横向和纵向的坡度。
然后,道路中线最好是能向坡度下滑的方向移动 10 米。点被编码在一个双向链表中,每个点都使用元数据(如坡度、道路宽度和曲率)注释。
上面这个过程是会一直重复的(以从车辆位置开始的 15 公里的地平线为界),但注意行驶的车道不要有自相交的情况,这也是游戏中道路规划最难的地方。
中线点的高度用一个 9 个点的窗口进行追溯平滑,以避免海拔的突然急剧变化。
在一个较短的地平线上,大概 10 米的中线被用二次贝塞尔曲线以 1 米的分辨率进行平滑点的注释。
当道路规划完成之后,第三步便是渲染环境。这里可以使用一个 5x5 的大粗网格(这款游戏中,作者采用的是 10 米的分辨率和 1 公里的最大视距)来渲染大型场景。这被称之为“远网格”。
在靠近道路的地方,是一个由更细的 5x5 网格组成的,每个网格拼接到一起,沿着道路中线行进,形成一个连续的 "走廊"。这就是 "近网格",从车辆的位置向前生成一个固定的水平线。
同时,远处网格现在重叠的顶点被粗略地 "隐藏 "起来,把它们沉到几米以下。
然后离道路中线接近的地方,在道路的高度和底层环境的高度之间插值,以实现无缝过渡。
除了以上,Anslo 还采用了一个额外的 3x3 网格,渲染离道路中线更近的地方,优化细节,实现更精细的体验。
在图形细节中,这名开发者在游戏中的地面纹理使用世界坐标的 UV,并与 perlin 噪声混合,以改变草的颜色。另外,在树叶地图下应用了一个暗色的纹理,用来产生树影的感官。
正如上文所述,这款游戏还采用了一些物理学的基础知识,如汽车每个轮子的动力学都是独立计算的,使用围绕重力、表面摩擦力和地面法线的常规运动学方程式。
最后
目前这款游戏已经基本完成,不过,Anslo 认为也还有不少需要优化的地方,后续可能会改善天气效果、更多的车辆类型和控制器支持。
作为一款没有使用如 Unity、UE5 等游戏引擎,而仅是使用了 JavaScript 实现的游戏而言,它的轻量级获得了不少好评:
火星地图很有趣。另外,我发现汽车在倒挡时候可以同样快!
如果能教会自动驾驶漂移会很酷。
现在的我没有驾照,但是也能通过浏览器获得驾驶通信证了,荣誉!
期待后续可以加上背景音乐!
也有不少网友感叹似乎回到了高中时期玩《Geep Simulator》的年代。不过,目前《Slow Roads》暂时还没有开源版本的计划,但作者表示将来不排除有这种可能性。同时根据游戏的页面显示,Anslo 称正在致力于保持《Slow Roads》免费提供且没有广告,「享受这作为逃离资本主义的喘息之机」。
试玩地址:slowroads.io
参考资料:
https://anslo.medium.com/slow-roads-tl-dr-a664ac6bce40
https://twitter.com/anslogen
https://arstechnica.com/gaming/2022/10/slow-roads-offers-a-chill-endless-driving-experience-in-your-browser/
https://twitter.com/anslogen/status/1583850492463296517
*请认真填写需求信息,我们会在24小时内与您取得联系。