HBuilderX

HBuilderX

极客开发工具
uni-app

uni-app

开发一次,多端覆盖
uniCloud

uniCloud

云开发平台
HTML5+

HTML5+

增强HTML5的功能体验
MUI

MUI

上万Star的前端框架

山东标梵互动 CSS高级知识培养

css

其实CSS远比我们想象的复杂,有可能CSS的任何一点都可以拿出来写一篇很大篇幅的文章,这一点经常可以看到。所以CSS并不局限于他的名字,级联样式表,更像是一个世界,一个网页不可缺少的重要组成部分。
围绕着上面的CSS系统,当然上图可能不够全面,但也可以说明CSS的主要组成部分。先简单说一下一些未知的隐藏属性,先留下一个大概的印象,扩展一下我们的CSS学习体系,然后再慢慢深入。
本文也是作者结合《CSS世界》《CSS权威指南》《CSS秘密》第一、二卷对一些自己平时忽略或者根本不知道的地方的总结,来源于在浏览器中轻敲代码的实践。
本文也是前端知识体系建设的一部分。详见github:https://github.com/qiugu/the-road-to-front-end-learning。
文字排版。

先说字体。声明字体很简单,font-family语句就完成了,但有时我们可能会看到这样的语句:
h1{
font-family:-apple-system,system-ui,SegoeUI,Roboto,Ubuntu,Cantarell,NotoSans,sans-serif,BlinkMacSystemFont,HelveticaNeue,PingFangSC,HiraginoSansGB,MicrosoftYaHei,Arial
{}
这么大的弦有什么含义?事实上,只有知道这个font-faimly属性中有两种类型的值,一种是字体名称,另一种称为字体系列,您才能理解它。顾名思义,字体族是所有字体的分类。在CSS世界中,一般有以下字体系列:
衬线字体。意思是笔画的开始和结束都有额外的修饰,笔画粗细不同。
无衬线字体。就是没装修,笔画粗细都一样。
等宽字体。字形的宽度相等。
草书字体。模仿人类笔迹的字体。
幻想字体。没有属于以上四种字体的其他字体。
因此,上述声明中的无衬线和Helvetica指的是字体系列,前者是衬线字体,后者是无衬线字体。然后意思就很清楚了。如果系统中有前置字体,使用前置字体;如果没有,尽量使用背面衬线字体;如果没有,继续在back语句中搜索可用的字体。
继承。
一般文本类的属性是可以继承的,比如颜色、字号、字体系列等等。
有些属性是不能继承的,比如边框、填充、边距、背景等。其实很容易理解为什么这些属性不能继承,因为一旦这些属性可以继承,整个布局都会受到影响。例如,我们在父元素上添加了边框,但是它的子元素和子元素都继承了边框,所以我们必须编写更多的代码来消除继承的影响。这个结果肯定不是CSS设计的初衷。
行高.
首先,需要明确的是行高适用于内联元素或内联块级元素。我们声明块级框上的行高实际上适用于块级框的内容,因此通常可以看到它是这样使用的:
本文来源:标梵互动(https://www.biaofun.com/)

继续阅读 »

其实CSS远比我们想象的复杂,有可能CSS的任何一点都可以拿出来写一篇很大篇幅的文章,这一点经常可以看到。所以CSS并不局限于他的名字,级联样式表,更像是一个世界,一个网页不可缺少的重要组成部分。
围绕着上面的CSS系统,当然上图可能不够全面,但也可以说明CSS的主要组成部分。先简单说一下一些未知的隐藏属性,先留下一个大概的印象,扩展一下我们的CSS学习体系,然后再慢慢深入。
本文也是作者结合《CSS世界》《CSS权威指南》《CSS秘密》第一、二卷对一些自己平时忽略或者根本不知道的地方的总结,来源于在浏览器中轻敲代码的实践。
本文也是前端知识体系建设的一部分。详见github:https://github.com/qiugu/the-road-to-front-end-learning。
文字排版。

先说字体。声明字体很简单,font-family语句就完成了,但有时我们可能会看到这样的语句:
h1{
font-family:-apple-system,system-ui,SegoeUI,Roboto,Ubuntu,Cantarell,NotoSans,sans-serif,BlinkMacSystemFont,HelveticaNeue,PingFangSC,HiraginoSansGB,MicrosoftYaHei,Arial
{}
这么大的弦有什么含义?事实上,只有知道这个font-faimly属性中有两种类型的值,一种是字体名称,另一种称为字体系列,您才能理解它。顾名思义,字体族是所有字体的分类。在CSS世界中,一般有以下字体系列:
衬线字体。意思是笔画的开始和结束都有额外的修饰,笔画粗细不同。
无衬线字体。就是没装修,笔画粗细都一样。
等宽字体。字形的宽度相等。
草书字体。模仿人类笔迹的字体。
幻想字体。没有属于以上四种字体的其他字体。
因此,上述声明中的无衬线和Helvetica指的是字体系列,前者是衬线字体,后者是无衬线字体。然后意思就很清楚了。如果系统中有前置字体,使用前置字体;如果没有,尽量使用背面衬线字体;如果没有,继续在back语句中搜索可用的字体。
继承。
一般文本类的属性是可以继承的,比如颜色、字号、字体系列等等。
有些属性是不能继承的,比如边框、填充、边距、背景等。其实很容易理解为什么这些属性不能继承,因为一旦这些属性可以继承,整个布局都会受到影响。例如,我们在父元素上添加了边框,但是它的子元素和子元素都继承了边框,所以我们必须编写更多的代码来消除继承的影响。这个结果肯定不是CSS设计的初衷。
行高.
首先,需要明确的是行高适用于内联元素或内联块级元素。我们声明块级框上的行高实际上适用于块级框的内容,因此通常可以看到它是这样使用的:
本文来源:标梵互动(https://www.biaofun.com/)

收起阅读 »

标梵互动 PHP的选择排序

PHP

这三种类型中,简单选择排序、树型选择排序和堆排序是其中最简单的一种,也是最容易理解的一种。
观念。
SelectionSort:SelectionSort是一个简单而直观的排序算法。正如你所想的那样,直接从待排序的数组中选择一个最小(或最大)的数,每次取一个最小的数,然后将数组的次序放到新数组中,直到全部取完。
步。
最小(大)元素位于未排序的序列中,存放在已排序序列的开始位置。
继续从未排序的元素中查找最小(大)元素,然后将其放置到已排序的序列的结尾。
如此等等,直到所有的元素都被排序。

实现
方式一
> <?php

class SelectionSort
{
/**

  • 主运行方法
  • @return void
    */
    public static function main(): void
    {
    $random = self::random();
    $array = self::sort($random);
    print_r($array);
    }
    /**
  • 选择排序
  • @param array $array
  • @return array
    */
    public static function sort(array &$array): array
    {
    $count = count($array);
    for ($i = 0; $i < $count; $i++) {
    $position = $i;
    for ($j = $i + 1; $j < $count; $j++) {
    if (self::compare($array[$position], $array[$j]) > 0) {
    $position = $j;
    }
    }

        if ($position !== $i) {  
            self::swap($array[$position], $array[$i]);  
        }  
    }  
    
    return $array;  

    }

    /**

  • 比较大小
  • @param int $x
  • @param int $y
  • @return int
    */
    private static function compare(int $x, int $y): int
    {
    return $x <=> $y;
    }

    /**

  • 互换位置
  • @param int $x
  • @param int $y
  • @return void
    */
    private static function swap(int &$x, int &$y): void
    {
    if ($x !== $y) {
    $t = $x;
    $x = $y;
    $y = $t;
    }
    }

    /**

  • 生成随机数组
  • @param int $low
  • @param int $high
  • @param int $num
  • @return array
    */
    private static function random(int $low = 1, int $high = 9999, int $num = 10): array
    {
    $num = $num > $high ? $high : $num;
    $range = range($low, $high);
    $array = array_rand(array_flip($range), $num);
    shuffle($array);

    return $array;  

    }
    }

SelectionSort::main();

// 结果
Array
(
[0] => 312
[1] => 1124
[2] => 1267
[3] => 1884
[4] => 2609
[5] => 4177
[6] => 4773
[7] => 7728
[8] => 8237
[9] => 8963
)
方式二
树形选择排序 - Tree Selection Sort:又名锦标赛排序,是一种按照锦标赛的思想进行选择排序的方法

方式三
堆排序 - Heap Sort:是指利用堆这种数据结构所设计的一种排序算法。它是选择排序的一种。可以利用数组的特点快速定位指定索引的元素。堆分为大根堆和小根堆,是完全二叉树。大根堆的要求是每个节点的值都不大于其父节点的值。在数组的非降序排序中,需要使用的就是大根堆,因为根据大根堆的要求可知,最大的值一定在堆顶

本文来源:标梵互动(https://www.biaofun.com/)

继续阅读 »

这三种类型中,简单选择排序、树型选择排序和堆排序是其中最简单的一种,也是最容易理解的一种。
观念。
SelectionSort:SelectionSort是一个简单而直观的排序算法。正如你所想的那样,直接从待排序的数组中选择一个最小(或最大)的数,每次取一个最小的数,然后将数组的次序放到新数组中,直到全部取完。
步。
最小(大)元素位于未排序的序列中,存放在已排序序列的开始位置。
继续从未排序的元素中查找最小(大)元素,然后将其放置到已排序的序列的结尾。
如此等等,直到所有的元素都被排序。

实现
方式一
> <?php

class SelectionSort
{
/**

  • 主运行方法
  • @return void
    */
    public static function main(): void
    {
    $random = self::random();
    $array = self::sort($random);
    print_r($array);
    }
    /**
  • 选择排序
  • @param array $array
  • @return array
    */
    public static function sort(array &$array): array
    {
    $count = count($array);
    for ($i = 0; $i < $count; $i++) {
    $position = $i;
    for ($j = $i + 1; $j < $count; $j++) {
    if (self::compare($array[$position], $array[$j]) > 0) {
    $position = $j;
    }
    }

        if ($position !== $i) {  
            self::swap($array[$position], $array[$i]);  
        }  
    }  
    
    return $array;  

    }

    /**

  • 比较大小
  • @param int $x
  • @param int $y
  • @return int
    */
    private static function compare(int $x, int $y): int
    {
    return $x <=> $y;
    }

    /**

  • 互换位置
  • @param int $x
  • @param int $y
  • @return void
    */
    private static function swap(int &$x, int &$y): void
    {
    if ($x !== $y) {
    $t = $x;
    $x = $y;
    $y = $t;
    }
    }

    /**

  • 生成随机数组
  • @param int $low
  • @param int $high
  • @param int $num
  • @return array
    */
    private static function random(int $low = 1, int $high = 9999, int $num = 10): array
    {
    $num = $num > $high ? $high : $num;
    $range = range($low, $high);
    $array = array_rand(array_flip($range), $num);
    shuffle($array);

    return $array;  

    }
    }

SelectionSort::main();

// 结果
Array
(
[0] => 312
[1] => 1124
[2] => 1267
[3] => 1884
[4] => 2609
[5] => 4177
[6] => 4773
[7] => 7728
[8] => 8237
[9] => 8963
)
方式二
树形选择排序 - Tree Selection Sort:又名锦标赛排序,是一种按照锦标赛的思想进行选择排序的方法

方式三
堆排序 - Heap Sort:是指利用堆这种数据结构所设计的一种排序算法。它是选择排序的一种。可以利用数组的特点快速定位指定索引的元素。堆分为大根堆和小根堆,是完全二叉树。大根堆的要求是每个节点的值都不大于其父节点的值。在数组的非降序排序中,需要使用的就是大根堆,因为根据大根堆的要求可知,最大的值一定在堆顶

本文来源:标梵互动(https://www.biaofun.com/)

收起阅读 »

微博分享失败

微博分享

如果授权回调页和redirect_uri都设置成一样的之后还是分享失败,看看imageUrl是不是使用本地路径。如果不是改成本地路径试试。

如果授权回调页和redirect_uri都设置成一样的之后还是分享失败,看看imageUrl是不是使用本地路径。如果不是改成本地路径试试。

MacOSX Big Sur 11,HBuilderX和老HBuilder运行说明

big sur HBuilderX

Q1: MacOSX Big Sur 11,HBuilderX启动后,CPU使用率过高,电脑发热

部分有独显的MacBook,老版HBuilderX启动后,CPU使用率过高,电脑发热、发烫,风扇呼呼转。

解决方法:

更新到HBuilderX最新版本

Q2: 老HBuilder在MacOSX Big sur 11上 启动就退出。

老HBuilder已停止维护数年,建议使用HBuilderX。下载地址:https://dcloud.io/hbuilderx.html

继续阅读 »

Q1: MacOSX Big Sur 11,HBuilderX启动后,CPU使用率过高,电脑发热

部分有独显的MacBook,老版HBuilderX启动后,CPU使用率过高,电脑发热、发烫,风扇呼呼转。

解决方法:

更新到HBuilderX最新版本

Q2: 老HBuilder在MacOSX Big sur 11上 启动就退出。

老HBuilder已停止维护数年,建议使用HBuilderX。下载地址:https://dcloud.io/hbuilderx.html

收起阅读 »

关于iOS离线打包SDK百度云非会员下载慢的解决方法,仅适合家里有NAS的同学

离线打包

群晖NAS有一个叫Cloud Sync的插件,可以添加百度云账号,将百度云的文件同步到本地NAS。配置好同步后,将官方提供的SDK包保存到相应文件夹,它就会实时同步到你的NAS,不用再去盯着几十KB的下载进度。
前提是,官方出新SDK你及时去保存到自己的百度网盘

imgbed.cn图床

继续阅读 »

群晖NAS有一个叫Cloud Sync的插件,可以添加百度云账号,将百度云的文件同步到本地NAS。配置好同步后,将官方提供的SDK包保存到相应文件夹,它就会实时同步到你的NAS,不用再去盯着几十KB的下载进度。
前提是,官方出新SDK你及时去保存到自己的百度网盘

imgbed.cn图床

收起阅读 »

iOS代上架,苹果App代上架

iOS打包 苹果审核 上架

1、什么是iOS马甲包?

iOS马甲包就是苹果上架的时候,有些软件限制不能上架,所以需要马甲包,马甲包就是苹果应用市场已经上架的合规软件。

马甲包上架审核通过后,用后台接口控制加入自己不合规的网站链接或者热更替换为自己的业务App代码。

2、什么是iOS代上架?

有的团队或者公司开发出了正规的App,但是自己不会上架。

很多公司开发完App,提交到了苹果市场审核,但是被拒绝了,接下来他们就不知道怎么处理了,因为技术和经验不足,导致的。

无论是正规App上架App Store,还是非正规App想通过马甲包上架,都可以联系我解决,QQ:1481983952

联系QQ:1481983952

继续阅读 »

1、什么是iOS马甲包?

iOS马甲包就是苹果上架的时候,有些软件限制不能上架,所以需要马甲包,马甲包就是苹果应用市场已经上架的合规软件。

马甲包上架审核通过后,用后台接口控制加入自己不合规的网站链接或者热更替换为自己的业务App代码。

2、什么是iOS代上架?

有的团队或者公司开发出了正规的App,但是自己不会上架。

很多公司开发完App,提交到了苹果市场审核,但是被拒绝了,接下来他们就不知道怎么处理了,因为技术和经验不足,导致的。

无论是正规App上架App Store,还是非正规App想通过马甲包上架,都可以联系我解决,QQ:1481983952

联系QQ:1481983952

收起阅读 »

uni.chooseLocation在hbuild里面内置浏览器正常,正式打包不行

先用百度不行,然后换成高德ok
chooseLocation(){

            uni.chooseLocation({  
                success: (data) => { postModel.push({  
                    name:data.name,address:data.address,  
                    province:data.province,city:data.city,lat:data.lat,lng:data.lng});  
                    this.addressData.addressName = data.name;  
                    this.addressData.address = data.name;  
                    this.addressData.lat=data.latitude;  
                    this.addressData.lng=data.longitude;  
                },  
                fail: () => {  
                    uni.getSetting({  
                        success: function(res) {  
                            var statu = res.authSetting;  
                            console.log(statu);  
                            if (!statu['scope.userLocation']) {  
                                console.log(123);  
                                uni.showModal({  
                                    title: '是否授权当前位置',  
                                    content: '需要获取您的地理位置,请确认授权,否则地图功能将无法使用',  
                                    success(tip) {  
                                        if (tip.confirm) {  
                                            uni.openSetting({  
                                                success: function(data) {  
                                                    if (data.authSetting["scope.userLocation"] === true) {  
                                                        uni.showToast({  
                                                            title: '授权成功',  
                                                            icon: 'success',  
                                                            duration: 1000  
                                                        })  
                                                        //授权成功之后,再调用chooseLocation选择地方  
                                                        setTimeout(function() {  
                                                            uni.chooseLocation({  
                                                                success: (data) => {  
                                                                postModel.push({  
                                                                name:data.name,address:data.address,  
                                                                province:data.province,city:data.city,lat:data.lat,lng:data.lng});  
                                                                this.addressData.addressName = data.name;  
                                                                this.addressData.address = data.name;  
                                                                this.addressData.lat=data.latitude;  
                                                                this.addressData.lng=data.longitude;  
                                                                }  
                                                            })  
                                                        }, 1000)  
                                                    }  
                                                }  
                                            })  
                                        } else {  
                                            uni.showToast({  
                                                title: '授权失败',  
                                                icon: 'none',  
                                                duration: 1000  
                                            })  
                                        }  
                                    }  
                                })  

                            }  
                        }  
                    })  
                }  
            })  
        }  
        ,  
        //地图选择地址  
继续阅读 »

先用百度不行,然后换成高德ok
chooseLocation(){

            uni.chooseLocation({  
                success: (data) => { postModel.push({  
                    name:data.name,address:data.address,  
                    province:data.province,city:data.city,lat:data.lat,lng:data.lng});  
                    this.addressData.addressName = data.name;  
                    this.addressData.address = data.name;  
                    this.addressData.lat=data.latitude;  
                    this.addressData.lng=data.longitude;  
                },  
                fail: () => {  
                    uni.getSetting({  
                        success: function(res) {  
                            var statu = res.authSetting;  
                            console.log(statu);  
                            if (!statu['scope.userLocation']) {  
                                console.log(123);  
                                uni.showModal({  
                                    title: '是否授权当前位置',  
                                    content: '需要获取您的地理位置,请确认授权,否则地图功能将无法使用',  
                                    success(tip) {  
                                        if (tip.confirm) {  
                                            uni.openSetting({  
                                                success: function(data) {  
                                                    if (data.authSetting["scope.userLocation"] === true) {  
                                                        uni.showToast({  
                                                            title: '授权成功',  
                                                            icon: 'success',  
                                                            duration: 1000  
                                                        })  
                                                        //授权成功之后,再调用chooseLocation选择地方  
                                                        setTimeout(function() {  
                                                            uni.chooseLocation({  
                                                                success: (data) => {  
                                                                postModel.push({  
                                                                name:data.name,address:data.address,  
                                                                province:data.province,city:data.city,lat:data.lat,lng:data.lng});  
                                                                this.addressData.addressName = data.name;  
                                                                this.addressData.address = data.name;  
                                                                this.addressData.lat=data.latitude;  
                                                                this.addressData.lng=data.longitude;  
                                                                }  
                                                            })  
                                                        }, 1000)  
                                                    }  
                                                }  
                                            })  
                                        } else {  
                                            uni.showToast({  
                                                title: '授权失败',  
                                                icon: 'none',  
                                                duration: 1000  
                                            })  
                                        }  
                                    }  
                                })  

                            }  
                        }  
                    })  
                }  
            })  
        }  
        ,  
        //地图选择地址  
收起阅读 »

移动端css position:fixed布局定位问题

布局

移动端布局踩坑

绝对不要在 scroll-view 标签内使用 position:fixed 布局做定位
安卓目前测试没啥问题,但是,注意IOS一堆坑!!!
几乎每个苹果手机展示都不一样
等你调试半天,测了几个苹果,ok没啥问题。你以为万事大吉,但是!!!


看到了吧,有些IOS他就是牛哔~(破音)
所以划重点:不要在 scroll-view 标签内使用 position:fixed 布局

继续阅读 »

移动端布局踩坑

绝对不要在 scroll-view 标签内使用 position:fixed 布局做定位
安卓目前测试没啥问题,但是,注意IOS一堆坑!!!
几乎每个苹果手机展示都不一样
等你调试半天,测了几个苹果,ok没啥问题。你以为万事大吉,但是!!!


看到了吧,有些IOS他就是牛哔~(破音)
所以划重点:不要在 scroll-view 标签内使用 position:fixed 布局

收起阅读 »

建议:内置浏览器的控制台输出集成到HX终端标签上

控制台调试 终端问题 hx

如题.现在使用hx调试还是有些不太理想.尤其是调试竖屏手机页面时,如果调出控制台打印输出窗口时,将会严重阻挡整体画面. 私下设想了一个方案.能否将web控制台集成到终端附近的标签中呢?类似于多个终端之间的标签一般.这样一来,就完美解决了页面调试被遮挡的问题了.

如题.现在使用hx调试还是有些不太理想.尤其是调试竖屏手机页面时,如果调出控制台打印输出窗口时,将会严重阻挡整体画面. 私下设想了一个方案.能否将web控制台集成到终端附近的标签中呢?类似于多个终端之间的标签一般.这样一来,就完美解决了页面调试被遮挡的问题了.

建议HBuilder可以支持电脑点击文件有右键编辑

可以像压缩文件和一些工具一样可以右键有快捷键

可以像压缩文件和一些工具一样可以右键有快捷键

感谢uniapp mui成功上架appstore

Android市场 Appstore上传

研发时间:2周
功能:一个农业小电商
平台:ios和android
作者背景:了3年安卓研发 ,和java web,一年前用过mui直接网址android打包;
注意点:
A.支付哪里微信 appid, 如果填错就会 (ERROR ITMS-90158: "The following URL schemes found in your app are not in the correct format:),
B:图片透明度 ,让设计妹子百分百png填满 (ERROR ITMS-90717: "Invalid App Store Icon)
平台:android ios
成功截图 :

继续阅读 »

研发时间:2周
功能:一个农业小电商
平台:ios和android
作者背景:了3年安卓研发 ,和java web,一年前用过mui直接网址android打包;
注意点:
A.支付哪里微信 appid, 如果填错就会 (ERROR ITMS-90158: "The following URL schemes found in your app are not in the correct format:),
B:图片透明度 ,让设计妹子百分百png填满 (ERROR ITMS-90717: "Invalid App Store Icon)
平台:android ios
成功截图 :

收起阅读 »

linux使用安卓虚拟机可以开发h5+app

安装安卓模拟器https://github.com/anbox/anbox/blob/master/docs/install.md

安装完成之后安装adb:


sudo apt install android-tools-adb  

本人电脑环境ubuntu20,04安装的deepin-wine环境 ,可以使用官方的方法安装wine环境运行HBubilderx运行之后可识别到安卓模拟器.缺点是电脑上测试扫码等硬件功能不好用。不知道官方为什么不开发出通过无线的方式同步app,之前使用的别的混合开发框架能够实现,效果很好,希望官方能考虑下。
继续阅读 »

安装安卓模拟器https://github.com/anbox/anbox/blob/master/docs/install.md

安装完成之后安装adb:


sudo apt install android-tools-adb  

本人电脑环境ubuntu20,04安装的deepin-wine环境 ,可以使用官方的方法安装wine环境运行HBubilderx运行之后可识别到安卓模拟器.缺点是电脑上测试扫码等硬件功能不好用。不知道官方为什么不开发出通过无线的方式同步app,之前使用的别的混合开发框架能够实现,效果很好,希望官方能考虑下。
收起阅读 »