Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

CSS 高级布局技巧 #14

Open
sorrycc opened this issue Dec 13, 2016 · 20 comments
Open

CSS 高级布局技巧 #14

sorrycc opened this issue Dec 13, 2016 · 20 comments
Labels

Comments

@sorrycc
Copy link
Owner

sorrycc commented Dec 13, 2016

随着 IE8 逐渐退出舞台,很多高级的 CSS 特性都已被浏览器原生支持,再不学下就要过时了。

:empty 区分空元素

兼容性:不支持 IE8

Demo

假如我们有以上列表:

<div class="item">a</div>
<div class="item">b</div>
<div class="item"></div>

我们希望可以对空元素和非空元素区别处理,那么有两种方案。

:empty 选择空元素:

.item:empty {
  display: none;
}

或者用 :not(:empty) 选择非空元素:

.item:not(:empty) {
  border: 1px solid #ccc;
  /* ... */
}

:*-Of-Type 选择元素

兼容性:不支持 IE8

举例说明。

给第一个 p 段落加粗:

p:first-of-type {
  font-weight: bold;
}

给最后一个 img 加边框:

img:last-of-type {
  border: 10px solid #ccc;
}

给无相连的 blockquote 加样式:

blockquote:only-of-type {
  border-left: 5px solid #ccc;
  padding-left: 2em;
}

让奇数列的 p 段落显示红色:

p:nth-of-type(even) {
  color: red;
}

此外,:nth-of-type 还可以有其他类型的参数:

/* 偶数个 */
:nth-of-type(even)

/* only 第三个 */
:nth-of-type(3)

/* 每第三个 */
:nth-of-type(3n)

/* 每第四加三个,即 3, 7, 11, ... */
:nth-of-type(4n+3)

calc 做流式布局

兼容性:不支持 IE8

Demo

左中右的流式布局:

nav {
  position: fixed;
  left: 0;
  top: 0;
  width: 5rem;
  height: 100%;
}

aside {
  position: fixed;
  right: 0;
  top: 0;
  width: 20rem;
  height: 100%;
}

main {
  margin-left: 5rem;
  width: calc(100% - 25rem);
}

vwvh 做全屏滚动效果

兼容性:不支持 IE8

Demo

vwvh 是相对于 viewport 而言的,所以不会随内容和布局的变化而变。

section {
  width: 100vw;
  height: 100vh;
  
  display: flex;
  align-items: center;
  justify-content: center;
  text-align: center;
  
  background-size: cover;
  background-repeat: no-repeat;
  background-attachment: fixed;
}

section:nth-of-type(1) {
  background-image: url('https://unsplash.it/1024/683?image=1068');
}
section:nth-of-type(2) {
  background-image: url('https://unsplash.it/1024/683?image=1073');
}
section:nth-of-type(3) {
  background-image: url('https://unsplash.it/1024/683?image=1047');
}
section:nth-of-type(4) {
  background-image: url('https://unsplash.it/1024/683?image=1032');
}

body {
  margin: 0;
}
p {
  color: #fff;
  font-size: 100px;
  font-family: monospace;
}

unset 做 CSS Reset

兼容性:不支持 IE

Demo

body {
  color: red;
}
button {
  color: white;
  border: 1px solid #ccc;
}

/* 取消 section 中 button 的 color 设置 */
section button {
  color: unset;
}

column 做响应式的列布局

兼容性:不支持 IE9

Demo

nav {
  column-count: 4;
  column-width: 150px;
  column-gap: 3rem;
  column-rule: 1px dashed #ccc;
  column-fill: auto;
}

h2 {
  column-span: all;
}

(完)

@sorrycc sorrycc added the CSS label Dec 13, 2016
@luobotang
Copy link

学习了!

@fekata
Copy link

fekata commented Dec 14, 2016

不知不觉, IE8 也逐渐退出舞台了,感觉IE6还是昨天

@xinghunMeng
Copy link

mark

@ascoders
Copy link

用 all + unset 做 CSS Reset

兼容性:不支持 IE

section button {
    all: unset;
}

@MichealWayne
Copy link

已收,可惜calc、vw、vh等一些属性需要安卓4.4以上,还是没能用上

@yuanxj1024
Copy link

如今是等待安卓低版本系统淘汰-_-~

@Demy-ouyang
Copy link

非常棒的分享,提示一下有错别字哦,(让奇数列的 p 段落先死红色)显示。。。

@sorrycc
Copy link
Owner Author

sorrycc commented Dec 16, 2016

@Demy-ouyang 感谢提醒,已修正。

@amowu
Copy link

amowu commented Dec 16, 2016

egghead 的 Learn Advanced CSS Layout Techniques

@ooodlx
Copy link

ooodlx commented Dec 19, 2016

get~ 学习了

@jstf9673
Copy link

mark

@JohnnieFucker
Copy link

calc 应该慎用,特别是在一些列表里。性能很差的。

@zhiqiang21
Copy link

很多属性移动端支持的都不好呀

@shfshanyue
Copy link

shfshanyue commented Feb 4, 2017

让无内容的 a 标签显示其 href

a:empty::after {
  content: attr(href);
}

@lkdghzh
Copy link

lkdghzh commented Jun 14, 2017

mark

@jin5354
Copy link

jin5354 commented Jun 14, 2017

vw 和 vh 在 IE9-10 下行为与现代浏览器不同,要注意

@Fiv5
Copy link

Fiv5 commented Dec 22, 2017

mark!

@pobing
Copy link

pobing commented Jan 16, 2018

mark

@yuanxj1024
Copy link

请问 vw/vh ->rem 有比较好的转换方案么?

@yilidan
Copy link

yilidan commented Jan 16, 2019

mark

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests