响应式web设计读书笔记

1.响应式web设计基础

  • 弹性图片
    max-width: 100% 为图片设置最大宽度为其父容器宽度,可以保证图片正常时显示其自身宽度,当视口较小时,可以保证宽度为其父容器宽度。

  • 媒体查询
    最小宽度媒体查询,以最小屏幕为起点,在根据需求渐进扩充视觉和功能。bootstrap中栅格结构的媒体查询定义如下:

/* 超小屏幕(手机,小于 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

  • 应用
    根据下方的CSS样式会覆盖上方目标相同的CSS样式,就能一开始设置一套基准样式,以小屏幕为起点,根据需求渐进扩充视觉和功能,如很小视口只显示文本,较大视口中为文本添加图标。
  • 设置视口
    为了利用媒体查询,应该让浏览器按设备宽度来显示网页,而不是按980px的固定宽度显示网页,因此需要添加针对视口的meta标签
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    其中,width=device-width为设置视口宽度为设备宽度
    initial-scale=1.0为将网页内容为实际大小
    还可以添加user-scalable=no禁止用户缩放

3.弹性布局

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

  • 将固定像素大小转换为弹性比例大小
    结果=目标/上下文
  • 应用
    对于小屏幕可以将左边栏作为画外元素,只有用户点击了菜单图标才会滑入屏幕。
.left{
    position: absolute;
    width: 300px;
    left: -300px;

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

4.常用布局分析

  • 行内块
    行内块会在元素之间渲染空白,需要通过设置其父元素font-size为0来消除
    行内块中垂直居中也不容易,也不能一个块宽度固定,另一个块填充剩余空间
  • 浮动
    给浮动元素的宽度设置百分比,最终计算值在不同平台上结果不同,有些浏览器向上取整,有些浏览器向下取整
    需要清除浮动,才能避免父盒子折叠
  • 表格和表元
    使用display: table和display: table-cell,可以让一个元素在另一个元素内垂直居中
  • flexbox
    方便地垂直居中内容
    改变元素的视觉次序
    在盒子间插入空白,自动对齐
  • 应用:
    使用弹性盒布局实现左右两部分的导航栏,设置最后一个元素的margin-left: auto,其左外边距会用上该侧所有可用外边距。
<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.响应式图片

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

  • 通过srcset切换分辨率
![](pic_sm.jpg)

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

  • srcset与sizes切换宽度
![](pic_sm.jpg)

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

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

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

6.html5

  • 推荐模板
    HTML5 Boilerplate,包含有重置样式,modernizr可以检测浏览器支持哪些特性,并为html标签添加上相应的样式
  • <a>标签致敬
    可以把多个元素放入一个a标签中,但是不能把a或者button,form这种交互性元素放入同一个a标签里
  • main
    主内容区,文档中特有的内容,多个文档中重复出现的导航,版权,搜索表单等不算主内容
  • section
    通用区块,可以包装联系信息,新闻源,可以用来包装可用组件
  • nav
    主导航链接,可以用nav嵌套a来替代之前ul和li的导航
  • aside
    与旁边主内容不相关的内容,侧边栏等
  • figure和figcaption
    包装小区块,包含图片和小标题
<figure>
            ![](pic.jpg)
            <figcaption>pic</figcaption>
        </figure>
  • detail和summary
    展开和收起部件
<details open>
        <summary>title</summary>
        <p>content</p>
    </details>
  • h1到h6
    不推荐使用h1到h6标记副标题,副标题应该表示为
<h1>title</h1>
<p>subtitle</p>
  • article
    博客正文和新闻报道,包含一个独立的内容块,有自己的标题和内容

7.CSS3小技巧

  • 内容超过长度就会截断,并显示出...记号
overflow: hidden;
text-overflow: ellipsis;
  • 基于nth的选择
    图片每行放四个,将最后一行的图片的底部边框去掉
    先取出底部第一个元素,再取出其后面的兄弟元素
.item:nth-child(4n+1):nth-last-child(-n+4),
.item:nth-child(4n+1):nth-last-child(-n+4) ~ .item{
        border-bottom: 0;
}
  • css自定义变量
    可以通过:root将自定义变量定义在文档根元素上,使用var引用自定义变量
:root{
    --MyColor: #ccc;
}
.var{
    color: var(--MyColor);
}

8.HTML5表单

  • fieldset和legend标签
    可以用来给表单进行分组
    <fieldset>
        <legend>color</legend>
        <div>
            <label for="name">name:</label>
            <input type="text" id="name">
        </div>
    </fieldset>
  • autocomplete 自动补全,可以通过autocomplete=“off”禁用自动补全
  • autofocus 自动聚焦,谨慎使用
  • HTML5新输入类型
    • email
    • number
    • url
    • tel
    • search
    • pattern
    • color
    • date,month,week,time
    • range
  • 表单美化
    可以在视觉上显示输入框已聚焦,并且加入渐变效果,写在前面的背景会覆盖写在后面的背景
        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;
        }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,372评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,368评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,415评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,157评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,171评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,125评论 1 297
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,028评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,887评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,310评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,533评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,690评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,411评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,004评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,659评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,812评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,693评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,577评论 2 353

推荐阅读更多精彩内容

  • 一:在制作一个Web应用或Web站点的过程中,你是如何考虑他的UI、安全性、高性能、SEO、可维护性以及技术因素的...
    Arno_z阅读 1,156评论 0 1
  • 1、属性选择器:id选择器 # 通过id 来选择类名选择器 . 通过类名来选择属性选择器 ...
    Yuann阅读 1,631评论 0 7
  • 笔记参考自《响应式Web设计:HTML5和CSS3实践》,2013年出版内容说不上最新。如下是全书的章的目录:第 ...
    于晓鱼阅读 926评论 0 1
  • 1.行内元素和块级元素?img算什么?行内元素怎么转化为块级元素? 行内元素:和有他元素都在一行上,高度、行高及外...
    极乐君阅读 2,416评论 0 20