




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、GeoServer 是 OpenGIS Web 服务器规范的 J2EE 实现的社区开源项目,利用 GeoServer 可以方便的发布地图数据,允许用户对特征数据进行更新、删除、插入操作,通过 GeoServer 可以比较容易的在用户之间迅速共享空间地理信息。本系列博文提供全面、完善的GeoServer部署解决方案,包括GeoServer环境搭建、地图数据处理、部署地图数据、发布地图服务等功能的详细介绍。文中内容来自本人工作中通过网络学习后总结而成,如有类同纯属巧合,同时欢迎广大网友前来交流。 HYPERLINK /beniao/archive/2011/01/11/1931028.html G
2、eoServer地图开发解决方案(一):环境搭建篇搭建GeoServer环境需要安装GeoServer、Java JDK 1.5/1.6、Tomcat 5.0/6.0(老版本的GeoServer需要Tomcat的支持,最新版本的GeoServer 2.0.2版已经内置了HTTP服务器)。一、下载、安装Tomcat、Java JDK1.5/1.6Tomcat和Java jdk都可以通过其官方网站下载到,详细请查看本文末的资源表。如本人电脑中就是将JDK安装在D盘下的,详细如下图:如果是使用最新版本的GeoServer 2.0.2版本的就不需要安装Tomcat,GeoServer 2.0.2已经内
3、置了HTTP服务器。二、下载、安装GeoServerGeoServer 是 OpenGIS Web 服务器规范的 J2EE 实现,利用 GeoServer 可以方便的发布地图数据,允许用户对特征数据进行更新、删除、插入操作,通过 GeoServer 可以比较容易的在用户之间迅速共享空间地理信息。GeoServer是社区开源项目,可以直接通过社区网站下载,详细请查看本文档末的资源表。GeoServer兼容 WMS 和 WFS 特性;支持 PostGIS 、 Shapefile 、 ArcSDE 、 Oracle 、 VPF 、 MySQL 、 MapInfo ;支持上百种投影;能够将网络地图输出
4、为 jpeg 、 gif 、 png 、 SVG 、 KML 等格式;能够运行在任何基于 J2EE/Servlet 容器之上;嵌入 MapBuilder 支持 AJAX 的地图客户端OpenLayers;除此之外还包括许多其他的特性。关于GeoServer更多信息可以访问百度百科了解: HYPERLINK /view/871332.htm /view/871332.htm或官网了解: HYPERLINK /display/GEOS/Welcome /display/GEOS/Welcome。安装GeoServer非常简单,由于GeoServer是Java编写的开源项目,故GeoServer的运
5、行需要有Java JDK的支持,也就是上面一步所安装Java JDK,在安装GeoServer的同时就必须提供Java JDK的jre才能完成GeoServer的安装。使用GeoServer来部署发布shp格式地图数据为WMS服务,需要将shp 格式地图文件复制到GeoServer指定的地图数据目录下面,在最新版的GeoServer安装中就可以指定地图数据的存放目录,其默认放置在GeoServer的安装目录下。GeoServer安装的时候提供默认的用户名(admini)和密码(geoserver),以及GeoServer管理系统的访问端口号(8080)。三、下载、安装uDiguDig是一款开源
6、桌面GIS软件,基于Java和Eclipse平台,可以进行shp格式地图文件的编辑和查看。其下载地址: HYPERLINK /files/downloads/udig-1.2.0.exe /files/downloads/udig-1.2.0.exe到此为止,基于GeoServer的地图部署环境基本搭建完成,下一篇我将详细介绍如何基于uDig进行地图数据查看、编辑以及地图样式导出等功能。GeoServer地图开发解决方案(二):地图数据处理篇由于GeoServer只支持发布ArcGIS格式的地图数据,既.shp格式的地图数据正确吗?。如果是别的厂商提供的地图数据则需要进行一次地图数据格式转化。
7、本篇主要介绍如何查看、编辑地图数据的应用。一、地图数据转为shp数据格式由于GeoServer只支持发布ArcGIS格式的地图数据,既.shp格式的地图数据。在使用GeoServer部署地图数据之前则需要针对不同地图厂商提供的地图数据进行数据格式转化。比如说将MapInfo地图数据转为ArcGIS的shp格式地图数据,需要使用MapInfo提供的工具进行装换。操作非常简单,这里不做详细介绍。二、使用uDig编辑SHP格式数据首先使用uDig打开shp格式地图文件,支持同时打开多个shp格式地图数据文件。打开单个地图数据文件则以地图数据文件的地图风格呈现出来,如果是打开多个地图数据文件则是以按照
8、地理坐标确定图层位置的图层重叠呈现。在打开的shp格式地图数据文件后,通过uDig的图层面板就可以查看当所选择的shp地图数据文件中所包含的地图图层信息,当选中某个图层后就可以通过Table面板查看到该图层所对应的一些详细数据信息。如下图所示:通过uDig工具可以对地图数据进行查看,编辑,是地图数据部署中对地图数据进行纠错处理不可缺少的一个工具,很给力的一个工具。三、从uDig导出SHP格式数据样式uDig提供了非常强大的地图数据编辑功能,实际上应用最多的就是使用uDig编辑shp格式的地图数据,从中提起样式文件。目的其实很简单就是为了修改编码,通常默认的文字编码发布出的WMS服务呈现出来的地
9、图标签中文是乱码。通过图层的“Change Style”功能选项就可以进入图层的样式编辑器。通过可视化编辑器将修改后的样式导出为样式文件(.sld),在发布地图数据的时候就可以使用编辑后的样式到对应的地图图层,从而解决中文标签乱码问题。到此为止,基于uDig进行地图数据编辑处理介绍完毕,当然本文只是简单的介绍,希望可以通过本文抛砖引玉,期待关于uDig的更多精彩文章出现。下一篇我将介绍如何使用GeoServer进行地图数据部署相关的知识点。GeoServer地图开发解决方案(三):部署地图数据篇本篇文章正式介绍基于GeoServer的地图数据部署实现,前提条件为成功搭建有GeoServer环境
10、。实际上基于GeoServer部署shp格式的地图数据非常简单,对于GeoServer对于的磁盘物理层主要就是一个地图数据目录的概念,对于GeoServer应用系统来说则有三大重要知识点,分别为:工作空间(workspace)、存储器(store)和地图图层(layer),这些概念的详细都将在本文中逐一的介绍。一、GeoServer地图数据目录(Data Directory)所谓地图数据目录既地图数据的存放目录,在 HYPERLINK /beniao/archive/2011/01/08/1930822.html GeoServer地图数据部署解决方案(一):环境搭建篇中介绍环境搭建的时候就提
11、到过地图数据目录这个概念,安装GeoServer的时候就已经指定了地图数据目录的位置。部署地图数据非常简单,首先需要将地图数据文件(shp地图数据文件)复制到GeoServer的数据目录(安装GeoServer的时候所指定的地图数据目录)下面,因为只有将地图数据放到此目录下,GeoServer后台才能发现shp的地图数据文件(建议使用英文命名地图数据文件)。需要部署的地图数据必须放置在上面GeoServer提供的地图数据目录之下,如下图示就是将待部署发布的shp格式地图数据放在在GeoServer地图数据目录下名为“t_shapes”的目录中的。这里的“t_shapes”需要特别注意,在使用G
12、eoServer进行地图数据部署发布的时候(创建存储器)需要使用到此名字(t_shapes)。最新版(版本号:2.0.2)的GeoServer全面改善了shp格式地图数据的发布,并增加了OpenLayers方式的地图数据发布预览功能,以及将地图数据导出KML或GML等格式数据。下面将详细介绍这些功能点。二、工作空间(workspace)最新版的GeoServer里面修改了老版本的“目录”为“工作空间”,工作空间存放着多个数据存储器。成功登陆GeoServer管理系统后就可以从左边的功能导航处看到“工作空间”选项。工作空间管理平台详细如下图所示:要发布地图数据为WMS服务,首先得建立工作空间(也
13、可以使用现有的工作空间),然后建立数据存储器,最后在存储器里面发布地图数据。要想创建工作空间可以直接通过管理平台界面的“Add new workspace”进入工作空间创建界面,如下图所示:编辑工作空间和创建工作空间一样,非常的简单,可以直接从工作空间管理列表界面进入工作空间编辑界面。三、存储器(store)基于工作空间之上的存储器,维护着和地图数据目录的映射关系。可以直接通过GeoServer左边的功能导航进入存储器管理界面,如下图所示:如上图所示,在存储器管理界面中点击“Add new Store”就可以导航到创建存储器界面,可以完成存储器到地图数据目录的映射,为后面发布地图图层做准备。如
14、下图所示:通常我们使用的是“Directory of Spatial files”,也就是以目录为单位进行shp格式地图数据的部署。下图为添加存储器的界面:按照GeoServer的约定一个数据存储器可以部署一个独立的shp格式地图数据文件,也可以部署一个目录的shp格式地图数据格式。需要特别注意就是“URL”,这里指向的就是存放需要部署的地图数据的目录,此地址的格式为:“file:” + “GeoServer的地图数据目录”,比如说地图数据放在C:Program FilesGeoServer 2.0.2data_dirdatat_shapes 下,那么在建立存储器的时候的URL应该为file:
15、data/t_shapes 。最终的配置如下图所示:四、地图图层(layer)地图图层主要就是管理部署在GeoServer里面的地图数据中的图层元素,通过地图图层管理列表可以非常清楚的看到地图图层的类型、所属工作空间、所属存储器、图层名称以及采用的SRS标准等相关信息。通过图层管理界面的“Add a new resource”可以进入图层类型(工作空间:存储器)选择界面,详细如下图:地图数据存储器管理维护着与地图数据目录对应的地图图层数据,选择了对应的图层存储器类型,就会列表处该图层类型下面的所有图层元素,如下列表所示:使用图层列表管理维护着地图数据图层的发布,上图所示成功发布地图数据图层为地
16、图服务的前面有“V”标记,如果要修改已发布的地图图层可以使用再次发布功能完成。本篇就介绍到这里,希望可以通过本文抛砖引玉,期待关于GeoServer地图数据部署更加精彩的文章。下一篇将详细介绍如何发布地图图层、应用地图样式以及通过Openlayers的方式预览地图数据。GeoServer地图开发解决方案(四):发布Web地图服务(WMS)篇一、发布地图图层在上一篇 HYPERLINK /beniao/archive/2011/01/10/1930995.html GeoServer地图开发解决方案(三):部署地图数据篇中大家都看到基于工作空间的数据存储器管理的地图图层,还提到可在图层列表中发布
17、地图图层为WMS服务,对于已经发布过的地图数据还可以进行修改发布。从上图上可以看到每个图层有“Published”属性,表示当前图层是否发布,其后还有操作连接“Publish again”或“Publish”,表示对以及发布的图层进行再次发布,或者对没有发布的图层进行发布。要发布地图图层可以在图层列表中点击“Publish”进入图层发布界面,这里需要注意的就是在进行图层发布的时候有几个必填的参数,分别为Declared SRS、Bounding Boxes等。Declared SRS表示当前发布的地图图层将采用何种地理空间引用标准,这里通常都是使用的EPSG:4326标准;Bounding B
18、oxes表示当前图层的经度、纬度范围,这两项值可以直接通过GeoServer提供的工具自动获取到。详细如下图所示:二、发布地图样式之所以要应用样式,主要是解决中文编码的问题以及某些地图数据需要做特别的处理,通常可以修改样式文件实现,这里大多数的图层使用默认的样式基本不会有问题,某些图层使用默认的样式却不能正确的发布为WMS服务,就需要使用前面所介绍的通过uDig对地图数据的样式进行编辑并导出样式文件(.sld),然后再GeoServer中发布新的样式,并在图层发布或者是编辑图层的时候就使用自己发布的样式。通过样式列表界面的“Add a new style”就可进入下面的样式发布界面。如下图所示
19、:三、应用地图样式应用地图样式非常简单,在添加地图图层或者编辑地图图层的时候,通过“Default style”功能选项进行地图图层的样式设置。详细如下图所示:四、预览地图图层通过GeoServer管理台左边功能导航“Layer Preview”可进入图层阅览列表,在此列表中部分类型地图图层还提供导出为KML和GML格式的地图数据。从上图所示中点击图层所对应的“OpenLayers”就可以打开所对应地图图层的预览界面,上图图层列表的地图图层是为了测试而部署的,比如需要查看重庆大区界地图图层,那么可以直接预览大区边界地图图层就可以了,也就是上图中的名为“cq:dqjx_polyline”的图层。
20、如上面预览地图图层,实际上就是加载了单个地图图层,其对应的URL地址如下表格所示:WMS服务的单个地图图层加载分析表 HYPERLINK http:/localhost:8080/geoserver/wms?service=WMS&version=1.1.0&request=GetMap&layers=cq:dqjx_polyline&styles=&bbox=105.286,28.163,110.194,32.203 http:/localhost:8080/geoserver/wms?service=WMS&version=1.1.0&request=GetMap&layers=cq:dq
21、jx_polyline&styles=&bbox=105.286,28.163,110.194,32.203&width=512&height=421&srs=EPSG:4326&format=application/openlayers参数名参数值参数说明serviceWMS表示该服务为WMS服务Version1.0.1WMS服务版本requestGetMapWMS服务请求接口类型,GetMap表示请求地图数据layerscq:dqjx_polylineWMS所请求的地图图层Styles图层样式bbox105.286,28.163,110.194,32.203请求的地图图层范围width51
22、2宽度height512高度srsEPSG:4326地理空间引用标准formatapplication/openlayers地图响应格式(openlayers)五、多图层叠加呈现在访问WMS服务的时候通常都是将多个地图图层进行叠加组合,才能完成一个相对完整的地图界面呈现。在访问WMS服务的时候图层叠加非常简单,就是在WMS请求地址的layers参数后面用逗号(“,”)将多个图层进行分割就可以了。下面的WMS服务请求地址就叠加了3个地图图层: HYPERLINK http:/localhost:8080/geoserver/wms?service=WMS&version=1.1.0&reques
23、t=GetMap&layers=cq:dqjx_polyline,cq:cszgddx_polyline,cq:cszgd_polyline http:/localhost:8080/geoserver/wms?service=WMS&version=1.1.0&request=GetMap&layers=cq:dqjx_polyline,cq:cszgddx_polyline,cq:cszgd_polyline&styles=&bbox=105.286,28.163,110.194,32.203&width=512&height=421&srs=EPSG:4326&format=applic
24、ation/openlayerslayers=cq:dqjx_polyline,cq:cszgddx_polyline,cq:cszgd_polyline,表示此WMS服务请求是由三个地图图层叠加组合而成的。最终的预览效果如下图:本篇就介绍到这里,希望可以通过本文抛砖引玉,期待关于GeoServer地图数据部署更加精彩的文章。下一篇将详细介绍如何通过Silverlight技术实现Web地图客户端。GeoServer地图开发解决方案(五):基于Silverlight技术的地图客户端实现 我曾经写作过一篇关于微软Bing Maps的客户端实现的博文: HYPERLINK /beniao/archi
25、ve/2010/05/21/1740480.html 基于DeepZoom技术的Bing Maps客户端实现研究,详细介绍了如何使用Silverlight中的DeepZoom技术实现Bing Maps的客户端。本篇介绍的内容则为基于Web地图服务(Web Map Service,简称:WMS)的Silverlight地图客户端实现。一、DeepZoom简介 HYPERLINK /beniao/archive/2011/01/09/1930932.html DeepZoom技术以MultiScaleImage控件为核心,其内部有一个MultiScaleTileSource类型的源属性,主要用于设
26、置MultiScaleImage控件所要呈现的数据源。基于Silverlight的Web GIS客户端实现也是通MultiScaleImage控件来实现,核心就在于通过MultiScaleTileSource属性针对不同的Web GIS地图瓦片数据(Image Tiles)提供商为MultiScaleImage控件实现一个数据源。因此本篇所需要做的工作就是针对WMS服务为MultiScaleImage控件实现一套加载数据源的算法。二、WMS服务加载实现实现WMS服务加载的算法其实非常简单,只需要了解WMS发布的方式、WMS地址的参数组成结构以及地图瓦片的投影原理就可以了,首先需要定义一个盒子对
27、象作为访问WMS的边界参数对象。publicclassBBoxpublicintXget;set;publicintYget;set;publicintWidthget;set;publicintHeightget;set;publicBBox(intx,inty,intw,inth)this.X=x;this.Y=y;this.Width=w;this.Height=h;关于WMS服务加载的详细算法需要一些GIS理论基础才能够知道具体的实现原理,这里我就不逐一介绍,直接贴代码:publicclassWMSTileSource:MultiScaleTileSourcepublicWMSTile
28、Source():base(int.MaxValue,int.MaxValue,0 x100,0 x100,0)publicconstintTILE_SIZE=256;/地球半径/publicconstdoubleEARTH_RADIUS=6378137;/地球周长/publicconstdoubleEARTH_CIRCUMFERENCE=EARTH_RADIUS*2*Math.PI;publicconstdoubleHALF_EARTH_CIRCUMFERENCE=EARTH_CIRCUMFERENCE/2;/WMS服务地址/privateconststringTilePath=http:/
29、localhost:8080/geoserver/wms?service=WMS&version=1.1.0&request=GetMap&layers=cq:CQ_County_region,cq:CQ_County_region_level&styles=&bbox=0,1,2,3&width=512&height=421&srs=EPSG:4326&Format=image/png;publicstringGetQuadKey(stringurl)varregex=newRegex(.*tiles/(.+).*);Matchmatch=regex.Match(url);returnmat
30、ch.Groups1.ToString();publicBBoxQuadKeyToBBox(stringquadKey,intx,inty,intzoomLevel)charc=quadKey0;inttileSize=21)returnQuadKeyToBBox(quadKey.Substring(1),x,y,zoomLevel+1);returnnewBBox(x,y,tileSize,tileSize);publicBBoxQuadKeyToBBox(stringquadKey)constintx=0;constinty=262144;returnQuadKeyToBBox(quadK
31、ey,x,y,1);publicdoubleXToLongitudeAtZoom(intx,intzoom)doublearc=EARTH_CIRCUMFERENCE/(1zoom)*TILE_SIZE);doublemetersX=(x*arc)-HALF_EARTH_CIRCUMFERENCE;doubleresult=RadToDeg(metersX/EARTH_RADIUS);returnresult;publicdoubleYToLatitudeAtZoom(inty,intzoom)doublearc=EARTH_CIRCUMFERENCE/(10;i-)chardigit=0;i
32、ntmask=1(i-1);if(tileX&mask)!=0)digit+;if(tileY&mask)!=0)digit+;digit+;quadKey.Append(digit);returnquadKey.ToString();protectedoverridevoidGetTileLayers(inttileLevel,inttilePositionX,inttilePositionY,System.Collections.Generic.IListtileImageLayerSources)intzoom=tileLevel-8;if(zoom0)stringquadKey=Til
33、eXYToQuadKey(tilePositionX,tilePositionY,zoom);BBoxboundingBox=QuadKeyToBBox(quadKey);doublelon=XToLongitudeAtZoom(boundingBox.X*TILE_SIZE,18);doublelat=YToLatitudeAtZoom(boundingBox.Y*TILE_SIZE,18);doublelon2=XToLongitudeAtZoom(boundingBox.X+boundingBox.Width)*TILE_SIZE,18);doublelat2=YToLatitudeAt
34、Zoom(boundingBox.Y-boundingBox.Height)*TILE_SIZE,18);stringwmsUrl=string.Format(TilePath,lon,lat,lon2,lat2,TILE_SIZE);varveUri=newUri(wmsUrl);tileImageLayerSources.Add(veUri);前端通过一个按钮事件驱动触发加载WMS服务,按钮的XAML代码如下:示例我就直接基于 HYPERLINK /beniao/archive/2010/05/21/1740480.html 基于DeepZoom技术的Bing Maps客户端实现研究一文中
35、的示例扩展,对应的后台代码为如下代码块:privatevoidbtnWms_Click(objectsender,RoutedEventArgse)msi.Source=newWMSTileSource();附录资料:web前端面试题1. W3C标准有哪些?W3C推行的主要规范有HTML,CSS,XML,XHTML和DOM(Document Object Model)。2. 谈谈Js的内存泄露问题。3. 谈谈对Html 5的了解。4. 谈谈对CSS 3的了解。5. 用js实现随即选取10-100之间的10个数字,存入一个数组,并排序。var iArray = ;funtion getRando
36、m(istart, iend) var iChoice = istart - iend +1; return Math.floor(Math.random() * iChoice + istart;for(var i=0; i10; i+) iArray.push(getRandom(10,100);iArray.sort();6. 把两个数组合并,并删除第二个元素。var array1 = a,b,c;var bArray = d,e,f;var cArray = array1.concat(bArray);cArray.splice(1,1);7. Js面向对象的几种方式。8. 请谈谈原型
37、方式构造对象的特点。9. 在Css中那个属性会影响dom读取文档流的顺序。答: float属性。10. 请介绍几种用div实现两列布局的方案(兼容),另外要考虑文档流的加载。11. 谈谈css在浏览器中的兼容问题,详细谈谈IE6的一些bug,以及解决方案。12. 谈谈你对闭包的理解。以及如何实现js方法的重写。HTML & CSS1.Doctype? 严格模式与混杂模式-如何触发这两种模式,区分它们有何意义? 首先我讲讲如何触发两种模式: 加入xml头部声明可以触发IE浏览器的Quirks mode,触发之后,浏览器解析方式就和IE5.5一样,拥有IE5.5一样的bug和其他问题,行为(Jav
38、ascript)也是如此。 IE6的触发 在XHTML的DOCTYPE前加入XML声明 IE7的触发 在XML声明和XHTML的DOCTYPE之间加入HTML注释 IE6和IE7都可以触发的 在HTML4.01的DOCTYPE文档头部加入HTML注释 其次是这样的意义 各个浏览器的混杂模式,基本就是各个浏览器的私有模式,不相互兼容。所以,除非是为了兼容的问题,比如你不想修改很久很久以前做的IE ONLY的网页,否则刻意触发混杂模式没有任何意义。2:行内元素有哪些?块级元素有哪些?CSS的盒模型?一.行内元素和块级元素有哪些?块级元素information on authorlong quota
39、tionpush buttontable captiondefinition descriptiondeleted textgeneric language/style containerdefinition listdefinition termform control groupinteractive formheadingheadingheadingheadingheadingheadinghorizontal ruleinline subwindowinserted textfieldset legendlist itemclient-side image mapalternate c
40、ontent container for non frame-based renderingalternate content container for non script-based renderinggeneric embedded objectordered listparagraphpreformatted texttabletable bodytable data celltable footertable header celltable headertable rowunordered list行内元素anchorabbreviated formacronymbold tex
41、t styleI18N BiDi over-ridelarge text styleforced line breakpush buttoncitationcomputer code fragmentdeleted textinstance definitionemphasisitalic text styleinline subwindowEmbedded imageform controlinserted texttext to be entered by the userform field label textclient-side image mapgeneric embedded
42、objectshort inline quotationsample program output, scripts, etc.option selectorsmall text stylegeneric language/style containerstrong emphasissubscriptsuperscriptmulti-line text fieldteletype or monospaced text styleinstance of a variable or program argument二.行内元素与块级元素有什么不同?1.尺寸-块级元素和行内元素之间的一个重要的不同点
43、行内元素和widthW3C CSS2 标准规定行内元素、非置换元素不会应用width属性。以下例子中,对行内元素应用了width:200px,你可以看到,根本就没有什么效果。行内元素和heightW3C CSS2 标准规定行内元素、非置换元素不会应用height属性,但是盒子高度可以通过line-height来指定。以下例子,对行内元素应用了height:50px,你可以看到什么效果都没。行内元素和padding你可以给行内元素设置padding,但只有padding-left和padding-right生效。以下例子,行内元素应用了padding:50px。你可以看到对左右的内容有影响,但是
44、对上下没影响。行内元素和margingmargin属性也是和padding属性一样,对行内元素左右有效,上下无效。下面的例子,对应用了margin:50px,你可以看到左右边缘是生效了但是内容上下却没有。记住对行内元素设置宽度width 无效。设置高度height 无效,可以通过line-height来设置。设置margin 只有左右margin有效,上下无效。设置padding 只有左右padding有效,上下则无效。注意元素范围是增大了,但是对元素周围的内容是没影响的,看图上效果就知道了 盒子模型W3C 组织建议把所有网页上的对像都放在一个盒(box)中,设计师可以通过创建定义来控制这个盒
45、的属性,这些对像包括段落、列表、标题、图片以及层。盒模型主 要定义四个区域:内容(content)、边框距(padding)、边界(border)和边距(margin)。对于初学者,经常会搞不清楚 margin,background-color,background- image,padding,content,border之间的层次、关系和相互影响。这里提供一张盒模型的3D示意图,希望便于你的理解和记忆。每个HTML元素都可以看作一个装了东西的盒子,盒子里面的内容到盒子的边框之间的距离即填充(padding),盒子本身有边框(border),而盒子边框外和其他盒子之间,还有边界(margin
46、)。盒模型的实际宽度关于盒模型,还有以下几点需要注意:对于块级元素(display:block),未浮动的垂直相邻元素的上边界和下边界会被压缩,例如:有上下2个元素,上元素的下边界为5px,下面元素的上边界为20px,则实际2个元素的间距为20px(2个边界值中较大的值)。如图所示。注1. 块级元素(display: block)每个块级元素都从一个新行开始,而且其后的元素也需另起一行开始,标题、段落、表格、层、body等都是块级元素。块级元素只能作为其他块级元素的子元素,而且需要一定的条件。内联元素,例如、等,定义上下边界不会影响到行高(line-height),内联元素距离上一行元素的距离
47、由行高决定,而不是填充或边界。注2. 内联元素(display:inline)内联元素不需要在新行内显示,而且也不强迫其后的元素换行,如a、em、span等都为内联元素。内联元素可以为任何其他元素的子元素。浮动元素(无论左或者右浮动)边界不压缩,且若浮动元素不声明宽度,则其宽度趋向于0,即压缩到其内容能承受的最小宽度。如果盒中没有内容,则即使定义了宽度和高度都为100%,实际上只占0%,因此不会被显示,此点在采取层布局的时候需特别注意。边界值可为负,其显示效果各浏览器可能不相同。填充值不可为负。边框默认的样式(border-style)为不显示(none)。3.CSS引入的方式有哪些? lin
48、k和import的区别是?本质上,这两种方式都是为了加载CSS文件,但还是存在着细微的差别。差别1:老祖宗的差别。link属于XHTML标签,而import完全是CSS提供的一种方式。 HYPERLINK /xhtml/tag_link/ link标签除了可以加载CSS外,还可以做很多其它的事情,比如定义RSS,定义 HYPERLINK /xhtml/attribute_rel/ rel连接属性等,import就只能加载CSS了。差别2:加载顺序的差别。当一个页面被加载的时候(就是被浏览者浏览的时候),link引用的CSS会同时被加载,而import引用的CSS会等到页面全部被下载完再被加载。
49、所以有时候浏览import加载CSS的页面时开始会没有样式(就是闪烁),网速慢的时候还挺明显(梦之都加载CSS的方式就是使用import,我一边下载一边浏览梦之都网页时,就会出现上述问题)。差别3:兼容性的差别。由于 HYPERLINK /TR/CSS21/cascade.html l at-imp%3Cwbr%3Eort import是CSS2.1提出的所以老的浏览器不支持,import只有在IE5以上的才能识别,而link标签无此问题。差别4:使用dom控制样式时的差别。当使用javascript控制dom去改变样式的时候,只能使用link标签,因为import不是dom可以控制的。大致就
50、这几种差别了(如果还有什么差别,大家告诉我,我再补充上去),其它的都一样,从上面的分析来看,还是使用link标签比较好。标准网页制作加载CSS文件时,还应该选定要加载的媒体(media),比如screen,print,或者全部all等。这个我到CSS高级教程中再给大家介绍。注:1,网友comehope在留言中提出了另一种区别。差别5:import可以在css中再次引入其他样式表,比如可以创建一个主样式表,在主样式表中再引入其他的样式表,如:main.css-import “sub1.css”;import “sub2.css”;sub1.css-p color:red;sub2.css-.my
51、class color:blue这样更利于修改和扩展猴 子提示:这样做有一个缺点,会对网站服务器产生过多的HTTP请求,以前是一个文件,而现在却是两个或更多文件了,服务器的压力增大,浏览量大的网站还是 谨慎使用。有兴趣的可以观察一下像新浪等网站的首页或栏目首页代码,他们总会把css或js直接写在html里,而不用外部文件。4.CSS选择符有哪些?哪些属性可以继承?优先级算法如何计算?内联和important哪个优先级高?5:前端页面有哪三层构成,分别是什么?作用是什么?最准确的网页设计思路是把网页分成三个层次,即:结构层、表示层、行为层。网页的结构层(structural layer)由 HT
52、ML 或 XHTML 之类的标记语言负责创建。标签,也就是那些出现在尖括号里的单词,对网页内容的语义含义做出了描述,但这些标签不包含任何关于如何显示有关内容的信息。例如,P 标签表达了这样一种语义:“这是一个文本段。”网页的表示层(presentation layer) 由 CSS 负责创建。 CSS 对“如何显示有关内容”的问题做出了回答。网页的行为层(behavior layer)负责回答“内容应该如何对事件做出反应”这一问题。这是 Javascript 语言和 DOM 主宰的领域。8:你做的页面在哪些流览器测试过?这些浏览器的内核分别是什么?经常遇到的浏览器的兼容性有哪些?怎么会出现?解
53、决方法是什么?点评:css的兼容性也是大家关注的热点。大家一定要注意多测试。Javascript 多浏览器兼容性问题及解决方案兼容性处理要点 1、DOCTYPE 影响 CSS 处理 2、FF: 设置 padding 后, div 会增加 height 和 width, 但 IE 不会, 故需要用 !important 多设一个 height 和 width 3、FF: 支持 !important, IE 则忽略, 可用 !important 为 FF 特别设置样式 4、div 的垂直居中问题: vertical-align:middle; 将行距增加到和整个DIV一样高 line-height
54、:200px; 然后插入文字,就垂直居中了。缺点是要控制内容不要换行 5、在mozilla firefox和IE中的BOX模型解释不一致导致相差2px解决方法: divmargin:30px!important;margin:28px; 注意这两个margin的顺序一定不能写反,!important这个属性IE不能识别,但别的浏览器可以识别。所以在IE下其实解释成这样: divmaring:30px;margin:28px 重复定义的话按照最后一个来执行,所以不可以只写margin:XXpx!important; 浏览器差异 1、ul和ol列表缩进问题 消除ul、ol等列表的缩进时,样式应写成
55、:list-style:none;margin:0px;padding:0px; 其中margin属性对IE有效,padding属性对FireFox有效。 注 经验证,在IE中,设置margin:0px可以去除列表的上下左右缩进、空白以及列表编号或圆点,设置padding对样式没有影响;在 Firefox 中,设置margin:0px仅仅可以去除上下的空白,设置padding:0px后仅仅可以去掉左右缩进,还必须设置list- style:none才 能去除列表编号或圆点。也就是说,在IE中仅仅设置margin:0px即可达到最终效果,而在Firefox中必须同时设置margin:0px、 p
56、adding:0px以及list-style:none三项才能达到最终效果。 2、CSS透明问题 IE:filter:progid:DXImageTransform.Microsoft.Alpha(style=0,opacity=60)。 FF:opacity:0.6。 注 最好两个都写,并将opacity属性放在下面。 3、CSS圆角问题 IE:ie7以下版本不支持圆角。 FF: -moz-border-radius:4px,或者-moz-border-radius-topleft:4px;-moz- border- radius-topright:4px;-moz-border-radiu
57、s-bottomleft:4px;-moz- border- radius- bottomright:4px;。 注 圆角问题是CSS中的经典问题,建议使用JQuery框架集来设置圆角,让这些复杂的问题留给别人去想吧。不过jQuery的圆角只看到支持整个区域的圆角,没有支持边框的圆角,不过这个边框的圆角可以通过一些简单的手段来实现,下次有机会介绍下。 4、cursor:hand VS cursor:pointer 问题说明:firefox不支持hand,但ie支持pointer ,两者都是手形指示。 解决方法:统一使用pointer。 5、字体大小定义不同 对字体大小small的定义不同,Fi
58、refox中为13px,而IE中为16px,差别挺大。 解决方法:使用指定的字体大小如14px。 并列排列的多个元素(图片或者链接)的div和div之间,代码中的空格和回车在firefox中都会被忽略,而IE中却默认显示为空格(约3px)。 6、CSS双线凹凸边框 IE:border:2px outset;。 FF: -moz-border-top-colors: #d4d0c8 white;-moz-border-left-colors: #d4d0c8 white;-moz-border-right-colors:#404040 #808080;-moz-border-bottom-col
59、ors:#404040 #808080; 浏览器bug 1、IE的双边距bug 设置为float的div在ie下设置的margin会加倍。这是一个ie6都存在的bug。 解决方案:在这个div里面加上display:inline; 例如: 相应的css为 以下为引用的内容: 复制代码代码如下:#IamFloat float:left; margin:5px;/*IE下理解为10px*/ display:inline;/*IE下再理解为5px*/ #IamFloat float:left; margin:5px;/*IE下理解为10px*/ display:inline;/*IE下再理解为5px
60、*/ 关 于CSS中的问题实在太多了,甚至同样的CSS定义在不同的页面标准中的显示效果都是不一样的。一个合乎发展的建议是,页面采用标准XHTML标准编写, 较少使用table,CSS定义尽量依照标准DOM,同时兼顾IE、Firefox、Opera等主流浏览器。很多情况下,FF和 Opera的CSS解释标准更贴近CSS标准,也更具有规范性。 2、IE选择符空格BUG 今天在给博客的段落样式设置首字符样式的时候发现,原来一个空格也可以使样式失效。 请看以下代码: 复制代码代码如下: 对于世界而言,你是一个人;但是对于某个人,你是他的整个世界。纵然伤心,也不要愁眉不展,因为你不知是谁会爱上你的笑容。
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 第17课 外交事业的发展(教学设计)-2023-2024学年八年级历史下册新课标核心素养一站式同步教与学
- 分析药理学重要药物的作用机制试题及答案
- 强化基础知识的二手车评估师考题试题及答案
- Module 7 Unit 2 It could find the people(教学设计)-2024-2025学年外研版(一起)英语五年级上册
- 山东省滨州市邹平实验中学七年级信息技术《第2课时修饰文章》教学设计 人教新课标版
- 计算机基础考试出题规律试题及答案
- 一年级语文能力测试与考题全面分析试题及答案
- 汽车美容师常见问题考试试题及答案
- 2025至2030年中国新型脱硅剂数据监测研究报告
- 2025至2030年中国以太网线延伸器数据监测研究报告
- 快消部门2024年度营销活动计划表
- 【MOOC】跨文化思想交流英语-南京理工大学 中国大学慕课MOOC答案
- 2024年共青团入团考试测试题库及答案
- 车间目视化管理培训
- 山东省职业院校技能大赛中职组“工业分析检验”赛项规程
- 2024年业务流程外包(BPO)协议
- 2024年新人教版六年级数学上册《教材练习17练习十七 附答案》教学课件
- 三位数乘两位数乘法竖式100道及答案
- 厦门象屿财务报表分析报告
- 胜利油田吊装作业安全管理实施细则
- IARPA首次利用网络心理学赋能网络防御重塑安全
评论
0/150
提交评论