How to create dynamic diagonal line from left-bottom to right-top corner?

前端 未结 3 794
别那么骄傲
别那么骄傲 2021-02-04 16:17

I\'ve created a simple layout where I have three divs which interact. One is the logo in the middle of the screen and the other are two blocks which with jQuery are moved out of

相关标签:
3条回答
  • 2021-02-04 16:49

    Use trigonometry to compute the desired angle:

    var angle = Math.atan2($(window).width(),$(window).height()); // in radians
    $('#blocktop,#blockbottom').css('transform','skew(-'+angle+'rad)');
    

    (Note for math geeks and other pedants: the arctangent would normally take the height divided by the width, not the other way around. In this case, however, we're skewing a vertical line instead of a horizontal one, so the above code gives the desired result.)

    Note that newer versions of jQuery will automatically add the necessary -webkit- or -moz- prefix to that CSS transform property.

    You might also want to display:none the elements until the above code can alter the angle, and then show() them immediately after the angle is computed:

    $('#blocktop,#blockbottom').css('transform', 'skew(-' + angle + 'rad)')
        .add('#logo').show();
    

    http://jsfiddle.net/mblase75/6a93T/10/

    0 讨论(0)
  • 2021-02-04 16:50

    You don't have to do too much for this. See demo here

    HTML

    <div class="diagonal"></div>
    

    CSS

    .diagonal {
        width: 0; 
        height: 0; 
        border-top: 110px solid transparent;
        border-right:110px solid blue; 
    }
    
    0 讨论(0)
  • 2021-02-04 16:53

    I just use the fact that a DOM-Element with two different border for top and right results in a diagonal line where both meet. Then put the height and width of the DOM-Element to zero and set the border-top-width to window-height and the border-right-width to window-width. Update it with JavaScript on resize... That's all.

    I've put a container in the DOM

    <div id="diagonal_outer"><div id="diagonal"></div></div>
    

    Following CSS is nessesary

    div#diagonal_outer {
        position: fixed !important;
        position: absolute;
        overflow: hidden;
        left: 0;
        top: 0;
        right: 0;
        bottom: 0;
        z-index: -100;
    }
    div#diagonal {
        position: relative;
    
        border-color: #FAE9E1 #ffffff;
        border-style: solid;
        border-left-width: 0;       
        border-top-width: 10240px;
        border-right-width: 12800px;
        border-bottom-width: 0;
    
        height: 0;
        width: 0;
    
        left: 50%;
        top: 50%;
        margin-left: -6400px; /* half of border-right-width */
        margin-top: -5120px; /* half of border-top-width */
    
        z-index: -100;
    }
    

    and following JavaScript to actualize on resize

    jQuery(document).ready(function() {
        diagonal();
    });
    
    jQuery(window).resize(function() {
        diagonal();
    });
    
    var diagonal = function() {
        var wWidth = jQuery(window).width();
        var wHeight = jQuery(window).height();
    
        jQuery('#diagonal').css('left', 0);
        jQuery('#diagonal').css('top', 0);
        jQuery('#diagonal').css('margin-left', 0);
        jQuery('#diagonal').css('margin-top', 0);
    
        jQuery('#diagonal').css('border-right-width', wWidth);
        jQuery('#diagonal').css('border-top-width', wHeight);
    };
    

    OK, the solution with CSS-skew is nice, but this one works with CSS <3

    0 讨论(0)
提交回复
热议问题