2015年2月

CSS 使用after伪类清除浮动

今天早上去上班的时候还在纠结,设定before和after,可是他们的位置位于元素的哪里呢?兄弟元素?子元素?在firebug里看不到他们俩的位置,在FF自带的审查元素里倒是能看到,其实是位于该元素的子元素。

于是,以前,我们说过用一个div来清除浮动,现在我们可以把它省掉了——给父元素设定after。

如下:

element:after {
     clear: both;
     content: "";
     display: block;
}

jQuery 如何判断文字是否溢出

今天又碰到了这种需求,是因为我们要做个点击获得全文(之类的)功能,设置了overflow:hidden,如果完整的显示了,那么我们就不需要显示全部内容的按钮,否则就要加上。

当时就在想,这玩样儿恐怕不太好办吧?overflow是CSS自动判断的,我完全没有经受,怎么判断确实是个问题。

还好谷歌还是能够找到答案的:jquery如何判断div是否文本溢出
里面提到了一个很好的方法:

$(selector).map(function() {
    if (this.offsetWidth < this.scrollWidth) {
        // do whatever you want
    }
});

这里的offsetWidthscrollWidth是DOM对象所具有的属性,而不是jQuery对象,所以要先转成DOM对象:jQuery与DOM对象的互相转换

关于这两个,以下扩展阅读:
https://developer.mozilla.org/zh-CN/docs/Web/API/HTMLElement/offsetWidth
https://developer.mozilla.org/zh-CN/docs/Web/API/element/scrollWidth

Javascript 上帝说,我的对象想要默认值

找了下貌似这一篇没写,于是乎坑出了可能是一个月前的代码mark。

我们来看以下两段

        window.Option = {};

        Option.defaultProps = function(obj, defaults) {
            function isObject(obj) {
                return Object.prototype.toString.call(obj) === '[object Object]';
            }

            if (!isObject(obj)) {
                return defaults;
            }

            for (var key in defaults) {
                if (!defaults.hasOwnProperty(key)) {
                    continue;
                }

                var objValues = obj[key];
                var defaultValue = defaults[key];

                if (isObject(objValues)) {
                    obj[key] = Option.defaultProps(objValues, defaultValue);
                } else if (objValues === undefined) {
                    obj[key] = defaultValue;
                }
            }
            return obj;
        };

        function People() {};

        People.defaults = {
            name: 'Hi',
            job: 'Student',
            age: 19,
            friends: ['No One']
        };

        people1 = Option.defaultProps({
            name: 'Sky',
            age: 20
        }, People.defaults);

        people1.prototype = People.prototype;

        People.prototype = {
            constructor: People
        };

        People.prototype.sayName = function() {
            console.log(this.name);
        };

        People.prototype.sayName.call(people1);

        console.log(Object.getPrototypeOf(people1) == People.prototype);


        people2 = new People();

        console.log(people2.prototype);

这一种类型似乎略繁琐,但他确实实现了默认值,当然,相比之下实在是不够优秀,有各种问题,包括constructor之类的。这里我们之所以不直接定义函数,而是先用对象,再里面再加一个方法,是因为javascript没有命名空间(namespace)的概念,万一重名了=A=~

        function Person(name, age, job, friends) {
            this.name = name || "hi";
            this.age = age || 19;
            this.job = job || "Student";
            this.friends = friends || "No one";
        }

相比之下,我们来看这样一段= =唔,很明显他更加常用。

HTML 条件注释判断浏览器及检验HTML5

<!--[if !IE]><!--> 除IE外都可识别 <!--<![endif]-->
<!--[if IE]> 所有的IE可识别 <![endif]-->
<!--[if IE 6]> 仅IE6可识别 <![endif]-->
<!--[if lt IE 6]> IE6以及IE6以下版本可识别 <![endif]-->
<!--[if gte IE 6]> IE6以及IE6以上版本可识别 <![endif]-->
<!--[if IE 7]> 仅IE7可识别 <![endif]-->
<!--[if lt IE 7]> IE7以及IE7以下版本可识别 <![endif]-->
<!--[if gte IE 7]> IE7以及IE7以上版本可识别 <![endif]-->
<!--[if IE 8]> 仅IE8可识别 <![endif]-->
<!--[if IE 9]> 仅IE9可识别 <![endif]-->

- 阅读剩余部分 -

CSS selection伪元素

在一个网站上看到选中文字时的效果和平时的表现有些不同,顿时就习惯性的F12了,结果看到selection这个伪元素,去MDN查了一下各种伪元素:
https://developer.mozilla.org/zh-CN/docs/Web/CSS/Pseudo-elements

钉子菊苣的博客有一篇博文,讲的是关于::before::after的高级用法,感觉相当赞:你所不知的 CSS ::before 和 ::after 伪元素用法

关于selection,可以看https://developer.mozilla.org/en-US/docs/Web/CSS/::selection

FF需要进行特殊处理,也就是-moz-

于是可以这样:

*::selection {
    color: #000;
    background: transparent;
}

*::-moz-selection {
    color: #000;
    background: transparent;
}

愉快的玩耍啦~

PHP Maximum execution time of 30 seconds exceeded解决方案

在安装drupal的时候,由于需要大量建立表,于是乎Loading的时候超过30s,每次都跪,发现报错是在database.incLine 2171,在前面加上set_time_limit()函数。

set_time_limit(0)表示不设置超时时间。

也可以修改php.ini:
max_execution_time = 300
秒可以设置更大,然后重起服务

SkyTips出炉 - 第一个前端作品

上次在仿制Hokster-domain-index时,想做一些tooltips的效果,但自己实际做起来却不知道从何下手,于是决定单独制作Tooltips,于是之后的SkyTips应运而生。

其实也还好,花了两天时间,当然之前也做了一些准备工作,比如前一篇文章中的那些东西,其实是Tooltips制作学习的衍生产物吧。

SkyTips讲究简单实用,我Javascript水平还很臭,所以,能用CSS的我绝不会用JS去做(这也是为了避免自己太过依赖JS并练习CSS),可以用纯粹的引入CSS来使用,具体在发布页都有说,下载可见:https://github.com/csvwolf/SkyTips

如果有什么Bug,请留言wwww如果能给我一些指导性建议就更好啦。

当然在测试完三大浏览器之后,发现其实SkyTips!不足之处太多了,还有很多值得改进的余地,甚至说是重写,这也是后话了=w=

- 阅读剩余部分 -

Javascript 变量提升

变量提升,会把变量的声明提到作用域的前面,于是我就被坑了一次又一次= =啊原来只是声明啊。

于是比如:

console.log(a);
var a = 0;

只会输出undefined。

这一点,在对象里是一样的~所以千万不要在被坑哟=w=