【问题标题】:Flexbox working differently on safari compared to chrome与 chrome 相比,Flexbox 在 Safari 上的工作方式不同
【发布时间】:2016-12-04 09:46:46
【问题描述】:

我有一个相当令人沮丧的场景,我的字体“历史地图”使用 flexbox 在 chrome 上的标题框中居中,但在 safari 浏览器中根本没有。请看:http://www.historymaps2.drcrittall.com/welcome.php

这里是 html 和 CSS:

 /* Parent elements */ 
    html,body {
    
    	height:100%;
    }
    
    /* Sets the container-fluid, row and column classes to 100% of the html and body elements */ 
    .container-fluid,.row, .col-md-6, .col-xs-10 {
    	height:100%;
    }
    
    
    
    #titleframe {
    
    	position:relative;
    	display:-webkit-box;
    	display:-ms-flexbox;
    	display:flex;/* Flex-box ensures font is centered both vertically and horizontally within the title frame using align-items and justify-content. See http://stackoverflow.com/questions/5703552/css-center-text-horizontal-and-vertical-inside-a-div-block */
        -webkit-box-align:center;
        -ms-flex-align:center;
        align-items:center;
        -webkit-box-pack:center;
        -ms-flex-pack:center;
        justify-content:center;  
        max-width:100%; /* max-width ensures background does not stretch outside container div */ 
        height:15%;   /* Represents height relative to parent elements - in this case .container-fluid,.row, .col-md-6, .col-xs-10 which are all set to 100% */  
        border-style:solid;
        border-width:2px;
        border-color:black;
        
        background: url("../img/pages/frame4.3.jpg");
        background-size: 100% 100%; /* Sets background image to fill 100% of container in both x and y directions. See: http://stackoverflow.com/questions/15160764/background-image-stretch-y-axis-only-keep-repeat-x */
        background-repeat:no-repeat;
        
    }
    
    #titlepaper {
    
        position:absolute;    
        top:0px;
        left:0px;
        right:0px;
        bottom:0px;    
        width:100%; 
        height:100%; 
        border-style:solid;
        border-width:2px;
        border-color:black;
        /*padding:12px 25px;*/
        padding: 2% 5.5% 2% 5%; 
        
    }
    
    #maintitle {
    
        position:absolute;   
        font-family:"Roboto Condensed", sans-serif;
        font-style:italic;
        font-weight: 700;
        color: black;
        text-shadow: 0px 3px 0px #b2a98f,
                     0px 14px 10px rgba(0,0,0,0.15),
                     0px 24px 2px rgba(0,0,0,0.1),
                     0px 34px 30px rgba(0,0,0,0.1);
        
        word-wrap:break-word;   
        font-size:50px; 
        width:500px;
        text-align: center;
        flex:1; 
    	
    
    }
    
    /* All media break-points: https://responsivedesign.is/develop/browser-feature-support/media-queries-for-common-device-breakpoints */
    @media only screen and (max-device-width : 480px) {
    
    	
    	
    	
    	/* Styles */
    	#maintitle {
    	
    		font-size:30px;
    		
    		width:200px; 
    		 
    	
    	}
    	
    }
<!DOCTYPE html>

<html lang = "en">

    <head>
	
        <!-- http://getbootstrap.com/ -->
        <link href="/css/bootstrap.min.css" rel="stylesheet"/>
		
		<meta charset = "utf-8"> 
		
		<meta name="viewport" content = "width=device-width, initial-scale = 1">
		
        <link href="/css/welcome.css?parameter=2" rel="stylesheet"/>
        
        <title>History Maps</title>

        <!-- https://jquery.com/ -->
        <script src="/js/jquery-1.11.3.min.js"></script>

        <!-- http://getbootstrap.com/ -->
        <script src="/js/bootstrap.min.js"></script>

    </head>
    
    <body>
    
    	<div class = "container-fluid" style = "border:solid;">
    		
    		<div class = "row" style = "margin-top:5%">
    			<div class = "col-md-offset-3 col-md-6 col-xs-offset-1 col-xs-10" >
    				<!--
    				<img id = "titleframe" src="../img/pages/frame4.3.jpg" class="img-fluid" alt="Responsive image" style = "height:auto; max-width:100%;">
    				
    				<img id ="titlepaper" src="img/pages/paper.jpg" class="img-fluid">-->
    				<div id = "titleframe">
    					<img id ="titlepaper" class = "img-fluid" src="img/pages/paper.jpg">
    					<font id="maintitle">History Maps</font> 				
    				</div>
    				<!--<div class = "container-fluid" id = "test"></div>-->
    				    				
    			</div> 
    		
    		</div>
    		
    	</div>
    
    </body>
    
</html>

如果有人知道为什么字体中心在 Chrome 和 Safari 上的表现如此不同,我将非常感激知道原因。

亲切的问候

【问题讨论】:

    标签: html css google-chrome safari


    【解决方案1】:

    尝试从#maintitle 中删除position: absolute; 或将其更改为relative

    /* Parent elements */ 
    html,body {
    
        height:100%;
    }
    
    /* Sets the container-fluid, row and column classes to 100% of the html and body elements */ 
    .container-fluid,.row, .col-md-6, .col-xs-10 {
        height:100%;
    }
    
    
    
    #titleframe {
    
        position:relative;
        display:-webkit-box;
        display:-ms-flexbox;
        display:flex;/* Flex-box ensures font is centered both vertically and horizontally within the title frame using align-items and justify-content. See http://stackoverflow.com/questions/5703552/css-center-text-horizontal-and-vertical-inside-a-div-block */
        -webkit-box-align:center;
        -ms-flex-align:center;
        align-items:center;
        -webkit-box-pack:center;
        -ms-flex-pack:center;
        justify-content:center;  
        max-width:100%; /* max-width ensures background does not stretch outside container div */ 
        height:15%;   /* Represents height relative to parent elements - in this case .container-fluid,.row, .col-md-6, .col-xs-10 which are all set to 100% */  
        border-style:solid;
        border-width:2px;
        border-color:black;
    
        background: url("../img/pages/frame4.3.jpg");
        background-size: 100% 100%; /* Sets background image to fill 100% of container in both x and y directions. See: http://stackoverflow.com/questions/15160764/background-image-stretch-y-axis-only-keep-repeat-x */
        background-repeat:no-repeat;
    
    }
    
    #titlepaper {
    
        position:absolute;    
        top:0px;
        left:0px;
        right:0px;
        bottom:0px;    
        width:100%; 
        height:100%; 
        border-style:solid;
        border-width:2px;
        border-color:black;
        /*padding:12px 25px;*/
        padding: 2% 5.5% 2% 5%; 
    
    }
    
    #maintitle {
    
        position:relative;   
        font-family:"Roboto Condensed", sans-serif;
        font-style:italic;
        font-weight: 700;
        color: black;
        text-shadow: 0px 3px 0px #b2a98f,
                     0px 14px 10px rgba(0,0,0,0.15),
                     0px 24px 2px rgba(0,0,0,0.1),
                     0px 34px 30px rgba(0,0,0,0.1);
    
        word-wrap:break-word;   
        font-size:50px; 
        width:500px;
        text-align: center;
        flex:1;
    }
    
    /* All media break-points: https://responsivedesign.is/develop/browser-feature-support/media-queries-for-common-device-breakpoints */
    @media only screen and (max-device-width : 480px) {
    
    
    
    
        /* Styles */
        #maintitle {
    
            font-size:30px;
    
            width:200px; 
    
    
        }
    
    }
    <div class = "container-fluid" style = "border:solid;">
    
            <div class = "row" style = "margin-top:5%">
                <div class = "col-md-offset-3 col-md-6 col-xs-offset-1 col-xs-10" >
                    <!--
                    <img id = "titleframe" src="../img/pages/frame4.3.jpg" class="img-fluid" alt="Responsive image" style = "height:auto; max-width:100%;">
    
                    <img id ="titlepaper" src="img/pages/paper.jpg" class="img-fluid">-->
                    <div id = "titleframe">
                        <img id ="titlepaper" class = "img-fluid" src="img/pages/paper.jpg">
                        <font id="maintitle">History Maps</font>                
                    </div>
                    <!--<div class = "container-fluid" id = "test"></div>-->
    
                </div> 
    
            </div>
    
        </div>

    【讨论】:

    • 是的,将 #maintitle 更改为 position:relative 就可以了。为什么这能解决问题?
    • 因为titlepaper也是绝对的,所以你在嵌套在相对(titleframe)内的这2个绝对(titlepaper和maintitle)之间存在冲突,考虑到图像超过了它的相对父宽度,它会将文本推出同样,因此设置 relative 将保持与其父宽度的关系,并避免被之前的另一个绝对值(标题纸)推动。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-07
    • 1970-01-01
    • 2013-12-13
    • 2011-01-29
    • 1970-01-01
    • 2011-10-09
    相关资源
    最近更新 更多