【问题标题】:Building a small responsive web design for desktop view, tablet view, and mobile为桌面视图、平板电脑视图和移动设备构建小型响应式网页设计
【发布时间】:2022-07-03 15:58:40
【问题描述】:

我是编码新手,并试图弄清楚如何一起使用 HTML、CSS 和媒体查询,以在桌面视图中并排创建相等容器的 3 项菜单。

在平板电脑视图中,菜单项移动到 2 个菜单项并停留在第一行,第三个菜单项移动到第二行,但跨越了第一行 2 个菜单项的长度。

在移动视图中,所有 3 个菜单项都堆叠在一起。请参阅下面的图片。我的桌面断点是 992 像素或更大,平板电脑视图是 768 像素和 991 像素,移动设备是 990 像素或更少。

我编写了以下 HTML 和 CSS 以尝试复制图像显示的内容。我的菜单项不响应我放入我的 css 文件的媒体查询。我只能为项目使用基本的响应式框架。

任何帮助或指导将不胜感激。

* {
  box-sizing: border-box;
}

h1 {
  font-family: calibri, sans-serif;
  width: 100%;
  margin: 10px;
  text-align: center;
}

div.container1 {
  background-color: #A0A0A0;
  font-family: calibri, sans-serif;
  width: 400px;
  border: 1px solid black;
  float: left;
  margin: 10px;
  overflow: hidden;
}

div.container2 {
  background-color: #A0A0A0;
  font-family: calibri, sans-serif;
  width: 400px;
  border: 1px solid black;
  float: left;
  margin: 10px;
  overflow: hidden;
}

div.container3 {
  background-color: #A0A0A0;
  font-family: calibri, sans-serif;
  width: 400px;
  border: 1px solid black;
  float: left;
  margin: 10px;
  overflow: hidden;
}

div#menu1 {
  font-family: calibri, sans-serif;
  height: 20px;
  width: 125px;
  background-color: #FF66B2;
  float: right;
  border-left: 1px solid black;
  border-bottom: 1px solid black;
  text-align: center;
  color: #000000;
  font-weight: bold;
}

div#menu2 {
  font-family: calibri, sans-serif;
  height: 20px;
  width: 125px;
  background-color: #990000;
  float: right;
  border-left: 1px solid black;
  border-bottom: 1px solid black;
  text-align: center;
  color: #FFFFFF;
  font-weight: bold;
}

div#menu3 {
  font-family: calibri, sans-serif;
  height: 20px;
  width: 125px;
  background-color: #FFE5CC;
  float: right;
  border-left: 1px solid black;
  border-bottom: 1px solid black;
  text-align: center;
  color: #000000;
  font-weight: bold;
}

p {
  font-family: calibri, sans-serif;
  margin-left: 10px;
  margin-right: 10px;
}


/* For tablets and large phones: */

@media (min-width: 768px) and (max-width: 991px) {
  background-color: green;
  .col-m-1 {
    width: 25%;
  }
  .col-m-2 {
    width: 25%;
  }
  .col-m-3 {
    width: 50%;
  }
}


/* For Desktop */

@media only screen and (min-width:992px) {
  .col-1 {
    width: 33.33%;
  }
  .col-2 {
    width: 33.33%;
  }
  .col-3 {
    width: 33.33%;
  }
}
<h1>Our Menu</h1>

<div class="container1 .col-1 .col-m-1">
  <div id="menu1">Chicken</div>
  <p>
    Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi. Lorem ipsum dolor sit amet, consectetur adipisicing elit,
    sed do eiusmod tempor
  </p>
</div>

<div class="container2 .col-2 .col-m-2">
  <div id="menu2">Beef</div>
  <p>
    Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi. Lorem ipsum dolor sit amet, consectetur adipisicing elit,
    sed do eiusmod tempor.
  </p>
</div>

<div class="container3 .col-3 .col-m-3">
  <div id="menu3">Sushi</div>
  <p>
    Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi. Lorem ipsum dolor sit amet, consectetur adipisicing elit,
    sed do eiusmod tempor.
  </p>
</div>

桌面:

平板电脑:

手机:

【问题讨论】:

  • 如果你了解 flex box css 就很简单:css-tricks.com/snippets/css/a-guide-to-flexbox
  • @GeekyQuentin,感谢您的帮助。我注意到在平板电脑视图中,当寿司项目移动到第二排时,它并没有跨越鸡肉和牛肉项目的长度。你能帮忙吗?媒体查询中使用的断点也未应用。

标签: html css


【解决方案1】:

我稍微修改了您的代码,并使用 flexbox 和 nth-child 选择器完成了这项工作。正是您在 3 个示例屏幕截图中要求的内容,采用移动优先方法完成。

* {
  box-sizing: border-box;
}
    
h1 {
  font-family: calibri, sans-serif;
  width: 100%;
  margin: 10px;
  text-align: center;
}

.flex-container .item {
  background-color: #A0A0A0;
  border: 1px solid black;
  font-family: calibri, sans-serif;
  margin: 1rem;
  overflow: hidden;
  padding: 1rem;
}
.flex-container .item .menu {
  height: 20px;
  width: 125px;
  float: right;
  border-left: 1px solid black;
  border-bottom: 1px solid black;
  text-align: center;
  color: #000000;
  font-weight: bold;
  
  transform: translate(1rem, -1rem)
}
.flex-container .item:nth-child(3n+1) .menu {
  background-color: #FF66B2;
}
.flex-container .item:nth-child(3n+2) .menu {
  background-color: #990000;
  color: white;
}
.flex-container .item:nth-child(3n+3) .menu {
  background-color: #FFE5CC;
}

.flex-container .item > *:nth-child(2) {
  margin-top: 0;
}
.flex-container .item > *:nth-last-child(1) {
  margin-bottom: 0;
}

@media (min-width: 768px) {
  .flex-container {
    display: flex;
    flex-wrap: wrap;
  }
  .flex-container .item {
    width: calc(50% - 2rem);
  }
  .flex-container .item:nth-child(3n+3) {
    width: calc(100% - 2rem);
  }
}
@media (min-width:992px) {
  .flex-container .item,
  .flex-container .item:nth-child(3n+3){
    width: calc((100% / 3) - 2rem);
  }
}
<h1>Our Menu</h1>

<div class="container flex-container">
  <div class="item">
    <div class="menu">Chicken</div>
    <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna  aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor.</p>
  </div>
  <div class="item">
    <div class="menu">Beef</div>
    <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna  aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor.</p>
  </div>
  <div class="item">
    <div class="menu">Sushi</div>
    <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna  aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor.</p>
  </div>
  <div class="item">
    <div class="menu">Chicken</div>
    <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna  aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor.</p>
  </div>
  <div class="item">
    <div class="menu">Beef</div>
    <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna  aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor.</p>
  </div>
  <div class="item">
    <div class="menu">Sushi</div>
    <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna  aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor.</p>
  </div>
</div>

【讨论】:

  • 感谢您的帮助。我有我需要遵守的规则。请参阅下面的规则。我想我不能使用你使用的一些方法,即使它们有效。它需要更简单的响应式设计。
  • 桌面版断点 992px 及以上 平板版断点 768x 和 991px 移动版断点 =,添加 3 个部分
    全部在一行 w/ 文本。使用媒体查询构建section的断点桌面视图992px及以上,3个section在屏幕上应该全部相等使用百分比定义宽度,使用浮动。 •章节标题区域应始终在章节的右上角,使用相对、绝对定位进行偏移
  • @BrianShelby 除了我使用 flex 而不是 float 之外,所有这些规则都已得到满足。媒体查询使用移动优先方法,这意味着代码针对移动设备,然后 768px 是下一个断点,992px 是最后一个断点——这通常被认为是进行响应式设计的最佳方式。所以这只是弹性与浮动的事情
  • 我明白了,谢谢,我正在做的课程似乎有点过时了,所以我只是想按照作业中的要求去做。非常感谢您的帮助。
【解决方案2】:

将所有容器包装在一个新的 &lt;div&gt; 容器中,使用类 container-box 并向其中添加以下 CSS 样式。

.container-box {
  display: flex;
  justify-content: center;
  flex-wrap: wrap;
}

将这些修改应用于您的代码:

* {
  box-sizing: border-box;
}

h1 {
  font-family: calibri, sans-serif;
  width: 100%;
  margin: 10px;
  text-align: center;
}

.container-box {
  display: flex;
  justify-content: center;
  flex-wrap: wrap;
}

div.container1 {
  background-color: #A0A0A0;
  font-family: calibri, sans-serif;
  width: 400px;
  border: 1px solid black;
  float: left;
  margin: 10px;
  overflow: hidden;
}

div.container2 {
  background-color: #A0A0A0;
  font-family: calibri, sans-serif;
  width: 400px;
  border: 1px solid black;
  float: left;
  margin: 10px;
  overflow: hidden;
}

div.container3 {
  background-color: #A0A0A0;
  font-family: calibri, sans-serif;
  width: 400px;
  border: 1px solid black;
  float: left;
  margin: 10px;
  overflow: hidden;
}

div#menu1 {
  font-family: calibri, sans-serif;
  height: 20px;
  width: 125px;
  background-color: #FF66B2;
  float: right;
  border-left: 1px solid black;
  border-bottom: 1px solid black;
  text-align: center;
  color: #000000;
  font-weight: bold;
}

div#menu2 {
  font-family: calibri, sans-serif;
  height: 20px;
  width: 125px;
  background-color: #990000;
  float: right;
  border-left: 1px solid black;
  border-bottom: 1px solid black;
  text-align: center;
  color: #FFFFFF;
  font-weight: bold;
}

div#menu3 {
  font-family: calibri, sans-serif;
  height: 20px;
  width: 125px;
  background-color: #FFE5CC;
  float: right;
  border-left: 1px solid black;
  border-bottom: 1px solid black;
  text-align: center;
  color: #000000;
  font-weight: bold;
}

p {
  font-family: calibri, sans-serif;
  margin-left: 10px;
  margin-right: 10px;
}


/* For tablets and large phones: */

@media (min-width: 768px) and (max-width: 991px) {
  background-color: green;
  .col-m-1 {
    width: 25%;
  }
  .col-m-2 {
    width: 25%;
  }
  .col-m-3 {
    width: 50%;
  }
}


/* For Desktop */

@media only screen and (min-width:992px) {
  .col-1 {
    width: 33.33%;
  }
  .col-2 {
    width: 33.33%;
  }
  .col-3 {
    width: 33.33%;
  }
}
<h1>Our Menu</h1>

<div class="container-box">
  <div class="container1 .col-1 .col-m-1">
    <div id="menu1">Chicken</div>
    <p>
      Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi. Lorem ipsum dolor sit amet, consectetur adipisicing elit,
      sed do eiusmod tempor
    </p>
  </div>

  <div class="container2 .col-2 .col-m-2">
    <div id="menu2">Beef</div>
    <p>
      Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi. Lorem ipsum dolor sit amet, consectetur adipisicing elit,
      sed do eiusmod tempor.
    </p>
  </div>

  <div class="container3 .col-3 .col-m-3">
    <div id="menu3">Sushi</div>
    <p>
      Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi. Lorem ipsum dolor sit amet, consectetur adipisicing elit,
      sed do eiusmod tempor.
    </p>
  </div>
</div>

【讨论】:

    【解决方案3】:

    你检查对了吗?

    当我检查时,我把每个项目都完美对齐了,不要使用

    <div class="container1 .col-1 .col-m-1"> 
    

    像这样 - 使用 div 容器

    <div class=containers>
    

    然后在 css 中使用 flex 或 block 或任何你想要的,这样会更容易使用。

    在css中

    /* For tablets and large phones: */ 
    

    这下有个错误,你没有设置background-color:green的元素

    【讨论】:

    • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
    猜你喜欢
    相关资源
    最近更新 更多
    热门标签