(0)写在前面
  讲述知乎上看到的一篇文章中的一个案例,让我脑洞大开,佩服至极,特意第二天找到原文赞赏了

5元,原文地址https://zhuanlan.zhihu.com/p/27258076,案例用了很多css3的属性。
(1)效果演示

(2)知识点及效果

<div class="trunc-list-wrapper" id="mylist">
<ul class="trunc-list">
<li>
<a href="#">Home</a>
</li>
...
<li aria-hidden="true" class="control control--open">
<a href="#mylist"><span>more</span></a>
</li>
<li aria-hidden="true" class="control control--close">
<a href=""><span>less</span></a>
</li>
</ul>
</div>
.trunc-list-wrapper {
height: 2.25em;
overflow: hidden;
padding-right: 3.5em;
}
.trunc-list { display: flex;
flex-wrap: wrap;
position: relative;
}
.trunc-list li { flex: 1 0 auto;
}
.control {
position: absolute;
top:;
right: -3.5em;
width: 3.5em;
height: calc((2.25em - 100%) * -1000);
max-height: 2.25em;
overflow: hidden;
}
.control--close {
display: none;
}

上述为简易代码

display: flex;使.trunc-list内部元素成为flex项目

flex-wrap: wrap; 宽度不够时内部元素将换行,所以浏览器窗口缩放到一定宽度时,.trunc-list的高度发生

变化。
看不见缩放的元素是因为.trunc-list-wrapper的 height: 2.25em;overflow: hidden;导致

元素被隐藏。
trunc-list高度发生变化使得 height: calc((2.25em - 100%) * -1000);产生作用,可以看见more了, 
max-height: 2.25em;限制了最大高度。

点击more,因为
#myList是一个有效描点,下面的css生效

.trunc-list-wrapper:target .control--open {
display: none;
} .trunc-list-wrapper:target .control--close {
display: block;
}

同时下面的css生效

.trunc-list-wrapper:target {
height: auto;
}

隐藏的元素可以看见了

点击less时,因为是无效的锚点,相对于对上述效果的清除。


4.完整的代码

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>响应式的另一种思考</title>
<style>
/* Basic common settings: */ * {
box-sizing: border-box;
} html {
line-height: 1.25;
font-family: 'Lato', sans-serif;
} .trunc-list-wrapper {
height: 2.25em;
overflow: hidden;
padding-right: 3.5em;
} .trunc-list {
list-style: none;
display: flex;
flex-wrap: wrap;
margin: 0;
padding: 0;
position: relative;
} .trunc-list li {
margin: 0;
padding: 0;
flex: 1 0 auto;
} .trunc-list a {
display: block;
padding: 0.5em;
text-align: center;
white-space: nowrap; color: #fff;
background:red;
} .trunc-list a:hover,
.trunc-list a:active,
.trunc-list a:focus {
background: red;
} .control {
position: absolute;
top: 0;
right: -3.5em;
width: 3.5em; height: calc((2.25em - 100%) * -1000);
max-height: 2.25em; overflow: hidden;
} .control a {
text-decoration: none;
} .control span {
font-size: 0.75em;
font-style: italic;
} .control--close {
display: none;
} .trunc-list-wrapper:target {
height: auto;
} .trunc-list-wrapper:target .control--open {
display: none;
} .trunc-list-wrapper:target .control--close {
display: block;
} </style>
</head>
<body>
<div class="trunc-list-wrapper" id="mylist">
<ul class="trunc-list">
<li>
<a href="#">Home</a>
</li>
<li>
<a href="#">Blog</a>
</li>
<li>
<a href="#">About Us</a>
</li>
<li>
<a href="#">Contact Us</a>
</li>
<li>
<a href="#">Help</a>
</li>
<li>
<a href="#">Login</a>
</li>
<li>
<a href="#">Sign In</a>
</li>
<li aria-hidden="true" class="control control--open">
<a href="#mylist"><span>more</span></a>
</li>
<li aria-hidden="true" class="control control--close">
<a href=""><span>less</span></a>
</li>
</ul>
</div> <p>改变视口宽度大小来观察效果</p>
</body>
</html>

不用媒体查询做web响应式设计-遁地龙卷风的更多相关文章

  1. 【media-queries】媒体查询,为了响应式设计而生

    目录 简介 语法 常用尺寸 一 简介 针对现在纷杂的设备,css3中加入,可以查询你的浏览类型(screen彩色屏幕, print, all)和css属性判断. 最常用的就是查询屏幕大小,给予适合的展 ...

  2. css3媒体查询实现网站响应式布局

    最常见的办法就是基类(最常用的网站布局)+扩展类(几种不同的网站布局类)来实现不同的布局. <!–使用说明:网站基本布局,使用class="layout";使用ipad访问时 ...

  3. 移动WEB 响应式设计 @media总结

    第一种: 在引用样式的时候添加 <link rel="stylesheet" media="mediatype and|not|only (media featur ...

  4. 响应式设计的思考:媒体查询(media query)

    Jason Grigsby发表了篇文章,<CSS Media Query for Mobile is Fool’s Gold>对媒体查询(media query)吐槽,大意是在移动设备上使 ...

  5. 通过媒体查询来实现 WPF 响应式设计

    WPF 客户端经常需要运行在各种不同大小屏幕下,为了显示友好,所以开发的时候都需要考虑响应式设计. 布局往往通过指定比例,而不直接指定准确的大小来实现响应式布局(如 Width="3*&qu ...

  6. web响应式图片设计实现

    .header { cursor: pointer } p { margin: 3px 6px } th { background: lightblue; width: 20% } table { t ...

  7. web设计经验<一> 提升移动设备响应式设计的8个建议

    今天看到一些关于web设计的一些建议和设计经验,拿出来分享分享. 第一篇: 提升移动设备响应式设计的8个建议 一.直观性和易用性 在使用移动设备时,对于杂乱.复杂或者不直观的设计造成的混乱不佳的用户体 ...

  8. CSS 响应式设计

    响应式设计是指在不同分辨率的设备中,网页布局可以自适应的调整.这种弹性化的布局使网站在不同设备中的布局都比较合理,可以为不同终端的用户提供更加舒适的界面和更好的用户体验,其根本理念是使原本 PC 上的 ...

  9. css响应式设计

    响应式设计是指在不同分辨率的设备中,网页布局可以自适应的调整.这种弹性化的布局使网站在不同设备中的布局都比较合理,可以为不同终端的用户提供更加舒适的界面和更好的用户体验,其根本理念是使原本 PC 上的 ...

随机推荐

  1. Java集合之Map和Set

    以前就知道Set和Map是java中的两种集合,Set代表集合元素无序.不可重复的集合:Map是代表一种由多个key-value对组成的集合.然后两个集合分别有增删改查的方法.然后就迷迷糊糊地用着.突 ...

  2. [.NET] 《Effective C#》读书笔记(二)- .NET 资源托管

    <Effective C#>读书笔记(二)- .NET 资源托管 简介 续 <Effective C#>读书笔记(一)- C# 语言习惯. .NET 中,GC 会帮助我们管理内 ...

  3. Java实现压缩文件与解压缩文件

    由于工作需要,需要将zip的压缩文件进行解压,经过调查发现,存在两个开源的工具包,一个是Apache的ant工具包,另一个就是Java api自带的工具包:但是Java自带的工具包存在问题:如果压缩或 ...

  4. 如何运行一个vue工程

    在师兄的推荐下入坑vue.js ,发现不知如何运行GitHub上的开源项目,很尴尬.通过查阅网上教程,成功搭建好项目环境,同时对前段工程化有了朦朦胧胧的认知,因此将环境搭建过程分享给大家.   首先, ...

  5. C++模板学习:函数模板、结构体模板、类模板

    C++模板:函数.结构体.类 模板实现 1.前言:(知道有模板这回事的童鞋请忽视) 普通函数.函数重载.模板函数 认识. //学过c的童鞋们一定都写过函数sum吧,当时是这样写的: int sum(i ...

  6. ST-2

    1.第一个程序没有覆盖到下表为0的数.第二个程序找到的是x中第一个等于0的数的下标. 2.对于第一个程序:x = [2,3,5], y = 3 对于第二个程序:X = [2,0,6] 3.对于两个程序 ...

  7. MyBatis源码解读(3)——MapperMethod

    在前面两篇的MyBatis源码解读中,我们一路跟踪到了MapperProxy,知道了尽管是使用了动态代理技术使得我们能直接使用接口方法.为巩固加深动态代理,我们不妨再来回忆一遍何为动态代理. 我相信在 ...

  8. Linux主机通过代理服务器进行网络连接

    公司的不允许访问外网,但是访问外网需要配置代理,window配置均好配置,在Linux的命令行底下,一般的程序都是使用http_proxy和ftp_proxy这两个环境变量来获得代理设置的.1.在/e ...

  9. 【JAVAWEB学习笔记】24_filter实现自动登录和解决全局的编码问题

    过滤器Filter 学习目标 案例-自动登录 案例-解决全局的编码 一.过滤器Filter 1.filter的简介 filter是对客户端访问资源的过滤,符合条件放行,不符合条件不放行,并且可以对目标 ...

  10. 关于蓝桥杯嵌入式STM32的一点收获

    各社团成员培训时自己总结的一点材料,直接粘过来的,可能有些朋友看不明白,总之这个比赛吧:有很多技巧,掌握到技巧能省我们半个月时间,我说的是针对这个比赛,对于STM32还是要多多练习,总之STM32还是 ...