html 如何将Flex div对齐到中心并完全适合屏幕,而不考虑设备屏幕宽度?

lnlaulya  于 2022-11-27  发布在  其他
关注(0)|答案(1)|浏览(114)

这是我的HTML代码:

<div class="bg-image"></div>

<div class="flex-container">
        <div class="left arrow">
            <button class="btn" style="background-color: azure; border: 2px solid black;" id="left"><i class="fas fa-angle-double-left"></i></button>
        </div>
        <div class="bg-text" id="first_div">
            <h4><u>Newspaper particulars</u><i class="fa fa-sign-out" style="float: right; cursor: pointer;"></i></h4><br>
            <ul>
                <li><label for="date">Select date</label><br></li>
                <input type="date" id="date" name="date" style="text-align: center; width: 100%;"><br><br>
                <li><label for="unit">Select division</label><br></li>
                <select name="unit" id="unit" style="width: 100%; text-align: center;">
                    <option value="default" id="default">Click to select</option>
                    <option value="HQ">HQ</option>
                </select><br><br>
                <li><label for="cat">Select news category</label><br></li>
                <div id="cat" style="border: 2px solid white; padding: 5px;">
                    <input type="radio" id="newspaper" name="category" value="News paper">
                    <label for="newspaper">News paper</label><br>
                    <input type="radio" id="newsportal" name="category" value="News portal">
                    <label for="newsportal">News portal</label><br>
                    <input type="radio" id="socialmedia" name="category" value="Social media">
                    <label for="socialmedia">Social media</label>
                </div>
            </ul>
        </div>
        <div class="para" id="second_div">
            <div class="container">
                <span id="preview_text" style="text-align: center; vertical-align: middle; color: red;">Image preview</span>
            </div>
        </div>
        <div class="right arrow">
            <button class="btn" style="background-color: azure; border: 2px solid black;" id="right"><i class="fas fa-angle-double-right"></i></button>
        </div>
        <div id="but">
            <button type="button" class="btn btn-primary btn-block">Upload</button>
        </div>
    </div>

这是我的CSS:

.bg-image {
  /* The image used */
  background-image: url("/background.jpg");
  
  /* Add the blur effect */
  filter: blur(8px);
  -webkit-filter: blur(8px);
  
  /* Full height */
  height: 100%; 
  
  /* Center and scale the image nicely */
  background-position: center;
  background-repeat: no-repeat;
  background-size: cover;
}

/* Position text in the middle of the page/image */
.left.arrow{
  /* margin-top: 30%; */
  margin: auto 0;
  z-index: 2;
  width: fit-content;
  padding: 10px;
  height: fit-content;
}
.right.arrow{
  /* margin-top: 30%; */
  margin: auto 0;
  z-index: 2;
  width: fit-content;
  padding: 10px;
  height: fit-content;
}
.bg-text {
  background-color: rgb(0,0,0); /* Fallback color */
  background-color: rgba(0,0,0, 0.4); /* Black w/opacity/see-through */
  color: white;
  font-weight: bold;
  border: 3px solid #f1f1f1;
  z-index: 2;
  height: 100%;
  width: fit-content;
  padding: 20px;
  height: fit-content;
}
.para{
  background-color: rgba(0, 0, 0, 0.329); /* Fallback color */
  background-color: rgba(0,0,0, 0.4); /* Black w/opacity/see-through */
  color: white;
  font-weight: bold;
  border: 3px solid #f1f1f1;
  z-index: 2;
  width: 50%;
  padding: 10px;
  text-align: center;
}
.flex-container {
display: flex;
width: 70%;
margin: 0 auto;
position:fixed;
left: 20%;
margin-top: -9em; /*set to a negative number 1/2 of your height*/
margin-left: -15em; /*set to a negative number 1/2 of your width*/
}
.container{
width:100%;
height:100%;
max-height: 100%;
}
#preview_text{
line-height: 500px;
}
#but{
  display: flex;
  margin: 0 auto;
  position: absolute; 
  top:100%;
  left: 35%;
}

我的问题是,无论我如何修改CSS,flex div永远不会位于屏幕的中心。有时当我试图在移动的屏幕上查看html页面时,flex div中的一个div会比另一个长。我的要求是,flex div中的两个div在任何时候都应该等高。整个flex div应该位于屏幕的中心。
but div应该位于flex div的下方,并且应该位于相对于flex div的中心。left arrowright arrow div也应该位于中心(也相对于flex div)。这是我想要的图形表示:
enter image description here
我该怎么办?请帮帮我。

guykilcj

guykilcj1#

but div开始,我认为最好把它向上移动一级,然后创建一个新的容器,这样就可以不用绝对值来定位div了。
第一个
当你使用div作为背景时,你需要在这里保留position: fixed。现在要将but居中,你可以使用align-self,因为在容器中使用align-items会使子对象稍后收缩。

#but {
  align-self: center;
}

要使所有flex-container子项具有相同的高度,请删除所有高度属性,因为这是flex-box的默认行为(在行方向时)。要使parabg-text div具有相同的宽度,请使用flex: 1。只要有足够的空间,这将使它们增长到相同的大小。

.left.arrow {
  margin: auto 0;
  z-index: 2;
  padding: 10px;
}

.right.arrow {
  margin: auto 0;
  z-index: 2;
  padding: 10px;
}

.bg-text {
  background-color: rgb(0, 0, 0);
  /* Fallback color */
  background-color: rgba(0, 0, 0, 0.4);
  /* Black w/opacity/see-through */
  color: white;
  font-weight: bold;
  border: 3px solid #f1f1f1;
  z-index: 2;
  padding: 20px;
  flex: 1;
}

.para {
  background-color: rgba(0, 0, 0, 0.329);
  /* Fallback color */
  background-color: rgba(0, 0, 0, 0.4);
  /* Black w/opacity/see-through */
  color: white;
  font-weight: bold;
  border: 3px solid #f1f1f1;
  z-index: 2;
  padding: 20px;
  text-align: center;
  flex: 1;
}

看起来您要将preview_text置中。让我们再次使用flex-box。

.container {
  height: 100%;
  display: flex;
  flex-direction: column;
  justify-content: center;
}

#preview_text {
  /* line-height: 500px; */
}

目前flex-container使用的是全角。为了限制它,你可以使用固定的边距或固定的宽度。使用百分比会在小屏幕上产生较大的边距,除非你为不同的屏幕大小设置不同的值(使用媒体查询或calc和最小/最大函数)。让我们使用固定的宽度和margin: auto来保持它的集中。

.flex-container {
  display: flex;
  max-width: 800px;
  margin: 0 auto;
  width: 100%;
}

最终结果:
第一个

相关问题