这两个都是处理圆角效果的,但不是w3标准的。
w3标准的是border-radius。
-webkit-border-radius 是为了兼容 chrome 或 safari。
-moz-border-radius 是为了兼容火狐。
而现在火狐支持标准的border-radius,所以-moz-border-radius 是个无用的属性。
层叠样式表(英文全称:Cascading Style Sheets)是一种用来表现HTML(标准通用标记语言的一个应用)或XML(标准通用标记语言的一个子集)等文件样式的计算机语言。CSS不仅可以静态地修饰网页,还可以配合各种脚本语言动态地对网页各元素进行格式化。
特点:
1、丰富的样式定义
CSS提供了丰富的文档样式外观,以及设置文本和背景属性的能力;允许为任何元素创建边框,以及元素边框与其他元素间的距离,以及元素边框与元素内容间的距离;允许随意改变文本的大小写方式、修饰方式以及其他页面效果。
2、易于使用和修改
CSS可以将样式定义在HTML元素的style属性中,也可以将其定义在HTML文档的header部分,也可以将样式声明在一个专门的CSS文件中,以供HTML页面引用。总之,CSS样式表可以将所有的样式声明统一存放,进行统一管理。
3、多页面应用
CSS样式表可以单独存放在一个CSS文件中,这样我们就可以在多个页面中使用同一个CSS样式表。CSS样式表理论上不属于任何页面文件,在任何页面文件中都可以将其引用。这样就可以实现多个页面风格的统一。
苹果自带浏览器一般在桌面最下方。该浏览器可以进行问题搜索、网站登录等。因为是系统自带浏览器,所以独有对搜索内容进行长截图的功能。
另外如果通过以上方法还是没有Safari图标,那么可能是您越狱了,被其他应用占用了位置,您可以在访问限制里,关闭其他应用即可显示出来。还有一种情况是可能您删除了Safari浏览器文件,导致应用损坏,这种情况可以重新安装或者重刷系统解决。
产品特点:
苹果公司自己的内核,也是苹果的Safari浏览器使用的内核。 使用Webkit引擎,包含WebCore排版引擎及JavaScriptCore解析引擎,均是从KDE的KHTML及KJS引擎衍生而来,它们都是自由软件,在GPL条约下授权,同时支持BSD系统的开发。
所以Webkit也是自由软件,同时开放源代码。在安全方面不受IE、Firefox的制约,所以Safari浏览器在国内还是很安全的。
但似乎根据最新的浏览器调查表明,该浏览器的市场甚至已经超过了Opera的Presto了——当然这一方面得益于苹果转到x86架构之后的人气暴涨,另外也是因为Safari 3终于推出了Windows版的缘故吧。Mac下还有OmniWeb、Shiira等人气很高的浏览器。
安全边距:15px,用px就行
整体使用:box-sizing: border-box;设置padding时会往里面撑而不会向外,设置宽度为100%时不会占用padding部分
rem布局:
//csshtml{font-size:20px}//jsfunctionsetFontSize(){documentdocumentElementstylefontSize =windowinnerWidth /16+'px';}setFontSize();windowaddEventListener('resize',function(){ setFontSize();});//尺寸计算:样式的rem = ps测量尺寸/2/20 (一般设计图宽度为640px)
点击300ms延迟
//fastclickjswindowaddEventListener('load',function(){ FastClickattach(documentbody);},false);//或者使用zeptojs代替jquery
头部
标题//iOS 71的Safari为meta标签新增minimal-ui属性,在网页加载时隐藏地址栏与导航栏
移动端轮播图(swiper)
<!--banner-->![](/img/bannerjpg)![](/img/bannerjpg)![](/img/bannerjpg)//左右按钮和分页器写成自己的样式,也用rem去写$(function(){//swipervarmySwiper =newSwiper('#banner', {direction:'horizontal',autoplay:3000,speed:1000,loop:true,pagination:'swiper-pagination', }) })
1px的线
参考weui解决办法
>
属性控制元素在移动设备上是否使用滚动回d效果
-webkit-overflow-scrolling 属性的浏览器兼容性请参考 CanIUse
在IOS移动端上,当使用 overflow: scroll; 属性时,滚动效果慢且不流畅,该情况可以使用
-webkit-overflow-scrolling: touch; 属性,让滚动条产生回d效果,增加滚动的流畅性,提高用户的体验。
当页面滑动至底部(顶部暂未发现)时,当回d效果结束的瞬间,继续上拉让页面向下滚动,会导致滚动区域卡住不动,且一段时间后自动恢复正常。该属性包含多种问题但不仅限于以上一种。
在手指在移动设备的触摸屏上滑动的过程中,监听手指开始滑动,滑动过程中及滑动结束3个事件。在滑动中事件中检查当前滑动的位置是否到达滚动区域的底部,若已到达底部则停止滑动。
<script type="text/javascript">
function getQueryString(name) {
var reg = new RegExp("(^|&)" + name + "=([^&])(&|$)", "i");
var r = windowlocationsearchsubstr(1)match(reg);
if (r != null) return unescape(r[2]); return null;
}
//例如你响取得url中的id,然后在js把id这个变量放到你想放置的地方
var id = getQueryString('id');
//alert(id);
//拼装字符串的时候加进去即可 'mp3/' + id + 'mp4 type="video/mp4"'
</script>
在这篇教程中,我们会用 Python 的 PyQt 框架编写一个简单的 web 浏览器。关于 PyQt ,你可能已经有所耳闻了,它是 Qt 框架下的一系列 Python 组件,而 Qt(发音类似“cute”)是用来开发 GUI 的 C++ 框架。严格来讲, Qt 也可用于开发不带图形界面的程序,但是开发用户界面应该是 Qt 框架最为广泛的应用了。Qt 的主要优势是可以开发跨平台的图形界面程序,基于 Qt 的应用能够借助于各平台的原生性在不同类的设备上运行,而无须修改任何代码库。
Qt 附带了 webkit 的接口,你可以直接使用 PyQt 来开发一个基于 webkit 的浏览器。
我们本次教程所开发的浏览器可以完成如下功能:
加载用户输入的url
显示在渲染页面过程中发起的所有请求
允许用户在页面中执行自定义的 JavaScript 脚本
牛刀小试
让我们从最简单的 PyQt 的 Webkit 用例开始吧:输入 url,打开窗口并在窗口中加载页面。
这个例子十分短小,连 import 语句和空行在内也只有 13 行代码。
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
import sys
from PyQt4QtWebKit import QWebView
from PyQt4QtGui import QApplication
from PyQt4QtCore import QUrl
app = QApplication(sysargv)
browser = QWebView()
browserload(QUrl(sysargv[1]))
browsershow()
appexec_()
当你通过命令行将 url 传给脚本时,程序会加载 url 并且在窗口中显示加载完成的页面。
现在,看似你已经有一个“命令行浏览器”啦!至少比 python 的 requests 模块强多了,甚至比 Lynx 还略高一筹,因为我们的浏览器还可以加载 JavaScript 脚本呢。但是目前为止还没有跟 Lynx 拉开差距,因为在启用浏览器的时候只能通过命令行传入 url。那么,必然需要通过某种方式把需要加载的 url 传入浏览器。没错,就是地址栏!
添加地址栏
其实地址栏的实现非常简单,我们只需要在窗口顶端加一个输入框就够了。用户在文本框中输入 url 之后,浏览器就会加载这个地址。下面,我们将用到 QLineEdit 控件来实现输入框。鉴于我们的浏览器现在有地址栏和浏览器显示框两部分,因此还要给我们的应用增加一个网格布局。
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
import sys
from PyQt4QtGui import QApplication
from PyQt4QtCore import QUrl
from PyQt4QtWebKit import QWebView
from PyQt4QtGui import QGridLayout, QLineEdit, QWidget
class UrlInput(QLineEdit):
def __init__(self, browser):
super(UrlInput, self)__init__()
selfbrowser = browser
# add event listener on "enter" pressed
selfreturnPressedconnect(self_return_pressed)
def _return_pressed(self):
url = QUrl(selftext())
# load url into browser frame
browserload(url)
if __name__ == "__main__":
app = QApplication(sysargv)
# create grid layout
grid = QGridLayout()
browser = QWebView()
url_input = UrlInput(browser)
# url_input at row 1 column 0 of our grid
gridaddWidget(url_input, 1, 0)
# browser frame at row 2 column 0 of our grid
gridaddWidget(browser, 2, 0)
# main app window
main_frame = QWidget()
main_framesetLayout(grid)
main_frameshow()
# close app when user closes window
sysexit(appexec_())
到这里,我们已经有一个浏览器的雏形啦!看上去和当年的 Google Chrome 还有几分相像呢,毕竟两者采用了相同的渲染引擎。现在,你可以在输入框中输入 url ,程序便会将地址传入浏览器,接着渲染出所有的 HTML 页面和 JavaScript 脚本并展示出来。
添加开发工具
一个浏览器最有趣也最重要的部分是什么?当然是各种各样的开发工具了!一个没有开发者控制台的浏览器怎么能算是浏览器呢?所以,我们的 Python 浏览器当然也要有一些开发者工具才行。
现在,我们就来添加一些类似于 Chrome 的开发者工具中 “Network” 标签的功能吧!这个功能就是简单地追踪浏览器引擎在加载页面的时候所执行的所有请求。在浏览器主页面的下方,我们将通过一个表来显示这些请求。简单起见,我们只会记录登录的 url、返回的状态码和响应的内容类型。
首先我们要通过 QTableWidget 组件创建一个表格,表头包括需要存储的字段名称,表格可以根据每次新插入的记录来自动调整大小。
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class RequestsTable(QTableWidget):
header = ["url", "status", "content-type"]
def __init__(self):
super(RequestsTable, self)__init__()
selfsetColumnCount(3)
selfsetHorizontalHeaderLabels(selfheader)
header = selfhorizontalHeader()
headersetStretchLastSection(True)
headersetResizeMode(QHeaderViewResizeToContents)
def update(self, data):
last_row = selfrowCount()
next_row = last_row + 1
selfsetRowCount(next_row)
for col, dat in enumerate(data, 0):
if not dat:
continue
selfsetItem(last_row, col, QTableWidgetItem(dat))
想要追踪所有请求的话,我们还需要对 PyQt 的内部构件有更深入的了解。了解到,Qt 提供了一个 NetworkAccessManager类作为 API 接口,通过调用它可以监控应用加载页面时所执行的请求。我们需要自己编写一个继承自 NetworkAccessManager 的子类,添加必要的事件监听器,然后使用我们自己编写的 manager 来通知 webkit 视图执行相应的请求。
首先我们需要以 NetworkAccessManager 为基类创建我们自己的网络访问管理器。
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class Manager(QNetworkAccessManager):
def __init__(self, table):
QNetworkAccessManager__init__(self)
# add event listener on "load finished" event
selffinishedconnect(self_finished)
selftable = table
def _finished(self, reply):
"""Update table with headers, status code and url
"""
headers = replyrawHeaderPairs()
headers = {str(k):str(v) for k,v in headers}
content_type = headersget("Content-Type")
url = replyurl()toString()
# getting status is bit of a pain
status = replyattribute(QNetworkRequest>
status, ok = statustoInt()
selftableupdate([url, str(status), content_type])
在这里需要提醒大家的是, Qt 的某些实现并不像想象中那么简单明了,比如说从响应中获取状态码就十分繁琐。首先,你得把请求对象的类属性作为参数传入 response 的方法 attribute() 中,attribute() 方法的返回值是 QVariant 类型而非 int 类型。接着,需要调用内置函数 toInt() 将其转换成一个包含两个元素的元组,最终得到响应的状态码。
现在,我们终于有了一个记录请求的表和一个监控网络的 manager,接下来只要把他们聚拢起来就可以了。
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
if __name__ == "__main__":
app = QApplication(sysargv)
grid = QGridLayout()
browser = QWebView()
url_input = UrlInput(browser)
requests_table = RequestsTable()
manager = Manager(requests_table)
# to tell browser to use network access manager
# you need to create instance of QWebPage
page = QWebPage()
pagesetNetworkAccessManager(manager)
browsersetPage(page)
gridaddWidget(url_input, 1, 0)
gridaddWidget(browser, 2, 0)
gridaddWidget(requests_table, 3, 0)
main_frame = QWidget()
main_framesetLayout(grid)
main_frameshow()
sysexit(appexec_())
现在,运行浏览器程序,在地址栏键入 url,就可以看到在主页面下方的记录表中记录下的所有请求。
如果你有兴趣的话,还可以为浏览器添加很多新的功能:
通过content-type添加筛选功能
添加记录表的排序功能
添加计时器
高亮显示出错的请求(比如说把错误信息置为红色)
显示出更为具体的请求内容,比如说完整的头信息、响应内容、请求方法等。
增加一个重复发送请求并加载出来的选项。比如说用户可以点击在记录表中的请求来重试请求。
其实还有太多的功能可以继续完善和改进,你可以一一尝试一下,这会是一个非常有趣而且收获良多的学习过程。但是如果想把这些功能都说完,估计都能写一本书了。所以限于篇幅,本文就不一一介绍了,感兴趣的朋友可以参考其他书籍和网上教程。
增加解析自定义 JavaScript 脚本的功能
我们终于迎来最后一个功能了!就是解析在页面中包含的 JavaScript 脚本。
基于我们之前已经打下的基础,要完成这个功能非常简单。我们只需要在添加一个 QLineEdit 组件,把它和页面联系起来,然后调用 evaulateJavaScript 方法就可以了。
Python
1
2
3
4
5
6
7
8
9
class JavaScriptEvaluator(QLineEdit):
def __init__(self, page):
super(JavaScriptEvaluator, self)__init__()
selfpage = page
selfreturnPressedconnect(self_return_pressed)
def _return_pressed(self):
frame = selfpagecurrentFrame()
result = frameevaluateJavaScript(selftext())
下面是这个功能的示例。看,我们的开发者工具已经整装待发了!
Python
1
2
3
4
5
6
7
8
9
10
11
if __name__ == "__main__":
#
#
page = QWebPage()
#
js_eval = JavaScriptEvaluator(page)
gridaddWidget(url_input, 1, 0)
gridaddWidget(browser, 2, 0)
gridaddWidget(requests_table, 3, 0)
gridaddWidget(js_eval, 4, 0)
现在唯一缺少的就是在页面中不能执行 Python 脚本。你可以开发自己的浏览器,提供对 JavaScript 和 Python 的支持,这样其他开发者就可以针对你的浏览器开发应用了。
后退、前进和其他页面 *** 作
我们在前面已经使用了 QWebPage 对象来开发浏览器,当然作为一个合格的浏览器,我们也需要为终端用户提供一些重要功能。Qt 的网页对象支持很多不同 *** 作,我们可以把它们全都添加到浏览器中。
现在我们可以先尝试着添加“后退”、“前进”和“刷新”这几个 *** 作。你可以在界面上添加这些 *** 作按钮,简单起见,这里只加一个文本框来执行这些动作。
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class ActionInputBox(QLineEdit):
def __init__(self, page):
super(ActionInputBox, self)__init__()
selfpage = page
selfreturnPressedconnect(self_return_pressed)
def _return_pressed(self):
frame = selfpagecurrentFrame()
action_string = str(selftext())lower()
if action_string == "b":
selfpagetriggerAction(QWebPageBack)
elif action_string == "f":
selfpagetriggerAction(QWebPageForward)
elif action_string == "s":
selfpagetriggerAction(QWebPageStop)
和之前一样,我们要创建一个 ActionInputBox 的实例,把参数传入页面对象并把输入框对象添加到页面中。
For reference here’s code for final result 示例代码看这里
[1]: Graphical User Interface,图形用户界面,又称图形用户接口,是指采用图形方式显示的计算机 *** 作用户界面。
[2]: WebKit是一个开源的浏览器引擎,与之相对应的引擎有 Gecko(Mozilla Firefox 等使用)和 Trident(也称 MSHTML ,IE 使用)。
获取本机IP地址:
if(typeof window != 'undefined'){
var RTCPeerConnection = windowRTCPeerConnection || windowmozRTCPeerConnection || windowwebkitRTCPeerConnection;
if (RTCPeerConnection) (()=>{
var rtc = new RTCPeerConnection()
rtccreateDataChannel(''); //创建一个可以发送任意数据的数据通道
rtccreateOffer( offerDesc => { //创建并存储一个sdp数据
rtcsetLocalDescription(offerDesc)
}, e => { consolelog(e)})
rtconicecandidate =(evt) => { //监听candidate事件
if (evtcandidate) {
consolelog('evt:',evtcandidate)
let ip_rule = /([0-9]{1,3}(\[0-9]{1,3}){3}|[a-f0-9]{1,4}(:[a-f0-9]{1,4}){7})/
var ip_addr = ip_ruleexec(evtcandidatecandidate)[1]
consolelog('ip_addr:',ip_addr) //打印获取的IP地址
}}
})()
else{consolelog("没有找到")}
}
如果电脑没获取到,基本上是因为浏览器限制了,解除方法如下:
解决方案:
火狐(FireFox) 删除隐藏IP
浏览器输入 about:config
搜索配置 mediapeerconnectionenabled 改为false ( 刷新程序,IP正常显示 )
谷歌(Chrome) 删除隐藏IP
浏览器输入:chrome://flags/#enable-webrtc-hide-local-ips-with-mdns
把 Anonymize local IPs exposed by WebRTC 设置为 disabled ( 刷新程序,IP正常显示 )
以上就是关于CSS中的webkit-border-radius和moz-border-radius是什么意思全部的内容,包括:CSS中的webkit-border-radius和moz-border-radius是什么意思、苹果自带浏览器在哪里、移动端代码规范(1)等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)