整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

css常考面试题

css常考面试题

.盒模型宽度计算

2.margin纵向重叠问题

3.margin负值问题

4.bfc理解和应用

5.float布局

6.flex布局:实现一个三点的色子

7.css定位

8.line-height如何继承

9.css响应式


下面依次看下:


1.盒模型宽度计算,下面div的offsetWidth

<style type="text/css">
        #div1 {
            width: 100px;
            padding: 10px;
            border: 1px solid #ccc;
            margin: 10px;
        }
</style>
 <div id="div1">
        this is div1
 </div>


offsetWidth=内容宽度 + 内边距 + 边框。无外边距。

所以 offsetWidth=100 + 10 * 2 + 1 * 2=122px


补充:如果让offsetWidth=100px ,可以怎么做

答:加上box-sizing: border-box;


2.margin纵向重叠问题:如下代码,AAA和BBB之间的距离是多少?

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>margin 纵向重叠</title>
    <style type="text/css">
        p {
            font-size: 16px;
            line-height: 1;
            margin-top: 10px;
            margin-bottom: 15px;
        }
</style>
</head>
<body>
    
    <p>AAA</p>
    <p></p>
    <p></p>
    <p></p>
    <p>BBB</p>


</body>
</html>

知识点:

1.相邻元素的margin-top和margin-bottom 会发生重叠

2.空白内容的p也会重叠

3.所以答案是:15px


3.margin负值问题

知识点:

1.margin-top和margin-left负值,元素向上,向左移动

2.margin-right负值,右侧元素左移,自身不受影响

3.margin-bottom负值,下方元素上移,自身不受影响


4.bfc理解和应用

概念:

1.块级格式化上下文

2.一块独立渲染区域,内部元素的渲染不会影响边界以外的元素

形成bfc的常见条件:

1.float不是none

2.position是absolute或fixed

3.overflow不是visible

4.display是flex inline-block等

bfc常见应用:清除浮动

// bfc前
<style type="text/css">
        .container {
            background-color: #f1f1f1;
        }
        .left {
            float: left;
        }
</style>
<div class="container">
        <img src="https://www.imooc.com/static/img/index/logo.png" class="left" style="magin-right: 10px;"/>
        <p>某一段文字……</p>
</div>


// bfc后:在父元素和p元素上添加bfc
<style type="text/css">
        .container {
            background-color: #f1f1f1;
        }
        .left {
            float: left;
        }
        .bfc {
            overflow: hidden; /* 触发元素 BFC */
        }
</style>
<div class="container bfc">
        <img src="https://www.imooc.com/static/img/index/logo.png" class="left" style="magin-right: 10px;"/>
        <p class="bfc">某一段文字……</p>
</div>


5.float布局

知识点:

1.如何实现圣杯布局和双飞翼布局

2.手写clearfix


圣杯布局和双飞翼布局的目的:

1.三栏布局,中间一栏最先加载和渲染

2.两侧内容固定,中间内容随着宽度自适应

圣杯布局和双飞翼布局的目的:

1.使用float布局

2.两侧使用margin负值,以便和中间内容横向重叠

3.防止中间内容被两侧覆盖,一个用padding,一个用margin


圣杯布局:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>圣杯布局</title>
    <style type="text/css">
        body {
            min-width: 550px;
        }
        #header {
            text-align: center;
            background-color: #f1f1f1;
        }


        #container {
            padding-left: 200px;
            padding-right: 150px;
        }
        #container .column {
            float: left;
        }


        #center {
            background-color: #ccc;
            width: 100%;
        }
        #left {
            position: relative;
            background-color: yellow;
            width: 200px;
            margin-left: -100%;
            right: 200px;
        }
        #right {
            background-color: red;
            width: 150px;
            margin-right: -150px;
        }


        #footer {
            text-align: center;
            background-color: #f1f1f1;
        }


        /* 手写 clearfix */
        .clearfix:after {
            content: '';
            display: table;
            clear: both;
        }
</style>
</head>
<body>
    <div id="header">this is header</div>
    <div id="container" class="clearfix">
        <div id="center" class="column">this is center</div>
        <div id="left" class="column">this is left</div>
        <div id="right" class="column">this is right</div>
    </div>
    <div id="footer">this is footer</div>
</body>
</html>

双飞翼布局:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>双飞翼布局</title>
    <style type="text/css">
        body {
            min-width: 550px;
        }
        .col {
            float: left;
        }


        #main {
            width: 100%;
            height: 200px;
            background-color: #ccc;
        }
        #main-wrap {
            margin: 0 190px 0 190px;
        }


        #left {
            width: 190px;
            height: 200px;
            background-color: #0000FF;
            margin-left: -100%;
        }
        #right {
            width: 190px;
            height: 200px;
            background-color: #FF0000;
            margin-left: -190px;
        }
</style>
</head>
<body>
    <div id="main" class="col">
        <div id="main-wrap">
            this is main
        </div>
    </div>
    <div id="left" class="col">
        this is left
    </div>
    <div id="right" class="col">
        this is right
    </div>
</body>
</html>


6.flex布局:实现一个三点的色子

常用语法:

flex-direction justfy-content align-items flex-wrap align-self

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>flex 画骰子</title>
    <style type="text/css">
        .box {
            width: 200px;
            height: 200px;
            border: 2px solid #ccc;
            border-radius: 10px;
            padding: 20px;


            display: flex;
            justify-content: space-between;
        }
        .item {
            display: block;
            width: 40px;
            height: 40px;
            border-radius: 50%;
            background-color: #666;
        }
        .item:nth-child(2) {
            align-self: center;
        }
        .item:nth-child(3) {
            align-self: flex-end;
        }
</style>
</head>
<body>
    <div class="box">
        <span class="item"></span>
        <span class="item"></span>
        <span class="item"></span>
    </div>
</body>
</html>


7.css定位

absolute和relative定位:

1.relative根据自身定位

2.absolute根据最近一层的定位元素定位,,找不到,就根据body定位


水平居中:

inline元素:text-aligin:center

block元素:margin: auto

absoulte元素:left:50% + margin-left负值

垂直居中:

inline元素:line-height的值等于height的值

absolute元素:top:50% + margin-top 负值。需要知道元素的宽高

absolute元素:transform(-50%, -50%) 不需要知道宽高

absolute元素:top,left,bottom,right=0 + margin: auto 不需要知道宽高


水平对齐演示:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>水平对齐</title>
    <style type="text/css">
        .container {
            border: 1px solid #ccc;
            margin: 10px;
            padding: 10px;
        }
        .item {
            background-color: #ccc;
        }


        .container-1 {
            text-align: center;
        }


        .container-2 .item {
            width: 500px;
            margin: auto;
        }


        .container-3 {
            position: relative;
            height: 100px;
        }
        .container-3 .item {
            width: 300px;
            height: 100px;
            position: absolute;
            left: 50%;
            margin-left: -150px;
        }
</style>
</head>
<body>
    <div class="container container-1">
        <span>一段文字</span>
    </div>


    <div class="container container-2">
        <div class="item">
            this is block item
        </div>
    </div>


    <div class="container container-3">
        <div class="item">
            this is absolute item
        </div>
    </div>
</body>
</html>

垂直对齐演示:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>垂直对齐</title>
    <style type="text/css">
        .container {
            border: 1px solid #ccc;
            margin: 10px;
            padding: 10px;
            height: 200px;
        }
        .item {
            background-color: #ccc;
        }


        .container-1{
            text-align: center;
            line-height: 200px;
            height: 200px;
        }


        .container-2 {
            position: relative;
        }
        .container-2 .item {
            width: 300px;
            height: 100px;
            position: absolute;
            left: 50%;
            margin-left: -150px;
            top: 50%;
            margin-top: -50px;
        }


        .container-3 {
            position: relative;
        }
        .container-3 .item {
            width: 200px;
            height: 80px;
            position: absolute;
            left: 50%;
            top: 50%;
            transform: translate(-50%, -50%)
        }


        .container-4 {
            position: relative;
        }
        .container-4 .item {
            width: 100px;
            height: 50px;
            position: absolute;
            top: 0;
            left: 0;
            bottom: 0;
            right: 0;
            margin: auto;
        }
</style>
</head>
<body>
    <div class="container container-1">
        <span>一段文字</span>
    </div>


    <div class="container container-2">
        <div class="item">
            this is item
        </div>
    </div>


    <div class="container container-3">
        <div class="item">
            this is item
        </div>
    </div>


    <div class="container container-4">
        <div class="item">
            this is item
        </div>
    </div>
</body>
</html>


8.line-height如何继承? 如下代码:p的行高是多少?

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>line-height 继承问题</title>
    <style type="text/css">
        body {
            font-size: 20px;
            line-height: 200%;
        }
        p {
            background-color: #ccc;
            font-size: 16px;
        }
</style>
</head>
<body>
    <p>这是一行文字</p>
</body>
</html>

行高是40px。

有三种情况:

// body的line-height直接是数字,则p的line-height直接就是body的line-height,为40px
<style type="text/css">
        body {
            font-size: 20px;
            line-height: 40px;
        }
        p {
            background-color: #ccc;
            font-size: 16px;
        }
</style>


// body的line-height直接是比例,则p的line-height直接就是p的font-size * 比例,为24px
<style type="text/css">
        body {
            font-size: 20px;
            line-height: 1.5;
        }
        p {
            background-color: #ccc;
            font-size: 16px;
        }
</style>


// body的line-height直接是百分比,则p的line-height直接就是body的font-size * body的line-height,为40px
<style type="text/css">
        body {
            font-size: 20px;
            line-height: 200%;
        }
        p {
            background-color: #ccc;
            font-size: 16px;
        }
</style>


9.css响应式

1.rem是什么?

2.响应式布局方案?


rem是什么?

px:绝对长度单位,最常用

em:相对长度单位,相对于父元素,不常用

rem:相对长单位,相对于根元素html的font-size,用于响应式


代码演示:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>rem 演示</title>
    <style type="text/css">
        html {
            font-size: 100px; // 1rem=100px
        }
        div {
            background-color: #ccc;
            margin-top: 10px;
            font-size: 0.16rem;
        }
</style>
</head>
<body>


    <p style="font-size: 0.1rem">rem 1</p>
    <p style="font-size: 0.2rem">rem 1</p>
    <p style="font-size: 0.3rem">rem 1</p>


    <div style="width: 1rem;">
        this is div1
    </div>
    <div style="width: 2rem;">
        this is div2
    </div>
    <div style="width: 3rem;">
        this is div3
    </div>


</body>
</html>


响应式布局方案?

1.媒体查询

2.rem

3.vw/vh

vw:网页视口宽度的1/100

vh:网页视口高度的1/100


篇文章主要总结了一些在项目中遇到的一些小问题以及对应的解决方案,避免日后踩坑,后续补充中,如果你对这些问题有不同的解答,欢迎评论

1. 输入框使用v-model 绑定值,但是不能改变

// 第一种情况
<el-input v-model="form.title"></el-input>
// 初始化
data () {
 return {
 form: {}
 }
}
// 赋值,其中formData为父组件传过来的数据
mounted (){
 this.form.title=this.formData.title
}
// 感觉并没有什么问题,但是就是不好用,解决办法就是单独赋值
data () {
 return {
 form: {},
 title: ''
 }
}
// 第二种情况
在表单中使用时,用:model=""给输入框赋值
<el-form :model="formData">
 <el-form-item>
 <el-input placeholder="请输入" :model="formData.value" size="small"/>
 </el-form-item>
</el-form>
// 解决方案,改为
<el-input placeholder="请输入" v-model="formData.value" size="small"/>
复制代码

2. 文本内容不对html标签转译

我想要输入下面的内容,但是保存数据后,就变成了aaa

解决办法: 如果是html内容、javascript、xml或其他特殊内容,使用<xmp></xmp>

如果是有空格和回车这样的特殊字符的简单文本 在文本外加<pre></pre> 标签

3. 基础导出功能

SensitiveOperationExport(params).then(res=> {
 if (res.data.code==='200') {
 // 这里是导出
 window.location.href=res.data.data.path
 this.$message({
 message: '导出成功!',
 type: 'success'
 })
 } else {
 this.$message.error({message: '导出失败!'})
 }
 })
复制代码

4. 使用element table 时,禁用部分复选框

<el-table-column type="selection" align="center" fixed :selectable="selectable"></el-table-column>
复制代码

官网上有这样一个操作 selectable, 仅对 type=selection 的列有效,类型为 Function,Function 的返回值用来决定这一行的 CheckBox 是否可以勾选

5.接口返回的数据为json类型,展示到表格中时,可以这样转换

// 数据结构 content: "{'title': '这是标题'}"
this.title=JSON.parse(content).title
复制代码

6. 列表中点击图片放大功能

安装viewer,可支持图片的切换,旋转,放大等功能,具体操作文档可百度查看,使用在页面中也非常简单,第一步,全局配置

// main.js 中引入配置
Viewer.setDefaults({
 'zIndex': 9999,
 'inline': false, // 是否默认展示缩略图
 'button': true, // 右上角按钮
 'navbar': true, // 底部缩略图
 'title': true, // 当前图片标题
 'toolbar': true, // 底部工具栏
 'tooltip': true, // 显示缩放百分比
 'movable': false, // 是否可以移动
 'zoomable': true, // 是否可以缩放
 'rotatable': true, // 是否可旋转
 'scalable': true, // 是否可翻转
 'transition': true, // 使用 CSS3 过度
 'fullscreen': true, // 播放时是否全屏
 'keyboard': true, // 是否支持键盘
 'url': 'data-source'
})
// 页面中使用
<viewer>
<img :src="scope.row.content "/>
</viewer>
复制代码

7. 上移和下移操作

一般来说,上移和下移是掉接口操作的,但是也有不掉接口的

/ 上移
moveUp (index, row) {
 if (index > 0) {
 let upDate=this.tableData[index - 1]
 this.tableData.splice(index - 1, 1)
 this.tableData.splice(index, 0, upDate)
 }
},
// 下移
moveDown (index, row) {
 if ((index + 1)===this.tableData.length) {
 console.log('已经是最后一条,不可下移')
 } else {
 let downDate=this.tableData[index + 1]
 this.tableData.splice(index + 1, 1)
 this.tableData.splice(index, 0, downDate)
 }
}
复制代码

8. 表格的全选和反选

<el-table :data="tableData" border :select-all="allSelect" @selection-change="changeFun" ref="form" height="700"></el-table>
// tableData 是表格数据
<div>
 <el-button @click="toggleSelect(tableData)">全选</el-button>
 <el-button @click="reverseSelect(tableData)">反选</el-button>
</div>
// 全选
 toggleSelect (rows) {
 if (rows) {
 rows.forEach(row=> {
 this.$refs.form.toggleRowSelection(row, !this.allSelect)
 })
 this.allSelect=!this.allSelect
 }
 },
 // 反选
 reverseSelect (rows) {
 let checked=this.data
 if (rows) {
 rows.map(row=> {
 checked && checked.map(item=> {
 if (row.index !==item.index) {
 this.$refs.form.toggleRowSelection(item, false)
 this.$refs.form.toggleRowSelection(row, true)
 } else {
 this.$refs.form.toggleRowSelection(row, false)
 }
 })
 })
 if (checked.length===0) {
 rows.forEach(row=> {
 this.$refs.form.toggleRowSelection(row, true)
 })
 }
 }
 },
 // 获取选择的数据
 changeFun (val) {
 this.data=val
 }
复制代码

9. 按住说话功能

这个功能依赖于recorder.js, 上一篇文章已经介绍过用法了,这里就不在细说

10. 表格编辑和保存切换

// editColorShow: '' // 设置敏感操作默认显示编辑
// clearEdit: '000' // 替换editColorShow的值
<el-table-column label="操作" align="center"
 width="200">
 <template slot-scope="scope">
 <el-button size="small" v-if="editColorShow !==scope.$index" type="primary" @click="editColor(scope.$index, scope.row)">编辑</el-button>
 <el-button size="small" v-if="editColorShow===scope.$index" type="primary" @click="submitSettingOperation(scope.$index, scope.row)">保存</el-button>
 </template>
 </el-table-column>
 // 方法中这样
editColor (index, row) {
 this.editColorShow=index
},
submitSettingOperation (index, data) {
 this.editColorShow=this.clearEdit
 }
复制代码

11. 深拷贝

第一种:

function copy(arr) {
 var newObj=arr.constructor===Array ? [] : {}
 if (typeof arr==='object') {
 for (var i in arr) {
 if (typeof arr[i]==='object') {
 newObj[i]=copy(arr[i])
 }
 newObj[i]=arr[i]
 }
 return newObj
 } else {
 return
 }
}
复制代码

第二种

function copy (obj) {
 var newObj=obj.constructor===Array ? [] : {}
 newObj=JSON.parse(JSON.stringify(obj))
 return newObj
}
复制代码

12.表单重置问题

之前重置表单的时候都是this.form.xx='',如果是一两个还好,但是如果表单很多的话就不是很适用了,发现了一个很便捷的操作,只要一行代码就搞定了

this.$refs['infoForm'].resetFields() 
// 前提是要重置的输入框必须设置prop属性才可以
复制代码

13. txt文件导出,有两种方式

第一种 纯前端下载

fetch('https://xxxxx.com/' + item.path).then(res=> res.blob().then(blob=> {
 var a=document.createElement('a')
 var url=window.URL.createObjectURL(blob)
 var filename='text.txt'
 a.href=url
 a.download=filename
 a.click()
 window.URL.revokeObjectURL(url)
}))
复制代码

第二种 获取到txt的内容后下载

createDownload (fileName, content) {
 var blob=new Blob([content])
 var link=document.createElement('a')
 var bodyEle=document.getElementsByTagName('body')[0]
 link.innerHTML=fileName
 link.download=fileName
 link.href=URL.createObjectURL(blob)
 bodyEle.appendChild(link)
 link.click()
 bodyEle.removeChild(link)
 }
复制代码

虽然两种都可以实现下载,但是要保证下载的接口可以在页面中访问到,不会有跨域等问题

14. 导出exel

导出表格这里提供两种方法,第一种依赖第三方,首先下载三个依赖

下载Blob.js和Export2Excel.js 两个文件,引入文件中

// npm install file-saver xlsx script-loader --save
// 导出
 onExportExcel (formName) {
 import('@/vendor/Export2Excel').then(excel=> {
// 表格的title
 const tHeader=['订单编号', '姓名', '员工编号', '手机号', '公司']
// 对应的字段 
 const filterVal=['sn', 'user_name', 'user_no', 'user_phone', 'user_company']
 const data=this.formatJson(filterVal, this.dataTable)
 excel.export_json_to_excel({
 header: tHeader,
 data,
 filename: `订单列表`
 })
 })
 },
 formatJson (filterVal, jsonData) {
 let arr=jsonData.map(v=> filterVal.map(j=> v[j]))
 return arr
 }
复制代码

第二种 通过vue-json-excel,具体细节可参考vue-json-excel

// 安装 npm install vue-json-excel,引入
// vue中使用
<download-excel
 class="btn btn-default"
 :data="json_data"
 :fields="json_fields"
 worksheet="My Worksheet"
 name="filename.xls">
</download-excel>
data(){
 return {
// 要导出的字段
 json_fields: {
 'Complete name': 'name',
 'City': 'city',
 'Telephone': 'phone.mobile',
 'Telephone 2' : {
 field: 'phone.landline',
 callback: (value)=> {
 return `Landline Phone - ${value}`;
 }
 },
 },
// 要导出的数据
 json_data: [
 {
 'name': 'Tony Pe?a',
 'city': 'New York',
 'country': 'United States',
 'birthdate': '1978-03-15',
 'phone': {
 'mobile': '1-541-754-3010',
 'landline': '(541) 754-3010'
 }
 },
 {
 'name': 'Thessaloniki',
 'city': 'Athens',
 'country': 'Greece',
 'birthdate': '1987-11-23',
 'phone': {
 'mobile': '+1 855 275 5071',
 'landline': '(2741) 2621-244'
 }
 }
 ],
 json_meta: [
 [
 {
 'key': 'charset',
 'value': 'utf-8'
 }
 ]
 ]
}
}
复制代码

15.导航栏中使用iconfont,选中不变色问题

先来看看对比

项目是基于element-ui开发的,避免不了使用到图标,所以阿里图库是个很好的选择,这里遇到的问题是左侧导航栏选中后,文字颜色发生变化,但是图标却一直不变,一般来说引用阿里图库有三种方式:Unicode、Font Class 、symbol;我用的是symbol方式引用,具体如下

1.图标选用的是svg格式,选择要使用的图标,下载svg格式

2.创建icon文件夹用于存放图标,创建svgIcon文件夹用于使用图标,使用如下

3.这里导致图标不变色的原因是下载的图标本身就是带有颜色的,那么在通过symbol获取图标时会在svg的path中增加fill属性,导致无法更改颜色,可以将图标中fill属性置空,这样就可以解决了

界上最古老的悬索桥在哪?在云南永平杉阳乡和保山水寨乡之间的谰沧江上,名为霁虹桥,史称“兰津桥”。因西汉时通往缅甸、印度的西南丝绸之路“金齿咽喉”的兰津渡口而得名。霁虹桥最早为木桥,始建于东汉,南诏时改竹索吊桥,明代改为铁索桥。1681年重建,长106米,宽3.7米,由9股18根铁链组成,铁索两头固定在博南山和罗岷山的山岩上,桥面铺木板。原本桥中央有亭,两头有关隘,现无,1986年桥被洪水冲垮,后移位于原桥西二十几米 处东旁的原桥墩还残存。

永平博南古道因处博南山而得名,它是古代西南丝绸之路,亦称“蜀身毒道”上最难行的一段,也因为路难行,才使古桥能保存至今。今重赴博南古道,细细品味,无尽遐思。

穿越霁虹桥:

2005年5月我们父子俩从当时的沪梅陇乘N521次8:18始发,经杭州联1515次到贵阳再联2079次(均不出站)到昆明,四联N996次大理火车,第3天14:06到祥云(四列里2列是无空调火车),比沪直达昆明转祥云或大理的反省时13小时或4小时,省247元(单程)。北上鸡足山、宾川、泸沽湖后经大理、丽江、中甸再返大理客运站乘7:00至18:00每20分钟/班车百公里20元(2005年,下同)到永平县,再每小时一班车12元到简陋的杉阳乡,叫了辆摩的2个人3公里3元,路况较差,途经永国寺、金浪巅神祠、土堆古墓群、桥墩己被土淹埋达3米的明代凤鸣桥,江顶寺门楼等古迹,到湾子村路尽头。

下载(45.8 KB)

4 天前 13:39

下载(97.41 KB)

4 天前 14:00

下载(92.84 KB)

4 天前 14:00

司机很热情,想带我俩去找村里的永国寺主持,正巧遇到一位老汉赶牛上山放牧,司机用方言与老汉交谈后,叫我们跟老汉上山。我背着35斤重的行囊,跟着上行,先是米宽的土路,此道原是博南古道,如今成牛道,多牛粪。还未至顶,己体会到什么叫汗流浃背,走走息息,还得拍照,不见了老汉踪影,好在只要攀向垭口就行。临近垭口是2尺宽的青石板路,石板上多马蹄印,深的足有15CM。共上坡3公里到残缺不全的明代门楼,开始下坡,半道只见一户农家,门前有株高高的两层的芙春花,或是八角梅之类,花背后耸立着一棵黄槐树,俯瞰花树下方,正对着江面,美极了。我想走近它,看哪个位置最美,结果就懒得再上行百米去拍照。三呼五喊,总算请出一位壮汉,请他代为背包,下坡1500米20元,可能语言不通,没成交。下行的羊肠小道弯弯曲曲,陡峭,走了半程,后面赶上来一位大步流星下行去水寨乡办事的老乡,而我们见峡底汹涌奔腾的谰沧江水,只能小心翼翼地下行。距桥还有500米,老乡总算代为背包,他的速度快一倍,距桥400米时才见霁虹桥,气势实足。老乡急于办事先行了,我们在桥头悠逛,桥西(或南)多崖刻,如明代的“沧江铁索跨长虹,鸟道从天一线通”。沿微微上坡路,向南1公里到了保山水寨乡的平坡村。乡民说到水寨乡走大路10公里,走古道全是上坡约4公里,这可与我看到的书上、网上说的全是平坡和下坡风马牛不相及,应该是反行才对呀。刚才上坡3公里己够呛,若没包,没关系,想想只有找村公所。

下载(86.46 KB)

4 天前 13:39

下载(109.6 KB)

4 天前 13:39

下载(107.76 KB)

4 天前 13:39

下载(105.12 KB)

4 天前 13:39

李主任和一位乡干事姑娘热情招待,打电话联系,说村里3辆摩托和乡里的几辆小车(50元)全上保山了,只有一辆专跑村里的农用卡车,照规矩往返80元。村主任说这桥不是以中间为界,而是处在保山界内,却被永平抢先注册,属永平,维修却归水寨乡,乡有开发此桥之意。主任说走到水寨全是古道,还有一段百米须抓着铁链上攀,很费力的,正如徐霞客所云:“人若破壁扪天,水若争道跃壑---冷人心骨。”奇险。景色到是很不错的。只可惜我们有行囊,失之交臂了。

2小时后乘上卡车,先上坡路,如老牛爬坡,3公里开了30分钟,几次头碰车顶,好在只是时有毛毛雨,否则路更难行,这车费不贵,若人多还顶合算。后7公里开了15分钟,到了水寨乡,住进李主任联系好的旅社,20元普间,就我俩,洗澡、洗衣,好痛快。得谢谢主任。

惊现天然“美女与梯田”壁画:

在卡车开3公里到土公路最高将左拐弯时,我偶然发现永平县杉阳乡的陡峭的江岸崖壁似梯田,下车仔细一瞧,好美啊!起码还有二三位美女,中间的一位如西域美女,尖挺的鼻子,流水痕迹如丰乳,惟妙惟肖,整体由和谐的草木和黄褐色岩体构成,竖横有致,线条清晰,天成美景,宽约有1500米,高4、5百米,怕是独一无二的。司机大为惊讶地说,他几乎天天跑平坡村,没发现这奇景,也没听老乡说起。此距壁画起码有千余米,又临17:00和下小雨,照没现场清楚。

新游程设计

各地飞机到昆明转保山,或出昆明机场乘公交26、52路到市中心。或乘火车到昆明。以沪为例,有两列直达火车到昆明,也可预购火车三联票,上海南站乘1213次7:04发无空调车,翌日11:14到贵阳,联2019次19:30始发空调车,第3天6:32到昆明,再联N818次8:01始发无空调车15:13到大理,出站18路到客运站乘班车600公里到保山;也可出昆明火车站北500米客运站班车多,到保山,第4天转4班/天车到水寨乡,返是16:30末班车,但往往14:30己开走了。寄好行囊,包辆7人小车往返50元经平坡村到霁虹桥,或步行到霁虹桥,一路观赏美景,不过,返时还是乘车省力省时,若穿越到湾子村要4小时(反穿5小时),有行囊者由保山到永平省力,山里上行只有2公里,反之有7公里。到桥东头左拐去岩洞村,右拐是去湾子村,此后请村公所代请摩的。几个村里都无宿。

IMG_0586.jpg(65.41 KB) 下载次数:0

4 天前 13:39

关于照片:由于用的是胶卷,外出平均3天一卷,一天起码游2、3个景区,就是一个景区四、五张,有人像照,有照差的,所以一处只存2、3张了。投稿又不退文照(只有“新民晚报”列外),比如07年,“旅游时报”,由于一登就整版,我三四个月里连投23文56照,每文有二三千字,还特地写明“不用请保存,到时来拿”,以前也这样。不料,编辑离职了,总编说“她不在,全丢了”。天啊!如此!人不在应该退原处,又不要你邮费,我就不会再寄了,也怪自己没联系。现翻出底片印部分(精打细算),借数码相机翻拍才能上网。请谅解。没走"梯云路"非常可惜,但无意发现了天然壁画"美女与梯田",也不错。