javascript 为什么使用“适合内容”时页面宽度只能拉伸到100%?

zpjtge22  于 2023-01-24  发布在  Java
关注(0)|答案(1)|浏览(170)

我试着四处寻找这个,但似乎找不到一个问题,以配合我目前的问题。我试图建立一个模拟电子商务网站,以实践使用React。我有一个标题组件。我想这个组件是100%的屏幕宽度,以便当页面缩小时,此组件中的元素也随之缩小。我有一些全局css,它将html和body的高度和宽度设置为100%:

html, body{
    background-color: rgb(167, 72, 72);
    height: 100%;
    min-width: 100%;
}

我现在面临两个问题,我都不太清楚原因,当我把header组件(最外面的组件)的宽度设置为100%时,页面收缩正常,但是当我打开开发者工具检查响应性时,出现了问题,我的header的右边比页面header_shrink收缩得更快
我可以通过将页眉的宽度设置为“fit-content”而不是“100%"来解决这个问题。下面是我使用开发者工具缩小页面时页眉的样子。header_fixed但是当我这样做时,页眉中的组件不能正确缩小。例如,我的搜索栏应该随着页面的缩小而减小宽度,但是当我使用“fit-content”时,search-bar-constant.当我将宽度设置为100%而不是适合内容时,它看起来就像search-bar-fixed
抱歉解释太长,但这是我的大部分问题。“宽度:100%”允许我的头组件中的项正确收缩,但不允许组件本身收缩。而“宽度:“fit-content”允许外部头部组件正确收缩,但不允许其内部的项正确收缩。
下面是我可以参考的JSX:

import React from 'react'
import './Header.css'
import { BiSearchAlt2 as SearchIcon} from "react-icons/bi";
import {RiArrowDropDownLine as DropDownIcon} from "react-icons/ri";
import { CgProfile as Profile } from "react-icons/cg";
import { CgShoppingCart as Cart } from "react-icons/cg";

const Header = () => {

    const texts = [
        'ORDERS OF $5K SHIP FREE',
        'FREE SHIPPING ON SELECT ITEMS: SHOP NOW',
        'BUY A RIG AND YOUR ENTIRE ORDER SHIPS FREE'
      ];
      
      let currentTextIndex = 0;
      
      setInterval(() => {
        const shippingDealsText = document.querySelector('.shipping-deals-text');
        shippingDealsText.classList.add('out');
      
        setTimeout(() => {
          shippingDealsText.textContent = texts[currentTextIndex];
          shippingDealsText.classList.remove('out');
      
          currentTextIndex = (currentTextIndex + 1) % texts.length;
        }, 1000);
      }, 5000);

  return (
    <div className="header">
        <div className="header-top">
            <div className="top-logo">
                <h5 className='small-logo'>LEVIATHAN</h5>
            </div>
            <div className="space"></div>
            <div className="link-container">
                <div className="link-wrap">
                    <a href="/" className="gift-cards">Gift Cards</a>
                </div>
                <div className="link-wrap">
                    <a href="/" className="contact-us">Contact Us</a>
                </div>
                <div className="link-wrap">
                    <a href="/" className="order-status">Order Status</a>
                </div>
                <div className="link-wrap">
                    <a href="/" className="live-chat">Live Chat</a>
                </div>
            </div>
        </div>
        <div className="header-middle">
            <div className="middle-logo">
                <h5 className='big-logo'>LEVIATHAN</h5>
            </div>
            <div className="search-container">
                <div className="search-wrapper">
                    <input 
                        type="text" 
                        id="search-bar" 
                        placeholder="Search"
                        className='search'
                    />
                    <div className="search-icon-wrapper">
                        <SearchIcon className='search-icon'/>
                    </div>
                </div>
            </div>
            <div className="shipping-deals-container">
                <div className="button-container">
                    <div className="shipping-deals-button">
                        <span className="deals-text">DAILY SHIPPING DEALS </span>
                    </div>
                </div>
                <div className="text-container">
                    <div className="text-slideshow">
                        <p className="shipping-deals-text">BUY A RIG AND YOUR ENTIRE ORDER SHIPS FREE</p>
                    </div>
                </div>
            </div>
            <div className="icons-right">
                <Profile className='login-pic'/>
                <span>Log In</span>
                <Cart className='shopping-cart'/>
            </div>
        </div>
        <div className="header-bottom">
            <div className="nav-bar">
                <ul className='navigation'>
                    <li className='menu-items'>
                        <a href="/" className='button drop-down red'>Shop <DropDownIcon className='drop-icon'/></a>
                        <a href="/" className='button'>Equipment for Crossfit</a>
                        <a href="/" className='button'>New Gear</a>
                        <a href="/" className='button'>Barbells</a>
                        <a href="/" className='button'>Plates</a>
                        <a href="/" className='button'>Rigs and Racks</a>
                        <a href="/" className='button'>Shoes</a>
                        <a href="/" className='button'>Apparel</a>
                        <a href="/" className='button'>3 Ships Free</a>
                        <a href="/" className='button'>Zeus</a>
                        <a href="/" className='button drop-down'>The Index</a>
                    </li>
                </ul>
            </div>
        </div>
    </div>
  )
}

export default Header

下面是我目前正在应用的样式:

.header {
    min-width: 100%;
    margin: 0;
    padding: 0;
}

.header-top {
    background-color: white;
    display: flex;
    height: 2.5rem;
    width: 100%;
}

.top-logo {
    position: relative;
    margin-left: 3rem;
}

.space {
    flex-grow: 1;
}

.small-logo {
    padding-top: 0.5em;
    position: relative;
    font-size: larger;
    color: rgb(133, 133, 133)
}

.link-container {
    display: flex;
    /*border: 1px solid red;*/
    margin-right: 3rem;
}

.link-wrap {
    /*border: 1px solid green;*/
    font-size: 14px;
    padding-left: 1rem;
    padding-top: 0.75rem;
}

.link-wrap a {
    text-decoration: none;
    color:#666666;
    cursor: pointer;
}



/* Large section of header, black background */
.header-middle {
    background-color: black;
    height: 7rem;
    display: flex;
}

/* Big LEVIATHAN text */
.middle-logo {
    /*border: 1px solid red;*/
    position: relative;
    margin-left: 3rem;
    display: flex;
    justify-content: center;
    align-items: center;
    cursor: co;
}

.big-logo {
    font-size: 48px;
    /*padding-top: 2rem;*/
    position: relative;
    color: white;
}

.big-logo:hover {
    color: rgb(210, 0, 0);
}

.search-container {
    position: relative;
    width: 40%;
    display: flex;
    flex-basis: 60%;
    margin-left: 3rem;
    align-items: center;
    justify-content: center;
}

/*This is what has the appearance of the search bar*/
.search-wrapper {
    min-width:100%;
    height: 35%;
    position: relative;
    background-color: white;
    display: flex;
    flex-basis: 50%;
}

.search-icon-wrapper {
    display: flex;
    justify-content: center;
    align-items: center;
    width: 3rem;
}

.search-icon {
    color: black;
    font-size: 20px;
}

/*This is the actual search bar tucked inside*/
.search {
    width: 100%;
    height: 100%;
    border: none;
    outline: none;
    margin-left: 1em;
    font-size: 17px;
}

.search::placeholder {
    color:rgb(94, 94, 94);

    
}

/* This holds onto both our daily shipping deals button */
/* and our text slideshow */
.shipping-deals-container{
    width: 18em;
    margin-left: 2.5em;
    display: flex;
    flex-direction: column;
    justify-content: flex-start;
    align-items: center;
    /*border: 2px solid rgb(136, 77, 255);*/

}

.shipping-deals-button {
    width: 65%;
    height: 44%;
    background-color: rgb(234, 2, 2);
    position: relative;
    display: flex;
    justify-content: center;
    align-items: center;
    margin-top: 1.5em;
}

.button-container {
    width: 100%;
    height: 50%;
    /*border: 2px solid magenta;*/
}

.deals-text {
    color: white;
    font-size: 12px;
    position: relative;
    text-align: center;
    align-items: stretch;
    width: 100%;
}

.text-container {
    /*border: 2px solid rgb(20, 182, 11);*/
    width: 100%;
    height: 50%;
}

.text-slideshow {
    color: white;
    width: 100%;
    height: 50%;
    font-size: 12px;
}

.shipping-deals-text {
    transition: opacity 1s;
    opacity: 1;
    font-size: 13px;
}

.out {
    opacity: 0;
    transition: opacity 1s;
}

.shipping-deals-text-red{
    color: red;
}


.navigation {
    display: flex;
    align-items:flex-start;
    height: 3rem;
}

.menu-items {
    height: 100%;
    margin-left: 1.5rem;
    padding-right: 1.5rem;
    display: flex;
    align-items: flex-start;
    flex: 1;
}

ul {
    list-style-type: none;
    background-color: #333333;  
}

.button {
    flex: 1;
    display: flex;
    justify-content: center;
    align-items: center;
    height: 100%;
    text-decoration: none;
    color: white;
    text-transform: uppercase;
    white-space: nowrap;
    padding: 1em;
    font-weight: bold;
}

.button:hover {
    color:rgb(210, 0, 0)
}

.red {
    background-color: rgb(210, 0, 0);
}

.red:hover {
    color: white;
}

.drop-icon {
    font-size: 25px;
}

.icons-right {
    height: 50%;
    margin-top: 2em;
    min-width: 10%;
    display: flex;
    justify-content: center;
    align-items: center;
    margin-right: 1rem;
}

.login-pic {
    color: white;
    font-size: 20px;
}

.shopping-cart {
    color: white;
    font-size: 20px;
    margin-left: 1rem;
}

.icons-right span {
    color: white;
    margin-left: 0.5em;
}





@media (max-width: 1025px) {
    .shipping-deals-container {
        display: none;
    }
    .header-top {
        display: none;
    }
    .header-middle {
        height: 50%;
    }
    .search-wrapper {
        border: 2px solid white;
        height: 2rem;
    }
    .icons-right {
        margin-bottom: 2rem;
    }
}

我试过改变我身体的宽度,和html,但似乎没有什么能给我我正在寻找的解决方案

gwbalxhn

gwbalxhn1#

.header上使用width: 100%,它会按照你想要的方式缩小头文件。
防止收缩的元素是<li class="menu-items"></li>,因为display: flex;. Flexbox is by default not wrappingflex-wrap: nowrap;)。
添加flex-wrap. wrap;,您将看到使用fit-contentwidth: 100%;时所有内容都将缩小
希望这个有用。
另一方面:你不应该用<li>(列表元素)作为列表,那是<ul>(未排序列表)的作用。
它应该看起来更像这样-〉

<ul>
    <li>
        <a href="">Shop</a>
    </li>

    <li>
        <a href="">Equipment for Crossfit</a>
    </li>

    <li>
        <a href="">New Gear</a>
    </li>

    <!-- ... -->
</ul>

相关问题