CSS网格布局笔记[转]

CSS网格布局笔记[转]

  • 开发者工具独立窗口:

创建网格容器

  •  示例1:

  •  示例2:

fr单位和repeat()函数示例1:

  • 示例2

  • 示例3:

网格单元和网格区域

  •  示例1:

  • 示例2:

  •  示例3:

  •  示例3:

  • 示例4: 

 

  •  解决空白区域:

网格轨道中使用minmax()函数

  • 示例1:

  • 示例2:

网格对齐 justify-items & align-items

  • 示例1:默认情况:

  •  示例2:

  •   示例3:

  • 示例4:

  •  示例5:

  •  示例6:

  •  示例7:

元素对齐 justify-self & align-self

  • 示例1:

  • 示例2:

网格元素重叠和z-index

  • 示例:

  •  通过网格线查看:

  • 图片设置:

  • 完整代码:
<main class="grid">
  <div class="img1">
    <img src="https://res.cloudinary.com/brandonzhang/image/upload/v1638360903/brandonzhang.cn/462030_rwbdc2.jpg" alt="">
  </div>
  <div class="text1">
    <h2>Place</h2>
    <p>Proin id dignissim lectus, vitae hendrerit mi. </p>
  </div>
  <div class="img2">
    <img src="https://res.cloudinary.com/brandonzhang/image/upload/v1638360903/brandonzhang.cn/462031_hyh3ny.jpg" alt="">
  </div>
  <div class="text2">
    <h2>Place</h2>
    <p>Proin id dignissim lectus, vitae hendrerit mi. </p>
  </div>
  <div class="img3">
    <img src="https://res.cloudinary.com/brandonzhang/image/upload/v1638360903/brandonzhang.cn/462032_kshgad.jpg" alt="">
  </div>
  <div class="text3">
    <h2>Place</h2>
    <p>Proin id dignissim lectus, vitae hendrerit mi. </p>
  </div>
  <p class="content">
    Proin id dignissim lectus, vitae hendrerit mi. Sed egestas est turpis, ac pretium nisl elementum ac. Nunc et risus sit amet sem malesuada lobortis. Fusce vestibulum, purus vitae euismod lacinia, nunc odio maximus metus, eu suscipit ex est sed nunc. Aliquam vel diam sit amet quam laoreet vehicula. Etiam tortor lectus, tempor quis luctus eu, tristique eget mauris. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas.
  <br><br>
Nullam aliquam mollis lorem eu feugiat. Vivamus eleifend diam vel libero pharetra vehicula. Fusce sit amet enim elit. Suspendisse et fringilla ligula. Pellentesque ac quam sapien. Duis tincidunt mattis ipsum, ut mollis quam maximus vel. Integer a lacus mauris. 
  </p>
</main>
@import url("https://fonts.googleapis.com/css?family=Lato:400,400i,700");
* {
  box-sizing: border-box;
}
body {
  font-family: Lato;
  font-size: 0.8rem;
  padding: 2rem;
}
h2 {
  margin-bottom: 0;
}
p {
  margin-top: 0.1em;
}

img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}

.grid {
  display: grid;
  grid-template-columns: 20ch 1fr  calc(20ch + 1rem) 1fr 2rem minmax(15ch, 30ch);
  grid-template-rows: 25vh 20vh 10vh 15vh 15vh;
}

.img1 {
  grid-column: 1 / span 2;
  grid-row: 1 / span 3;
  
}

.text1 {
  grid-column: 1;
  grid-row: 4;
}

.img2 {
  grid-column: 2 / span 2;
  grid-row: 3 / -1;
  border: 0.5rem solid white;
  z-index: 1;
}

.text2 {
  grid-column: 1;
  grid-row: 5;
}

.img3 {
  grid-column: 3 / span 2;
  grid-row: 2 / span 2;
  padding-left: 1rem;
}

.text3 {
  grid-column: 3;
  align-self: end;
  padding-left: 1rem;
}

.content {
  grid-column: 6;
  grid-row: 2 / span 4;
  font-size: 0.8rem;
  
}

auto-fit和minmax创建灵活轨道

  • flex示例:

  •  grid示例:

  • auto-fill 与 auto-fit

命名网格区域并在媒体查询中更换布局

<header>Header / 页眉</header>
<main>Content / 正文</main>
<footer>Footer / 页脚</footer>
@import url("https://fonts.googleapis.com/css?family=Lato:400,400i,700");
* {
  box-sizing: border-box;
}

body {
  display: grid;
  grid-template-columns: 200px 1fr;
  grid-template-rows: min-content 1fr min-content;
  grid-template-areas:
    "header content"
    "header content"
    "header footer";
}

@media (max-width: 768px) {
  body {
    grid-template-areas:
      "header  header"
      "content content"
      "footer  footer";
  }
}

header {
  grid-area: header;
}

main {
  grid-area: content;
}

footer {
  grid-area: footer;
}

body {
  font-family: Lato;
  margin: 0;
  min-height: 100vh;
  gap: 1rem;
  font-size: 2rem;
  color: white;
  text-align: center;
}

body > * {
  background-color: #21BBD4;
  padding: 1rem 2rem;
}
header {
  background: #4ECB71;
}
main {
  background: #D99BFF;
}
footer {
  background: #85B6FF;
}

命名网格线并使用命名线布局

  • 示例:

<section>
  <div class="full-width">
    I'm a full-width content!<br>
    全屏
  </div>
  
  <div class="wide-width">
    I'm a wide-width content!<br>
    宽屏
  </div>
  
  <div class="narrow-width">
    I'm a narrow-width content!<br>
    窄屏
  </div>
</section>
@import url("https://fonts.googleapis.com/css?family=Lato:400,400i,700");
* {
  box-sizing: border-box;
}

section {
  display: grid;
  grid-template-columns: [full-start] 2rem [wide-start] 4rem [narrow-start] 1fr [narrow-end] 4rem [wide-end] 2rem [full-end];
}

.full-width {
/*   grid-column-start: full-start;
  grid-column-end: full-end; */
/*   grid-column: full-start / full-end; */
  grid-column: full;
}

.wide-width {
  grid-column: wide;
}

.narrow-width {
  grid-column: narrow;
}

.full-width {
  background: #D99BFF;
}

.wide-width {
  background: #FF9790;
}

.narrow-width {
  background: #4ECB71;
}

body {
  font-family: Lato;
  margin: 0;
  min-height: 100vh;
  gap: 1rem;
  font-size: 1rem;
  color: white;
  text-align: center;
}

section > * {
  padding: 1rem 2rem;
}

对齐网格轨道align-content & justify content

  •  示例1:

  •  示例2

minmax(min(100%, 300px), 1fr) 省去媒体查询

  • 使用媒体查询

  • 不使用媒体查询:

适合练手的CSS Grid小游戏

display: contents

隐式网格

  • 示例:

CSS Grid Generator

引入自定义属性(Custom Properties)

/* stripe网站:https://stripe.com/en-gb-us/about */
/* 移动端优先设计理念 Mobile First Design */
.customers-grid {
  margin: 0 auto;
  padding: 0 20px;
  margin: 20px 0;
  max-width: 1040px;
  --has-columns: 2;
  --has-rows: calc(12 / var(--has-columns));
  
  display: grid;
  gap: 15px;
  grid-template-columns: repeat(var(--has-columns), 1fr);
  grid-template-rows: repeat(var(--has-rows), 1fr);
}

/* 当屏幕宽度大于600px时 */
@media (min-width: 600px) {
  .customers-grid {
/*     grid-template-columns: repeat(3, 1fr);
    grid-template-rows: repeat(4, 1fr); */
    --has-columns: 3;
/*     --has-rows: 4; */
  }
}

/* 当屏幕宽度大于800px时 */
@media (min-width: 800px) {
  .customers-grid {
/*     grid-template-columns: repeat(4, 1fr);
    grid-template-rows: repeat(3, 1fr); */
    --has-columns: 4;
/*     --has-rows: 3; */
  }
}

学习slack.com网格布局

  • 代码:
<main class="cards">
  
  <div class="card full">
    ONE
  </div>
  <div class="card full">
    TWO
  </div>
  <div class="card">
    THREE
  </div>
  <div class="card">
    FOUR
  </div>
  
  <div class="card">
  </div>
  
</main>
.cards {
    display: grid;
    grid-template-areas:
      "one two three"
      "one two four";
    grid-template-columns: repeat(4, 1fr);
    grid-template-rows: repeat(2, 100px) 100px;
    gap: 1rem;
    padding: 2rem;
}

.card.full:nth-of-type(1) {
  grid-area: one;
}

.card.full:nth-of-type(2) {
  grid-area: two;
}

.card:nth-of-type(3) {
  grid-area: three;
}

.card:nth-of-type(4) {
  grid-area: four;
}

@media (max-width: 800px) {
  .cards {
    grid-template-columns: repeat(3, 1fr);
  }
}

@media (max-width: 580px) {
  .cards {
    grid-template-columns: repeat(2, 1fr);
    grid-template-areas:
      "one one"
      "two two"
      "three four";
    grid-template-rows: repeat(2, 200px) repeat(2, 100px);
  }
}

@media (max-width: 400px) {
  .cards {
    grid-template-columns: 1fr;
    grid-template-areas:
      "one"
      "two"
      "three"
      "four";
    grid-template-rows: repeat(2, 200px) repeat(3, 100px);
  }
}


/* 本次视频不会再次用到的代码放在底部 */
* {
  box-sizing: border-box;
}

body {
  margin: 0;
  font-family: Lato;
  background-color: #F8F9FA;
  color: #333;
}

ul {
  padding: 0;
}

li {
  list-style: none;
}


img {
    max-width: 100%;
    border-radius: 10px;
    height: 150px;
    width: 100%;
    object-fit: cover;
}

.card {
  box-shadow: 0 2px 40px rgba(0 0 0 / 15%);
  background-color: #D99BFF;
  border-radius: 10px;
  display: flex;
  align-items: center;
  justify-content: center;
  font-weight: bold;
  padding: 1rem;
}

inline-grid 

  •  代码:
<h1>修改密码</h1>
<div class="field">
  <label for="firstname">
    旧密码
  </label>
  <input 
    id="firstname" 
    type="password" 
    name="firstname"
    placeholder="请输入旧密码">
</div>
<div class="field">
  <label for="phone">
    新密码
  </label>
  <input 
    id="phone" 
    type="password" 
    name="phone"
    placeholder="请输入新密码">
</div>

<div class="wrap">
<div class="container">
  <button class="button button--confirm">
  确认修改
  </button>
  <button class="button button--cancel">
  取消
  </button>
</div>
</div>  
@import url("https://fonts.googleapis.com/css?family=Lato:400,400i,700");
* {
  box-sizing: border-box;
}
body {
  margin: 0;
  height: 100vh;
  background-color: #234;
  font-family: 'Lato';
  padding: 4vmin;
}

.container {
  display: inline-grid;
  grid-template-columns: 1fr 1fr;
/*   margin: 0 auto; */
}

.wrap {
/*   text-align: center; */
/*   display: flex;
  justify-content: center; */
  display: grid;
  place-content: center;
}

.button {
  background: #069ccd;
  outline: none;
  border: none;
  padding: .5rem 2rem;
  border-radius: 1rem;
  color: white;
  cursor: pointer;
  text-align: center;
}


h1 {
  color: white;
  text-align: center;
}



.button--cancel {
  background-color: white;
  border-color: #069ccd;
  color: #234;
}


.field {
  width: 100%;
  margin-inline: auto;
  font-family: 'Roboto', sans-serif;
  border: 2px solid #ddd;
  border-radius: 10px;
  padding: 12px 20px;
}

label {
  font-size: 16px;
  color: white;
}

input {
  font-size: 16px;
  width: 100%;
  margin-top: 6px;
  border: none;
  padding-inline: 0;
  background: transparent;
}

.field {
  margin-bottom: 1rem;
}

input:focus-visible {
  border: none;
  outline: none;
}

input:focus::placeholder {
  opacity: 0;
}

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值