响应式web设计读书笔记

2017-06-01  本文已影响17人  星月西

1.响应式web设计基础

/* 超小屏幕(手机,小于 768px) */
/* 没有任何媒体查询相关的代码,因为这在 Bootstrap 中是默认的(还记得 Bootstrap 是移动设备优先的吗?) */

/* 小屏幕(平板,大于等于 768px) */
@media (min-width: @screen-sm-min) { ... }

/* 中等屏幕(桌面显示器,大于等于 992px) */
@media (min-width: @screen-md-min) { ... }

/* 大屏幕(大桌面显示器,大于等于 1200px) */
@media (min-width: @screen-lg-min) { ... }

2.媒体查询

css中的媒体查询

@media (min-width: 768px){
        background-color: red;
    }

link标签中的媒体查询

<link rel="stylesheet" media="screen and (min-width: 800px)" href="style.css">

注意:大多数情况下,不需要指定screen这种媒体类型,使用简写语法即省略关键词all,换句话说,如果不指定关键字,则关键字就是all

3.弹性布局

弹性布局,即网站的宽度都以百分比形式定义。

.left{
    position: absolute;
    width: 300px;
    left: -300px;

    @media (min-width: 800px){
        position: relative;
        left: 0;
        width: 30%;
    }
}

4.常用布局分析

<nav class="nav">
            <a href="#">Home</a>
            <a href="#">About</a>
            <a href="#">Contact</a>
        </nav>
.nav{
    display: flex;
    height: 3rem;
    padding: 0 1rem;
    align-items: center;
    background-color: #000;

    a{
        color: #fff;
        margin-right: 1rem;
    }

    a:last-child{
        margin-left: auto;
    }
}

另外,可以结合媒体查询,来实现较小视口垂直显示,较大视口水平显示:

.nav{
    display: flex;
    min-height: 3rem;
    padding: 0 1rem;
    flex-direction: column;
    align-items: center;
    background-color: #000;

    @media (min-width: 800px){
        flex-direction: row;
    }

    a{
        color: #fff;

        @media (min-width: 800px){
            margin-right: 1rem;

            &:last-child{
                margin-left: auto;
            }
        }
    }   
} 
html{
    height: 100%;
}

body{
    display: flex;
    height: 100%;
    flex-direction: column;
}

main{
    flex: 1;
}

footer{
    padding: 2rem;
    background-color: #000;
}

关键点就是,设置body整体height: 100%,让main部分flex-grow: 1自动伸展占据空余空间

5.响应式图片

图片进行分辨率切换,可以根据视口空间的大小显示分辨率不同的图片,让高分辨率的用户看到高分辨率的图片

![](pic_sm.jpg)

提供不同分辨率的图片,由浏览器来决定选择哪一个

![](pic_sm.jpg)

sizes对浏览器给出提示,根据需要宽度的不同决定选择不同图片

<picture>
        <source media="(min-width: 30em)" srcset="md.jpg">
        <source media="(min-width: 60em)" srcset="bg.jpg">
        ![](sm.jpg)
    </picture>

根据视口宽度的不同,提供不同的图片,其中img标签作为不支持picture标签的后备

6.html5

<figure>
            ![](pic.jpg)
            <figcaption>pic</figcaption>
        </figure>
<details open>
        <summary>title</summary>
        <p>content</p>
    </details>
<h1>title</h1>
<p>subtitle</p>

7.CSS3小技巧

overflow: hidden;
text-overflow: ellipsis;
.item:nth-child(4n+1):nth-last-child(-n+4),
.item:nth-child(4n+1):nth-last-child(-n+4) ~ .item{
        border-bottom: 0;
}
:root{
    --MyColor: #ccc;
}
.var{
    color: var(--MyColor);
}

8.HTML5表单

    <fieldset>
        <legend>color</legend>
        <div>
            <label for="name">name:</label>
            <input type="text" id="name">
        </div>
    </fieldset>
        input{
            padding: 4px 6px;
            background-color: #f1f1f1;
            font-size: 16px;
            border: 1px solid #f1f1f1;
            outline: none;
            box-shadow: inset 0 -3px 0 #739327;

            background: radial-gradient(400px circle,  #fff 99%, transparent 99%), #f1f1f1;
            background-position: -400px 90px, 0 0;
            background-repeat: no-repeat, no-repeat;
            transition: transform .4s, box-shadow .4s, background-position .2s;

        }

        input:focus{
            border: 1px solid #739327;
            box-shadow: inset 0 -3px 0 #739327,
                0 0 15px 5px #ebebeb;
            transform: scale(1.06);
            background-position: 0 0, 0 0;
        }
上一篇 下一篇

猜你喜欢

热点阅读