2d Best Platform Player controller

using System.Collections.Generic;
using System.Linq;
using UnityEngine;

namespace TarodevController
{
    /// <summary>
    /// Hey!
    /// Tarodev here. I built this controller as there was a severe lack of quality & free 2D controllers out there.
    /// Right now it only contains movement and jumping, but it should be pretty easy to expand... I may even do it myself
    /// if there's enough interest. You can play and compete for best times here: https://tarodev.itch.io/
    /// If you hve any questions or would like to brag about your score, come to discord: https://discord.gg/GqeHHnhHpz
    /// </summary>
    public class PlayerController : MonoBehaviour, IPlayerController
    {
        // Public for external hooks
        public Vector3 Velocity { get; private set; }
        public FrameInput Input { get; private set; }
        public bool JumpingThisFrame { get; private set; }
        public bool LandingThisFrame { get; private set; }
        public Vector3 RawMovement { get; private set; }
        public bool Grounded => _colDown;

        private Vector3 _lastPosition;
        private float _currentHorizontalSpeed, _currentVerticalSpeed;

        // This is horrible, but for some reason colliders are not fully established when update starts...
        private bool _active;
        void Awake() => Invoke(nameof(Activate), 0.5f);
        void Activate() => _active = true;

        private void Update()
        {
            if (!_active) return;
            // Calculate velocity
            Velocity = (transform.position - _lastPosition) / Time.deltaTime;
            _lastPosition = transform.position;

            GatherInput();
            RunCollisionChecks();

            CalculateWalk(); // Horizontal movement
            CalculateJumpApex(); // Affects fall speed, so calculate before gravity
            CalculateGravity(); // Vertical movement
            CalculateJump(); // Possibly overrides vertical

            MoveCharacter(); // Actually perform the axis movement
        }


        #region Gather Input

        private void GatherInput()
        {
            Input = new FrameInput
            {
                JumpDown = UnityEngine.Input.GetButtonDown("Jump"),
                JumpUp = UnityEngine.Input.GetButtonUp("Jump"),
                X = UnityEngine.Input.GetAxisRaw("Horizontal")
            };
            if (Input.JumpDown)
            {
                _lastJumpPressed = Time.time;
            }
        }

        #endregion

        #region Collisions

        [Header("COLLISION")][SerializeField] private Bounds _characterBounds;
        [SerializeField] private LayerMask _groundLayer;
        [SerializeField] private int _detectorCount = 3;
        [SerializeField] private float _detectionRayLength = 0.1f;
        [SerializeField][Range(0.1f, 0.3f)] private float _rayBuffer = 0.1f; // Prevents side detectors hitting the ground

        private RayRange _raysUp, _raysRight, _raysDown, _raysLeft;
        private bool _colUp, _colRight, _colDown, _colLeft;

        private float _timeLeftGrounded;

        // We use these raycast checks for pre-collision information
        private void RunCollisionChecks()
        {
            // Generate ray ranges. 
            CalculateRayRanged();

            // Ground
            LandingThisFrame = false;
            var groundedCheck = RunDetection(_raysDown);
            if (_colDown && !groundedCheck) _timeLeftGrounded = Time.time; // Only trigger when first leaving
            else if (!_colDown && groundedCheck)
            {
                _coyoteUsable = true; // Only trigger when first touching
                LandingThisFrame = true;
            }

            _colDown = groundedCheck;

            // The rest
            _colUp = RunDetection(_raysUp);
            _colLeft = RunDetection(_raysLeft);
            _colRight = RunDetection(_raysRight);

            bool RunDetection(RayRange range)
            {
                return EvaluateRayPositions(range).Any(point => Physics2D.Raycast(point, range.Dir, _detectionRayLength, _groundLayer));
            }
        }

        private void CalculateRayRanged()
        {
            // This is crying out for some kind of refactor. 
            var b = new Bounds(transform.position + _characterBounds.center, _characterBounds.size);

            _raysDown = new RayRange(b.min.x + _rayBuffer, b.min.y, b.max.x - _rayBuffer, b.min.y, Vector2.down);
            _raysUp = new RayRange(b.min.x + _rayBuffer, b.max.y, b.max.x - _rayBuffer, b.max.y, Vector2.up);
            _raysLeft = new RayRange(b.min.x, b.min.y + _rayBuffer, b.min.x, b.max.y - _rayBuffer, Vector2.left);
            _raysRight = new RayRange(b.max.x, b.min.y + _rayBuffer, b.max.x, b.max.y - _rayBuffer, Vector2.right);
        }


        private IEnumerable<Vector2> EvaluateRayPositions(RayRange range)
        {
            for (var i = 0; i < _detectorCount; i++)
            {
                var t = (float)i / (_detectorCount - 1);
                yield return Vector2.Lerp(range.Start, range.End, t);
            }
        }

        private void OnDrawGizmos()
        {
            // Bounds
            Gizmos.color = Color.yellow;
            Gizmos.DrawWireCube(transform.position + _characterBounds.center, _characterBounds.size);

            // Rays
            if (!Application.isPlaying)
            {
                CalculateRayRanged();
                Gizmos.color = Color.blue;
                foreach (var range in new List<RayRange> { _raysUp, _raysRight, _raysDown, _raysLeft })
                {
                    foreach (var point in EvaluateRayPositions(range))
                    {
                        Gizmos.DrawRay(point, range.Dir * _detectionRayLength);
                    }
                }
            }

            if (!Application.isPlaying) return;

            // Draw the future position. Handy for visualizing gravity
            Gizmos.color = Color.red;
            var move = new Vector3(_currentHorizontalSpeed, _currentVerticalSpeed) * Time.deltaTime;
            Gizmos.DrawWireCube(transform.position + _characterBounds.center + move, _characterBounds.size);
        }

        #endregion


        #region Walk

        [Header("WALKING")][SerializeField] private float _acceleration = 90;
        [SerializeField] private float _moveClamp = 13;
        [SerializeField] private float _deAcceleration = 60f;
        [SerializeField] private float _apexBonus = 2;

        private void CalculateWalk()
        {
            if (Input.X != 0)
            {
                // Set horizontal move speed
                _currentHorizontalSpeed += Input.X * _acceleration * Time.deltaTime;

                // clamped by max frame movement
                _currentHorizontalSpeed = Mathf.Clamp(_currentHorizontalSpeed, -_moveClamp, _moveClamp);

                // Apply bonus at the apex of a jump
                var apexBonus = Mathf.Sign(Input.X) * _apexBonus * _apexPoint;
                _currentHorizontalSpeed += apexBonus * Time.deltaTime;
            }
            else
            {
                // No input. Let's slow the character down
                _currentHorizontalSpeed = Mathf.MoveTowards(_currentHorizontalSpeed, 0, _deAcceleration * Time.deltaTime);
            }

            if (_currentHorizontalSpeed > 0 && _colRight || _currentHorizontalSpeed < 0 && _colLeft)
            {
                // Don't walk through walls
                _currentHorizontalSpeed = 0;
            }
        }

        #endregion

        #region Gravity

        [Header("GRAVITY")][SerializeField] private float _fallClamp = -40f;
        [SerializeField] private float _minFallSpeed = 80f;
        [SerializeField] private float _maxFallSpeed = 120f;
        private float _fallSpeed;

        private void CalculateGravity()
        {
            if (_colDown)
            {
                // Move out of the ground
                if (_currentVerticalSpeed < 0) _currentVerticalSpeed = 0;
            }
            else
            {
                // Add downward force while ascending if we ended the jump early
                var fallSpeed = _endedJumpEarly && _currentVerticalSpeed > 0 ? _fallSpeed * _jumpEndEarlyGravityModifier : _fallSpeed;

                // Fall
                _currentVerticalSpeed -= fallSpeed * Time.deltaTime;

                // Clamp
                if (_currentVerticalSpeed < _fallClamp) _currentVerticalSpeed = _fallClamp;
            }
        }

        #endregion

        #region Jump

        [Header("JUMPING")][SerializeField] private float _jumpHeight = 30;
        [SerializeField] private float _jumpApexThreshold = 10f;
        [SerializeField] private float _coyoteTimeThreshold = 0.1f;
        [SerializeField] private float _jumpBuffer = 0.1f;
        [SerializeField] private float _jumpEndEarlyGravityModifier = 3;
        private bool _coyoteUsable;
        private bool _endedJumpEarly = true;
        private float _apexPoint; // Becomes 1 at the apex of a jump
        private float _lastJumpPressed;
        private bool CanUseCoyote => _coyoteUsable && !_colDown && _timeLeftGrounded + _coyoteTimeThreshold > Time.time;
        private bool HasBufferedJump => _colDown && _lastJumpPressed + _jumpBuffer > Time.time;

        private void CalculateJumpApex()
        {
            if (!_colDown)
            {
                // Gets stronger the closer to the top of the jump
                _apexPoint = Mathf.InverseLerp(_jumpApexThreshold, 0, Mathf.Abs(Velocity.y));
                _fallSpeed = Mathf.Lerp(_minFallSpeed, _maxFallSpeed, _apexPoint);
            }
            else
            {
                _apexPoint = 0;
            }
        }

        private void CalculateJump()
        {
            // Jump if: grounded or within coyote threshold || sufficient jump buffer
            if (Input.JumpDown && CanUseCoyote || HasBufferedJump)
            {
                _currentVerticalSpeed = _jumpHeight;
                _endedJumpEarly = false;
                _coyoteUsable = false;
                _timeLeftGrounded = float.MinValue;
                JumpingThisFrame = true;
            }
            else
            {
                JumpingThisFrame = false;
            }

            // End the jump early if button released
            if (!_colDown && Input.JumpUp && !_endedJumpEarly && Velocity.y > 0)
            {
                // _currentVerticalSpeed = 0;
                _endedJumpEarly = true;
            }

            if (_colUp)
            {
                if (_currentVerticalSpeed > 0) _currentVerticalSpeed = 0;
            }
        }

        #endregion

        #region Move

        [Header("MOVE")]
        [SerializeField, Tooltip("Raising this value increases collision accuracy at the cost of performance.")]
        private int _freeColliderIterations = 10;

        // We cast our bounds before moving to avoid future collisions
        private void MoveCharacter()
        {
            var pos = transform.position + _characterBounds.center;
            RawMovement = new Vector3(_currentHorizontalSpeed, _currentVerticalSpeed); // Used externally
            var move = RawMovement * Time.deltaTime;
            var furthestPoint = pos + move;

            // check furthest movement. If nothing hit, move and don't do extra checks
            var hit = Physics2D.OverlapBox(furthestPoint, _characterBounds.size, 0, _groundLayer);
            if (!hit)
            {
                transform.position += move;
                return;
            }

            // otherwise increment away from current pos; see what closest position we can move to
            var positionToMoveTo = transform.position;
            for (int i = 1; i < _freeColliderIterations; i++)
            {
                // increment to check all but furthestPoint - we did that already
                var t = (float)i / _freeColliderIterations;
                var posToTry = Vector2.Lerp(pos, furthestPoint, t);

                if (Physics2D.OverlapBox(posToTry, _characterBounds.size, 0, _groundLayer))
                {
                    transform.position = positionToMoveTo;

                    // We've landed on a corner or hit our head on a ledge. Nudge the player gently
                    if (i == 1)
                    {
                        if (_currentVerticalSpeed < 0) _currentVerticalSpeed = 0;
                        var dir = transform.position - hit.transform.position;
                        transform.position += dir.normalized * move.magnitude;
                    }

                    return;
                }

                positionToMoveTo = posToTry;
            }
        }

        #endregion
    }
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

namespace TarodevController
{
    public struct FrameInput
    {
        public float X;
        public bool JumpDown;
        public bool JumpUp;
    }

    public interface IPlayerController
    {
        public Vector3 Velocity { get; }
        public FrameInput Input { get; }
        public bool JumpingThisFrame { get; }
        public bool LandingThisFrame { get; }
        public Vector3 RawMovement { get; }
        public bool Grounded { get; }
    }

    public struct RayRange
    {
        public RayRange(float x1, float y1, float x2, float y2, Vector2 dir)
        {
            Start = new Vector2(x1, y1);
            End = new Vector2(x2, y2);
            Dir = dir;
        }

        public readonly Vector2 Start, End, Dir;
    }
}

Similiar Collections

Python strftime reference pandas.Period.strftime python - Formatting Quarter time in pandas columns - Stack Overflow python - Pandas: Change day - Stack Overflow python - Check if multiple columns exist in a df - Stack Overflow Pandas DataFrame apply() - sending arguments examples python - How to filter a dataframe of dates by a particular month/day? - Stack Overflow python - replace a value in the entire pandas data frame - Stack Overflow python - Replacing blank values (white space) with NaN in pandas - Stack Overflow python - get list from pandas dataframe column - Stack Overflow python - How to drop rows of Pandas DataFrame whose value in a certain column is NaN - Stack Overflow python - How to drop rows of Pandas DataFrame whose value in a certain column is NaN - Stack Overflow python - How to lowercase a pandas dataframe string column if it has missing values? - Stack Overflow How to Convert Integers to Strings in Pandas DataFrame - Data to Fish How to Convert Integers to Strings in Pandas DataFrame - Data to Fish create a dictionary of two pandas Dataframe columns? - Stack Overflow python - ValueError: No axis named node2 for object type <class 'pandas.core.frame.DataFrame'> - Stack Overflow Python Pandas iterate over rows and access column names - Stack Overflow python - Creating dataframe from a dictionary where entries have different lengths - Stack Overflow python - Deleting DataFrame row in Pandas based on column value - Stack Overflow python - How to check if a column exists in Pandas - Stack Overflow python - Import pandas dataframe column as string not int - Stack Overflow python - What is the most efficient way to create a dictionary of two pandas Dataframe columns? - Stack Overflow Python Loop through Excel sheets, place into one df - Stack Overflow python - How do I get the row count of a Pandas DataFrame? - Stack Overflow python - How to save a new sheet in an existing excel file, using Pandas? - Stack Overflow Python Loop through Excel sheets, place into one df - Stack Overflow How do I select a subset of a DataFrame? โ€” pandas 1.2.4 documentation python - Delete column from pandas DataFrame - Stack Overflow python - Convert list of dictionaries to a pandas DataFrame - Stack Overflow How to Add or Insert Row to Pandas DataFrame? - Python Examples python - Check if a value exists in pandas dataframe index - Stack Overflow python - Set value for particular cell in pandas DataFrame using index - Stack Overflow python - Pandas Dataframe How to cut off float decimal points without rounding? - Stack Overflow python - Pandas: Change day - Stack Overflow python - Clean way to convert quarterly periods to datetime in pandas - Stack Overflow Pandas - Number of Months Between Two Dates - Stack Overflow python - MonthEnd object result in <11 * MonthEnds> instead of number - Stack Overflow python - Extracting the first day of month of a datetime type column in pandas - Stack Overflow
MySQL MULTIPLES INNER JOIN How to Use EXISTS, UNIQUE, DISTINCT, and OVERLAPS in SQL Statements - dummies postgresql - SQL OVERLAPS PostgreSQL Joins: Inner, Outer, Left, Right, Natural with Examples PostgreSQL Joins: A Visual Explanation of PostgreSQL Joins PL/pgSQL Variables ( Format Dates ) The Ultimate Guide to PostgreSQL Date By Examples Data Type Formatting Functions PostgreSQL - How to calculate difference between two timestamps? | TablePlus Date/Time Functions and Operators PostgreSQL - DATEDIFF - Datetime Difference in Seconds, Days, Months, Weeks etc - SQLines CASE Statements in PostgreSQL - DataCamp SQL Optimizations in PostgreSQL: IN vs EXISTS vs ANY/ALL vs JOIN PostgreSQL DESCRIBE TABLE Quick and best way to Compare Two Tables in SQL - DWgeek.com sql - Best way to select random rows PostgreSQL - Stack Overflow PostgreSQL: Documentation: 13: 70.1.ย Row Estimation Examples Faster PostgreSQL Counting How to Add a Default Value to a Column in PostgreSQL - PopSQL How to Add a Default Value to a Column in PostgreSQL - PopSQL SQL Subquery - Dofactory SQL IN - SQL NOT IN - JournalDev DROP FUNCTION (Transact-SQL) - SQL Server | Microsoft Docs SQL : Multiple Row and Column Subqueries - w3resource PostgreSQL: Documentation: 9.5: CREATE FUNCTION PostgreSQL CREATE FUNCTION By Practical Examples datetime - PHP Sort a multidimensional array by element containing date - Stack Overflow database - Oracle order NULL LAST by default - Stack Overflow PostgreSQL: Documentation: 9.5: Modifying Tables PostgreSQL: Documentation: 14: SELECT postgresql - sql ORDER BY multiple values in specific order? - Stack Overflow How do I get the current unix timestamp from PostgreSQL? - Database Administrators Stack Exchange SQL MAX() with HAVING, WHERE, IN - w3resource linux - Which version of PostgreSQL am I running? - Stack Overflow Copying Data Between Tables in a Postgres Database php - How to remove all numbers from string? - Stack Overflow sql - How to get a list column names and datatypes of a table in PostgreSQL? - Stack Overflow postgresql - How do I remove all spaces from a field in a Postgres database in an update query? - Stack Overflow sql - How to get a list column names and datatypes of a table in PostgreSQL? - Stack Overflow How to change PRIMARY KEY of an existing PostgreSQL table? ยท GitHub Drop tables wย Dependency Tracking ( constraints ) Import CSV File Into PosgreSQL Table How To Import a CSV into a PostgreSQL Database How can I drop all the tables in a PostgreSQL database? - Stack Overflow How can I drop all the tables in a PostgreSQL database? - Stack Overflow PostgreSQL CASE Statements & Examples using WHEN-THEN, if-else and switch | DataCamp PostgreSQL LEFT: Get First N Characters in a String How can I drop all the tables in a PostgreSQL database? - Stack Overflow How can I drop all the tables in a PostgreSQL database? - Stack Overflow PostgreSQL - Copy Table - GeeksforGeeks PostgreSQL BETWEEN Query with Example sql - Postgres Query: finding values that are not numbers - Stack Overflow PostgreSQL UPDATE Join with A Practical Example
Request API Data with JavaScript or PHP (Access a Json data with PHP API) PHPUnit โ€“ The PHP Testing Framework phpspec array_column How to get closest date compared to an array of dates in PHP Calculating past and future dates < PHP | The Art of Web PHP: How to check which item in an array is closest to a given number? - Stack Overflow implode php - Calculate difference between two dates using Carbon and Blade php - Create a Laravel Request object on the fly testing - How can I measure the speed of code written in PHP? testing - How can I measure the speed of code written in PHP? What to include in gitignore for a Laravel and PHPStorm project Laravel Chunk Eloquent Method Example - Tuts Make html - How to solve PHP error 'Notice: Array to string conversion in...' - Stack Overflow PHP - Merging two arrays into one array (also Remove Duplicates) - Stack Overflow php - Check if all values in array are the same - Stack Overflow PHP code - 6 lines - codepad php - Convert array of single-element arrays to one a dimensional array - Stack Overflow datetime - PHP Sort a multidimensional array by element containing date - Stack Overflow sql - Division ( / ) not giving my answer in postgresql - Stack Overflow Get current date, given a timezone in PHP? - Stack Overflow php - Get characters after last / in url - Stack Overflow Add space after 7 characters - PHP Coding Help - PHP Freaks php - Laravel Advanced Wheres how to pass variable into function? - Stack Overflow php - How can I manually return or throw a validation error/exception in Laravel? - Stack Overflow php - How to add meta data in laravel api resource - Stack Overflow php - How do I create a webhook? - Stack Overflow Webhooks - Examples | SugarOutfitters Accessing cells - PhpSpreadsheet Documentation Reading and writing to file - PhpSpreadsheet Documentation PHP 7.1: Numbers shown with scientific notation even if explicitely formatted as text ยท Issue #357 ยท PHPOffice/PhpSpreadsheet ยท GitHub How do I install Java on Ubuntu? nginx - How to execute java command from php page with shell_exec() function? - Stack Overflow exec - Executing a java .jar file with php - Stack Overflow Measuring script execution time in PHP - GeeksforGeeks How to CONVERT seconds to minutes? PHP: Check if variable exist but also if has a value equal to something - Stack Overflow How to declare a global variable in php? - Stack Overflow How to zip a whole folder using PHP - Stack Overflow php - Saving file into a prespecified directory using FPDF - Stack Overflow PHP 7.0 get_magic_quotes_runtime error - Stack Overflow How to Create an Object Without Class in PHP ? - GeeksforGeeks Recursion in PHP | PHPenthusiast PHP PDO Insert Tutorial Example - DEV Community PHP Error : Unparenthesized `a ? b : c ? d : e` is deprecate | Laravel.io mysql - Which is faster: multiple single INSERTs or one multiple-row INSERT? - Stack Overflow Display All PHP Errors: Basic & Advanced Usage Need to write at beginning of file with PHP - Stack Overflow Append at the beginning of the file in PHP - Stack Overflow PDO โ€“ Insert, update, and delete records in PHP โ€“ BrainBell php - How to execute a raw sql query with multiple statement with laravel - Stack Overflow
Clear config cache Eloquent DB::Table RAW Query / WhereNull Laravel Eloquent "IN" Query get single column value in laravel eloquent php - How to use CASE WHEN in Eloquent ORM? - Stack Overflow AND-OR-AND + brackets with Eloquent - Laravel Daily Database: Query Builder - Laravel - The PHP Framework For Web Artisans ( RAW ) Combine Foreach Loop and Eloquent to perform a search | Laravel.io Access Controller method from another controller in Laravel 5 How to Call a controller function in another Controller in Laravel 5 php - Create a Laravel Request object on the fly php - Laravel 5.6 Upgrade caused Logging to break Artisan Console - Laravel - The PHP Framework For Web Artisans What to include in gitignore for a Laravel and PHPStorm project php - Create a Laravel Request object on the fly Process big DB table with chunk() method - Laravel Daily How to insert big data on the laravel? - Stack Overflow php - How can I build a condition based query in Laravel? - Stack Overflow Laravel Chunk Eloquent Method Example - Tuts Make Database: Migrations - Laravel - The PHP Framework For Web Artisans php - Laravel Model Error Handling when Creating - Exception Laravel - Inner Join with Multiple Conditions Example using Query Builder - ItSolutionStuff.com laravel cache disable phpunit code example | Newbedev In PHP, how to check if a multidimensional array is empty? ยท Humblix php - Laravel firstOrNew how to check if it's first or new? - Stack Overflow get base url laravel 8 Code Example Using gmail smtp via Laravel: Connection could not be established with host smtp.gmail.com [Connection timed out #110] - Stack Overflow php - Get the Last Inserted Id Using Laravel Eloquent - Stack Overflow php - Laravel-5 'LIKE' equivalent (Eloquent) - Stack Overflow Accessing cells - PhpSpreadsheet Documentation How to update chunk records in Laravel php - How to execute external shell commands from laravel controller? - Stack Overflow How to convert php array to laravel collection object 3 Best Laravel Redis examples to make your site load faster How to Create an Object Without Class in PHP ? - GeeksforGeeks Case insensitive search with Eloquent | Laravel.io How to Run Specific Seeder in Laravel? - ItSolutionStuff.com PHP Error : Unparenthesized `a ? b : c ? d : e` is deprecate | Laravel.io How to chunk query results in Laravel php - How to execute a raw sql query with multiple statement with laravel - Stack Overflow
PostgreSQL POSITION() function PostgresQL ANY / SOME Operator ( IN vs ANY ) PostgreSQL Substring - Extracting a substring from a String How to add an auto-incrementing primary key to an existing table, in PostgreSQL PostgreSQL STRING_TO_ARRAY()function mysql FIND_IN_SET equivalent to postgresql PL/pgSQL Variables ( Format Dates ) The Ultimate Guide to PostgreSQL Date By Examples Data Type Formatting Functions PostgreSQL - How to calculate difference between two timestamps? | TablePlus Date/Time Functions and Operators PostgreSQL - DATEDIFF - Datetime Difference in Seconds, Days, Months, Weeks etc - SQLines CASE Statements in PostgreSQL - DataCamp SQL Optimizations in PostgreSQL: IN vs EXISTS vs ANY/ALL vs JOIN PL/pgSQL Variables PostgreSQL: Documentation: 11: CREATE PROCEDURE Reading a Postgres EXPLAIN ANALYZE Query Plan Faster PostgreSQL Counting sql - Fast way to discover the row count of a table in PostgreSQL - Stack Overflow PostgreSQL: Documentation: 9.1: tablefunc PostgreSQL DESCRIBE TABLE Quick and best way to Compare Two Tables in SQL - DWgeek.com sql - Best way to select random rows PostgreSQL - Stack Overflow How to Add a Default Value to a Column in PostgreSQL - PopSQL How to Add a Default Value to a Column in PostgreSQL - PopSQL PL/pgSQL IF Statement PostgreSQL: Documentation: 9.1: Declarations SQL Subquery - Dofactory SQL IN - SQL NOT IN - JournalDev PostgreSQL - IF Statement - GeeksforGeeks How to work with control structures in PostgreSQL stored procedures: Using IF, CASE, and LOOP statements | EDB PL/pgSQL IF Statement How to combine multiple selects in one query - Databases - ( loop reference ) DROP FUNCTION (Transact-SQL) - SQL Server | Microsoft Docs SQL : Multiple Row and Column Subqueries - w3resource PostgreSQL: Documentation: 9.5: CREATE FUNCTION PostgreSQL CREATE FUNCTION By Practical Examples datetime - PHP Sort a multidimensional array by element containing date - Stack Overflow database - Oracle order NULL LAST by default - Stack Overflow PostgreSQL: Documentation: 9.5: Modifying Tables PostgreSQL: Documentation: 14: SELECT PostgreSQL Array: The ANY and Contains trick - Postgres OnLine Journal postgresql - sql ORDER BY multiple values in specific order? - Stack Overflow sql - How to aggregate two PostgreSQL columns to an array separated by brackets - Stack Overflow How do I get the current unix timestamp from PostgreSQL? - Database Administrators Stack Exchange SQL MAX() with HAVING, WHERE, IN - w3resource linux - Which version of PostgreSQL am I running? - Stack Overflow Postgres login: How to log into a Postgresql database | alvinalexander.com Copying Data Between Tables in a Postgres Database PostgreSQL CREATE FUNCTION By Practical Examples php - How to remove all numbers from string? - Stack Overflow sql - How to get a list column names and datatypes of a table in PostgreSQL? - Stack Overflow postgresql - How do I remove all spaces from a field in a Postgres database in an update query? - Stack Overflow sql - How to get a list column names and datatypes of a table in PostgreSQL? - Stack Overflow A Step-by-Step Guide To PostgreSQL Temporary Table How to change PRIMARY KEY of an existing PostgreSQL table? ยท GitHub PostgreSQL UPDATE Join with A Practical Example PostgreSQL: Documentation: 15: CREATE SEQUENCE How can I drop all the tables in a PostgreSQL database? - Stack Overflow PostgreSQL Show Tables Drop tables wย Dependency Tracking ( constraints ) Import CSV File Into PosgreSQL Table How To Import a CSV into a PostgreSQL Database How can I drop all the tables in a PostgreSQL database? - Stack Overflow How can I drop all the tables in a PostgreSQL database? - Stack Overflow PostgreSQL CASE Statements & Examples using WHEN-THEN, if-else and switch | DataCamp PostgreSQL LEFT: Get First N Characters in a String How can I drop all the tables in a PostgreSQL database? - Stack Overflow How can I drop all the tables in a PostgreSQL database? - Stack Overflow postgresql - Binary path in the pgAdmin preferences - Database Administrators Stack Exchange postgresql - Binary path in the pgAdmin preferences - Database Administrators Stack Exchange PostgreSQL - Copy Table - GeeksforGeeks postgresql duplicate key violates unique constraint - Stack Overflow PostgreSQL BETWEEN Query with Example VACUUM FULL - PostgreSQL wiki How To Remove Spaces Between Characters In PostgreSQL? - Database Administrators Stack Exchange sql - Postgres Query: finding values that are not numbers - Stack Overflow PostgreSQL LEFT: Get First N Characters in a String unaccent: Getting rid of umlauts, accents and special characters
ะกะพะทะดะฐะตะผ callback ะดะปั ัะพั…ั€ะฐะฝะตะฝะธั ะฝะตะนั€ะพะฝะฝะพะน ัะตั‚ะธ ะฝะฐ ะบะฐะถะดะพะน ัะฟะพั…ะต, ะตัะปะธ ะบะฐั‡ะตัั‚ะฒะพ ั€ะฐะฑะพั‚ั‹ ะฝะฐ ะฟั€ะพะฒะตั€ะพั‡ะฝะพะผ ะฝะฐะฑะพั€ะต ะดะฐะฝะฝั‹ั… ัƒะปัƒั‡ัˆะธะปะพััŒ. ะกะตั‚ัŒ ัะพั…ั€ะฐะฝัะตั‚ัั ะฒ ั„ะฐะนะป "ะฝะฐะทะฒะฐะฝะธะต_ะฝะฐัˆะตะน_ะผะพะดะตะปะธ.h5" ะ’ั‹ะฒะพะด ัั…ะตะผั‹ ะผะพะดะตะปะธ (ะทะฐะผะตั‚ัŒั‚ะต ั‡ั‚ะพ ั€ะฐะทะผะตั€ะฝะพัั‚ะธ, ะบะพั‚ะพั€ั‹ะต ะฒั‹ ะฒะธะดะธั‚ะต ะฝะฐ ัั…ะตะผะต ัั‚ะพ ั€ะฐะทะผะตั€ะฝะพัั‚ะธ ะฟะฐะบะตั‚ะพะฒ, ะฐ ะฝะต ะฟะพัะปะตะผะตะฝั‚ะฝั‹ะต ั€ะฐะทะผะตั€ะฝะพัั‚ะธ). ะกะพั…ั€ะฐะฝัะตะผ ะธ ะทะฐะณั€ัƒะถะฐะตะผ ะฒะตัะฐ ะผะพะดะตะปะธ ะŸะพะดะบะปัŽั‡ะฐะตะผ ะณัƒะณะป ะดะธัะบ ะ ะฐัะฟะฐะบะพะฒั‹ะฒะฐะตะผ ะทะธะฟ ะฐั€ั…ะธะฒ, ะธ ัะพะทะดะฐะตะผ ะฟะฐะฟะบัƒ ะฟะพะด ะฝะตะณะพ ะ—ะฐะณั€ัƒะทะธั‚ะต ะฑะพะปัŒัˆะพะน ั„ะฐะนะป ั Google ะ”ะธัะบะฐ. ะ•ัะปะธ ะฒั‹ ะธัะฟะพะปัŒะทัƒะตั‚ะต curl / wget, ะพะฝ ะฝะต ั€ะฐะฑะพั‚ะฐะตั‚ ั ะฑะพะปัŒัˆะธะผ ั„ะฐะนะปะพะผ ะธะท-ะทะฐ ะฟั€ะตะดัƒะฟั€ะตะถะดะตะฝะธั ัะธัั‚ะตะผั‹ ะฑะตะทะพะฟะฐัะฝะพัั‚ะธ ั Google ะ”ะธัะบะฐ. ะ ะฐะทะฑะธะฒะฐะตะผ ะดะฐั‚ะฐัะตั‚ ะ’ั‹ะฒะพะด ะณั€ะฐั„ะธะบะฐ ะพะฑัƒั‡ะตะฝะธั
ๆต่งˆๅ™จ้ป˜่ฎคcssๆ ทๅผๆธ…้™ค ๆต่งˆๅ™จ้ป˜่ฎคcssๆ ทๅผๆธ…้™ค CSS ๆ–‡ๅญ—่ฃ…้ฅฐ -ไธ‹ๅˆ’็บฟ CSS ๆ–‡ๅญ—่ฃ…้ฅฐ text-decoration & text-emphasis ยท Issue #103 ยท chokcoco/iCSS CSS่ฎพ็ฝฎๆ–‡ๅญ—ไธŽ่ฃ…้ฅฐ็บฟ้ขœ่‰ฒๅˆ†็ฆปtext-decoration-color ไธŽ color ๅˆ†็ฆป CSSๆ–‡ๅญ—ๅ’Œ่ฃ…้ฅฐ็บฟๅŠจ็”ป CSS ๆ–‡ๅญ—่ฃ…้ฅฐ text-decoration & text-emphasis CSS ๆ–‡ๅญ—่ฃ…้ฅฐ text-decoration & text-emphasis ยท Issue #103 ยท chokcoco/iCSS CSS ๆ–‡ๅญ—่ฃ…้ฅฐbackgroundๆจกๆ‹Ÿไธ‹ๅˆ’็บฟ CSS ๆ–‡ๅญ—่ฃ…้ฅฐ backgroundๆจกๆ‹Ÿ่™š็บฟ CSS ๆ–‡ๅญ—่ฃ…้ฅฐ-ๅทงๅฆ™ๆ”นๅ˜ background-size ไธŽ background-position ๅฎž็Žฐๆ–‡ๅญ— hover ๅŠจๆ•ˆ CSS ๆ–‡ๅญ—่ฃ…้ฅฐ-ๆ”นๅ˜ background-position ๅฎž็Žฐๆ–‡ๅญ— hover ๅŠจๆ•ˆ(ๅๅ‘ๆ•ˆๆžœ) CSS ๆ–‡ๅญ—่ฃ…้ฅฐ ไธ‹ๅˆ’็บฟๅ˜่‰ฒๆ•ˆๆžœ็š„ๅฎž็Žฐ CSS ไผ ็ปŸๆ–นๅผๅฎž็Žฐ็›ด็บฟ่ทฏๅพ„ๅŠจ็”ป CSS ไผ ็ปŸๆ–นๅผๅฎž็Žฐๆ›ฒ็บฟ่ทฏๅพ„ๅŠจ็”ป CSS Motion Path ๅฎž็Žฐ็›ด็บฟ่ทฏๅพ„ๅŠจ็”ป CSS Motion Path ๅฎž็Žฐๆณขๆตชๅฝข่ทฏๅพ„ๅŠจ็”ป CSS Motion Path ๅฎž็Žฐๆ›ฒ็บฟ่ทฏๅพ„ๅŠจ็”ป CSSไธ‰่ง’ๅฝข็š„ๅฎž็Žฐ CSS-offset-anchor ่ฟๅŠจ้”š็‚น ๅˆฉ็”จ Motion Path ๅˆถไฝœๆŒ‰้’ฎ็‚นๅ‡ปๆ’’็‚นๆ•ˆๆžœ Button Animation with CSS Offset Paths Button Animation with CSS Offset Paths ๆฑฝ่ฝฆๅœฐๅ›พ่กŒ้ฉถๆ•ˆๆžœ ๅˆฉ็”จ Motion-Path ็ป˜ๅˆถ่ทฏๅพ„ๅŠจ็”ป Notebook theme - FoldingText Theme demonstrating multiple header styles - FoldingText How to install a theme? - FoldingText
ื›ืžื” ืขื•ื“ ื ืฉืืจ ืœืžืฉืœื•ื— ื—ื™ื ื ื’ื ืœืขื’ืœื” ื•ืœืฆืงืืื•ื˜ ื”ื•ืกืคืช ืฆ'ืงื‘ื•ืงืก ืœืื™ืฉื•ืจ ื“ื™ื•ื•ืจ ื‘ืฆ'ืงืืื•ื˜ ื”ืกืชืจืช ืืคืฉืจื•ื™ื•ืช ืžืฉืœื•ื— ืื—ืจื•ืช ื›ืืฉืจ ืžืฉืœื•ื— ื—ื™ื ื ื–ืžื™ืŸ ื“ื™ืœื•ื’ ืขืœ ืžื™ืœื•ื™ ื›ืชื•ื‘ืช ื‘ืžืงืจื” ืฉื ื‘ื—ืจื” ืืคืฉืจื•ืช ืื™ืกื•ืฃ ืขืฆืžื™ ื”ื•ืกืคืช ืฆ'ืงื‘ื•ืงืก ืœืื™ืฉื•ืจ ื“ื™ื•ื•ืจ ื‘ืฆ'ืงืืื•ื˜ ืฉื™ื ื•ื™ ื”ืืคืฉืจื•ื™ื•ืช ื‘ืชืคืจื™ื˜ ื”-ืกื™ื“ื•ืจ ืœืคื™ ื‘ื•ื•ืงื•ืžืจืก ืฉื™ื ื•ื™ ื”ื˜ืงืกื˜ "ืื–ืœ ืžื”ืžืœืื™" ื”ืขืจื” ืื™ืฉื™ืช ืœืกื•ืฃ ืขืžื•ื“ ื”ืขื’ืœื” ื”ื’ื‘ืœืช ืจื›ื™ืฉื” ืœื›ืœ ื”ืžื•ืฆืจื™ื ืœืžืงืกื™ืžื•ื 1 ืžื›ืœ ืžื•ืฆืจ ืงื‘ืœืช ืฉื ื”ืžื•ืฆืจ ืœืคื™ ื”-ID ื‘ืขื–ืจืช ืฉื•ืจื˜ืงื•ื“ ื”ื•ืกืคืช ื›ืคืชื•ืจ ื•ื•ืื˜ืกืืค ืœืงื ื™ื™ื” ื‘ืœื•ืค ืืจื›ื™ื•ืŸ ืžื•ืฆืจื™ื ื”ืคื™ื›ื” ืฉืœ ืžื™ืงื•ื“ ื‘ืฆ'ืงืืื•ื˜ ืœืœื ื—ื•ื‘ื” ืžืขื‘ืจ ื™ืฉื™ืจ ืœืฆ'ืงืืื•ื˜ ื‘ืœื—ื™ืชื” ืขืœ ื”ื•ืกืคื” ืœืกืœ (ื“ื™ืœื•ื’ ืขื’ืœื”) ื”ืชืจืื” ืœืงื‘ืœืช ืžืฉืœื•ื— ื—ื™ื ื ื‘ื“ืฃ ืขื’ืœืช ื”ืงื ื™ื•ืช ื’ืจืกื” 1 ื”ืชืจืื” ืœืงื‘ืœืช ืžืฉืœื•ื— ื—ื™ื ื ื‘ื“ืฃ ืขื’ืœืช ื”ืงื ื™ื•ืช ื’ืจืกื” 2 ืงื‘ื™ืขื” ืฉืœ ืžื—ื™ืจ ื”ื–ืžื ื” ืžื™ื ื™ืžืœื™ (ืžื•ืฆื’ ื‘ืขื’ืœื” ื•ื‘ืฆ'ืงืืื•ื˜) ื”ืขื‘ืจืช ืงื•ื“ ื”ืงื•ืคื•ืŸ ืœ-ORDER REVIEW ื”ืขื‘ืจืช ืงื•ื“ ื”ืงื•ืคื•ืŸ ืœ-ORDER REVIEW Kadence WooCommerce Email Designer ืงื‘ื™ืขืช ืคื•ื ื˜ ืืกื™ืกื ื˜ ืœื›ืœ ื”ืžื™ื™ืœ ื‘ืชื•ืกืฃ ืžื•ืฆืจื™ื ืฉืื–ืœื• ืžื”ืžืœืื™ - ื™ื•ืคื™ืขื• ืžืกื•ืžื ื™ื ื‘ืืชืจ, ืื‘ืœ ื‘ืชื—ืชื™ืช ื”ืืจื›ื™ื•ืŸ ื”ื•ืกืคืช ื›ืคืชื•ืจ "ืงื ื” ืขื›ืฉื™ื•" ืœืžื•ืฆืจื™ื ื”ืกืชืจืช ืืคืฉืจื•ื™ื•ืช ืžืฉืœื•ื— ืื—ืจื•ืช ื›ืืฉืจ ืžืฉืœื•ื— ื—ื™ื ื ื–ืžื™ืŸ ืฉื™ื˜ื” 2 ืฉื™ื ื•ื™ ืกื™ืžืŸ ืžื˜ื‘ืข ืฉ"ื— ืœ-ILS ืœื”ืคื•ืš ืกื˜ื˜ื•ืก ื”ื–ืžื ื” ืž"ื”ืฉื”ื™ื™ื”" ืœ"ื”ื•ืฉืœื" ื‘ืื•ืคืŸ ืื•ื˜ื•ืžื˜ื™ ืชืฆื•ื’ืช ื”ื ื—ื” ื‘ืื—ื•ื–ื™ื ืฉื™ื ื•ื™ ื˜ืงืกื˜ "ื‘ื—ืจ ืืคืฉืจื•ื™ื•ืช" ื‘ืžื•ืฆืจื™ื ืขื ื•ืจื™ืืฆื™ื•ืช ื—ื™ืคื•ืฉ ืžื•ืฆืจ ืœืคื™ ืžืง"ื˜ ืฉื™ื ื•ื™ ืชืžื•ื ืช ืžื•ืฆืจ ืœืคื™ ื•ืจื™ืืฆื™ื” ืื—ืจื™ ื‘ื—ื™ืจื” ืฉืœ ื•ืจื™ืืฆื™ื” ืื—ืช ื‘ืžืงืจื” ืฉืœ ื•ืจื™ืืฆื™ื•ืช ืžืจื•ื‘ื•ืช ื”ื ื—ื” ืงื‘ื•ืขื” ืœืคื™ ืชืคืงื™ื“ ื‘ืชืขืจื™ืฃ ืงื‘ื•ืข ื”ื ื—ื” ืงื‘ื•ืขื” ืœืคื™ ืชืคืงื™ื“ ื‘ืื—ื•ื–ื™ื ื”ืกืจื” ืฉืœ ืฉื“ื•ืช ืžืฉืœื•ื— ืœืงื‘ืฆื™ื ื•ื™ืจื˜ื•ืืœื™ื™ื ื”ืกืชืจืช ื˜ืื‘ื™ื ืžืขืžื•ื“ ืžื•ืฆืจ ื”ืฆื’ืช ืชื’ื™ืช "ืื–ืœ ืžื”ืžืœืื™" ื‘ืœื•ืค ื”ืžื•ืฆืจื™ื ืœื”ืคื•ืš ืฉื“ื•ืช ืœ-ืœื ื—ื•ื‘ื” ื‘ืฆ'ืงืืื•ื˜ ืฉื™ื ื•ื™ ื˜ืงืกื˜ "ืื–ืœ ืžื”ืžืœืื™" ืœื•ืจื™ืืฆื™ื•ืช ืฉื™ื ื•ื™ ืฆื‘ืข ื”ื”ื•ื“ืขื•ืช ื”ืžื•ื‘ื ื•ืช ืฉืœ ื•ื•ืงื•ืžืจืก ื”ืฆื’ืช ื”-ID ืฉืœ ืงื˜ื’ื•ืจื™ื•ืช ื”ืžื•ืฆืจื™ื ื‘ืขืžื•ื“ ื”ืงื˜ื’ื•ืจื™ื•ืช ืื–ืœ ืžื”ืžืœืื™- ืฉื™ื ื•ื™ ื”ื”ื•ื“ืขื”, ืชื’ื™ืช ื‘ืœื•ืค, ื”ื•ื“ืขื” ื‘ื“ืฃ ื”ืžื•ืฆืจ ื•ื”ื•ืกืคืช ืื–ืœ ืžื”ืžืœืื™ ืขืœ ื•ืจื™ืืฆื™ื” ื”ื•ืกืคืช ืฉื“ื” ืžื—ื™ืจ ืกืคืง ืœื“ืฃ ื”ืขืจื™ื›ื” ืฉื™ื ื•ื™ ื˜ืงืกื˜ ืื–ืœ ืžื”ืžืœืื™ ืชืžื•ื ื•ืช ืžื•ืฆืจ ื‘ืžืื•ื ืš ืœืฆื“ ืชืžื•ื ืช ื”ืžื•ืฆืจ ื”ืจืืฉื™ืช ื‘ืืœืžื ื˜ื•ืจ ื”ื•ืกืคืช ื›ืคืชื•ืจ ืงื ื” ืขื›ืฉื™ื• ืœืขืžื•ื“ ื”ืžื•ืฆืจ ื‘ืงื ื™ื” ื”ื–ื• ื—ืกื›ืช XX ืฉ''ื— ืœืืคืฉืจ ืœืžื ื”ืœ ื—ื ื•ืช ืœื ืงื•ืช ืงืืฉ ื‘ืจื•ืงื˜ ืœืืคืฉืจ ืจืง ืžื•ืฆืจ ืื—ื“ ื‘ืขื’ืœืช ืงื ื™ื•ืช ื”ื•ืกืคืช ืกื™ืžื•ืŸ ืืจื™ื–ืช ืžืชื ื” ื•ืื–ื•ืจ ืœื”ื•ืจืื•ืช ื‘ืฆ'ืงืืื•ื˜ ืฉืœ ื•ื•ืงื•ืžืจืก ื”ืฆื’ืช ื”ื ื—ื” ื‘ืžืกืคืจ (ื’ื•ื“ืœ ื”ื”ื ื—ื”) ื”ื•ืกืคืช "ืื™ืฉื•ืจ ืชืงื ื•ืŸ" ืœื“ืฃ ื”ืชืฉืœื•ื ื”ืฆื’ืช ืจืฉื™ืžืช ืชื›ื•ื ื•ืช ื”ืžื•ืฆืจ ื‘ืคืจื•ื ื˜ ืฉื™ื ื•ื™ ื›ืžื•ืช ืžื•ืฆืจื™ื ื‘ืฆ'ืงืืื•ื˜ ื‘ื™ื˜ื•ืœ ื”ืฉื“ื•ืช ื‘ืฆ'ืงืืื•ื˜ ืฉื™ื ื•ื™ ื›ื•ืชืจื•ืช ื•ืคืœื™ื™ืกื”ื•ืœื“ืจ ืฉืœ ื”ืฉื“ื•ืช ื‘ืฆ'ืงืืื•ื˜
ื”ื—ืœืคืช ื˜ืงืกื˜ ื‘ืืชืจ (ืžืชืื™ื ื’ื ืœืชืจื’ื•ื ื ืงื•ื“ืชื™) ื”ืกืจืช ืคื•ื ื˜ื™ื ืฉืœ ื’ื•ื’ืœ ืžืชื‘ื ื™ืช KAVA ื‘ื™ื˜ื•ืœ ื”ืชืจืื•ืช ื‘ืžื™ื™ืœ ืขืœ ืขื“ื›ื•ืŸ ื•ื•ืจื“ืคืจืก ืื•ื˜ื•ืžื˜ื™ ื”ื•ืกืคืช ืชืžื™ื›ื” ื‘ืงื‘ืฆื™ VCF ื‘ืืชืจ (ืงื‘ืฆื™ ืื™ืฉ ืงืฉืจ VCARD) - ื—ืœืง 1 ืœื”ื—ืจื™ื’ ืงื˜ื’ื•ืจื™ื” ืžืกื•ื™ืžืช ืžืชื•ืฆืื•ืช ื”ื—ื™ืคื•ืฉ ืฉืœื™ืคืช ืชื•ื›ืŸ ืฉืœ ืจื™ืคื™ื˜ืจ ื™ืฆื™ืจืช ื›ืคืชื•ืจ ืฉื™ืชื•ืฃ ืœืžื•ื‘ื™ื™ืœ ื–ื™ื”ื•ื™ ืืœื• ืืœืžื ื˜ื™ื ื’ื•ืจืžื™ื ืœื’ืœื™ืœื” ืื•ืคืงื™ืช ื”ืชืงื ืช SMTP ื”ื’ื“ืจืช ื˜ืงืกื˜ ื—ืœื•ืคื™ ืœืชืžื•ื ื•ืช ืœืคื™ ืฉื ื”ืงื•ื‘ืฅ ื”ื•ืกืคืช ื”ืชืืžืช ืชื•ืกืคื™ื ืœื’ืจืกืช WP ื”ื•ืกืคืช ื˜ื•ืจ ID ืœืžืฉืชืžืฉื™ื ื”ืกืจืช ื›ื•ืชืจืช ื‘ืชื‘ื ื™ืช HELLO ื”ืกืจืช ืชื’ื•ื‘ื•ืช ื‘ืื•ืคืŸ ื’ื•ืจืฃ ื”ืจืฉืืช SVG ื—ื™ืœื•ืฅ ื”ื—ืœืง ื”ืื—ืจื•ืŸ ืฉืœ ื›ืชื•ื‘ืช ื”ืขืžื•ื“ ื”ื ื•ื›ื—ื™ ื—ื™ืœื•ืฅ ื”ืกืœืื’ ืฉืœ ื”ืขืžื•ื“ ื—ื™ืœื•ืฅ ื›ืชื•ื‘ืช ื”ืขืžื•ื“ ื”ื ื•ื›ื—ื™ ืžื ื™ืขืช ื™ืฆื™ืจืช ืชืžื•ื ื•ืช ืžื•ืงื˜ื ื•ืช ื”ืชืงื ืช SMTP ื”ืฆื’ืช ื”-ID ืฉืœ ืงื˜ื’ื•ืจื™ื•ืช ื‘ืขืžื•ื“ ื”ืงื˜ื’ื•ืจื™ื•ืช ืœื”ื•ืจื™ื“ ืžืชืคืจื™ื˜ ื”ื ื™ื”ื•ืœ ืขืžื•ื“ื™ื ื”ื•ืกืคืช Favicon ืฉื•ื ื” ืœื›ืœ ื“ืฃ ื•ื“ืฃ ื”ื•ืกืคืช ืืคืฉืจื•ืช ืฉื›ืคื•ืœ ืคื•ืกื˜ื™ื ื•ื‘ื›ืœืœ (ืฉืœ ืฉืžืขื•ืŸ ืกื‘ื™ืจ) ื”ืกืจืช ืชื’ื•ื‘ื•ืช ื‘ืื•ืคืŸ ื’ื•ืจืฃ 2 ื‘ืงื ื™ื” ื”ื–ื• ื—ืกื›ืช XX ืฉ''ื— ื—ื™ืคื•ืฉ ืืœืžื ื˜ื™ื ืกื•ืจืจื™ื, ื’ืœื™ืฉื” ืฆื“ื™ืช ื‘ืžื•ื‘ื™ื™ืœ ืฉื™ื˜ื” 1 ืœืืคืฉืจ ืจืง ืžื•ืฆืจ ืื—ื“ ื‘ืขื’ืœืช ืงื ื™ื•ืช ื”ืฆื’ืช ื”ื ื—ื” ื‘ืžืกืคืจ (ื’ื•ื“ืœ ื”ื”ื ื—ื”) ื”ื•ืกืคืช "ืื™ืฉื•ืจ ืชืงื ื•ืŸ" ืœื“ืฃ ื”ืชืฉืœื•ื ืฉื™ื ื•ื™ ืฆื‘ืข ื”ืื“ืžื™ืŸ ืœืคื™ ืกื˜ื˜ื•ืก ื”ืขืžื•ื“/ืคื•ืกื˜ ืฉื™ื ื•ื™ ืฆื‘ืข ืื“ืžื™ืŸ ืœื›ื•ืœื ืœืคื™ ื”ืกื›ืžื•ืช ืฉืœ ื•ื•ืจื“ืคืจืก ืชืฆื•ื’ืช ื›ืžื•ืช ืฆืคื™ื•ืช ืžืชื•ืš ื”ื“ืฉื‘ื•ืจื“ ืฉืœ ื•ื•ืจื“ืคืจืก ื”ืฆื’ืช ืกื•ื’ ืžืฉืชืžืฉ ื‘ืคืจื•ื ื˜ ื’ืœื™ืœื” ืื™ืŸ ืกื•ืคื™ืช ื‘ืžื“ื™ื” ืฉืคืช ื”ืžืžืฉืง ืฉืœ ืืœืžื ื˜ื•ืจ ืชื•ืืžืช ืœืฉืคืช ื”ืžืฉืชืžืฉ ืื•ืจืš ืชืงืฆื™ืจ ืžื•ืชืื ืื™ืฉื™ืช
ื”ื•ื“ืขืช ืฉื’ื™ืื” ืžื•ืชืืžืช ืื™ืฉื™ืช ื‘ื˜ืคืกื™ื ืœื”ืคื•ืš ื›ืœ ืกืงืฉืŸ/ืขืžื•ื“ื” ืœืงืœื™ืงื‘ื™ืœื™ืช (ืœื—ื™ืฆื”) - ืฉื™ื˜ื” 1 ืœื”ืคื•ืš ื›ืœ ืกืงืฉืŸ/ืขืžื•ื“ื” ืœืงืœื™ืงื‘ื™ืœื™ืช (ืœื—ื™ืฆื”) - ืฉื™ื˜ื” 2 ืฉื™ื ื•ื™ ื”ื’ื‘ืœืช ื”ื–ื™ื›ืจื•ืŸ ื‘ืฉืจืช ื”ื•ืกืคืช ืœื™ื ืง ืœื”ื•ืจื“ืช ืžืกืžืš ืžื”ืืชืจ ื‘ืžื™ื™ืœ ื”ื ืฉืœื— ืœืœืงื•ื— ืœื”ืคื•ืš ื›ืœ ืกืงืฉืŸ/ืขืžื•ื“ื” ืœืงืœื™ืงื‘ื™ืœื™ืช (ืœื—ื™ืฆื”) - ืฉื™ื˜ื” 3 ื™ืฆื™ืจืช ื›ืคืชื•ืจ ืฉื™ืชื•ืฃ ืœืžื•ื‘ื™ื™ืœ ืคืชื™ื—ืช ื“ืฃ ืชื•ื“ื” ื‘ื˜ืื‘ ื—ื“ืฉ ื‘ื–ืžืŸ ืฉืœื™ื—ืช ื˜ื•ืคืก ืืœืžื ื˜ื•ืจ - ื˜ื•ืคืก ื‘ื•ื“ื“ ื‘ื“ืฃ ืคืชื™ื—ืช ื“ืฃ ืชื•ื“ื” ื‘ื˜ืื‘ ื—ื“ืฉ ื‘ื–ืžืŸ ืฉืœื™ื—ืช ื˜ื•ืคืก ืืœืžื ื˜ื•ืจ - ื˜ืคืกื™ื ืžืจื•ื‘ื™ื ื‘ื“ืฃ ื‘ื™ื™ ื‘ื™ื™ ืœืืจื™ืง ื’'ื•ื ืก (ื—ืกื™ืžืช ืกืคืื ื‘ื˜ืคืกื™ื) ื–ื™ื”ื•ื™ ืืœื• ืืœืžื ื˜ื™ื ื’ื•ืจืžื™ื ืœื’ืœื™ืœื” ืื•ืคืงื™ืช ืœื™ื™ื‘ืœื™ื ืžืจื—ืคื™ื ื‘ื˜ืคืกื™ ืืœืžื ื˜ื•ืจ ื™ืฆื™ืจืช ืื ื™ืžืฆื™ื” ืฉืœ "ื—ื“ืฉื•ืช ืจืฆื•ืช" ื‘ื’'ื˜ (marquee) ืฉื™ื ื•ื™ ืคื•ื ื˜ ื‘ืื•ืคืŸ ื“ื™ื ืืžื™ ื‘ื’'ื˜ ืคื•ื ืงืฆื™ื” ืฉืฉื•ืœืคืช ืฉื“ื•ืช ืžื˜ื ืžืชื•ืš JET ื•ืžืืคืฉืจืช ืœืฉื™ื ื”ื›ืœ ื‘ืชื•ืš ืฉื“ื” SELECT ื‘ื˜ื•ืคืก ืืœืžื ื˜ื•ืจ ื”ื•ืกืคืช ืงื• ื‘ื™ืŸ ืจื›ื™ื‘ื™ ื”ืชืคืจื™ื˜ ื‘ื“ืกืงื˜ื•ืค ื•ืœื“ืฆื™ื” ืœืžืกืคืจื™ ื˜ืœืคื•ืŸ ื‘ื˜ืคืกื™ ืืœืžื ื˜ื•ืจ ื—ื™ื‘ื•ืจ ืฉื ื™ ืฉื“ื•ืช ื‘ื˜ื•ืคืก ืœืฉื“ื” ืื—ื“ ืฉืื™ื‘ืช ื ืชื•ืŸ ืžืชื•ืš ื›ืชื•ื‘ืช ื”-URL ืœืชื•ืš ืฉื“ื” ื‘ื˜ื•ืคืก ื•ืงื™ื“ื•ื“ ืœืขื‘ืจื™ืช ืžื“ื™ื” ืงื•ื•ืจื™ ืœืžื•ื‘ื™ื™ืœ Media Query ืชืžื•ื ื•ืช ืžื•ืฆืจ ื‘ืžืื•ื ืš ืœืฆื“ ืชืžื•ื ืช ื”ืžื•ืฆืจ ื”ืจืืฉื™ืช ื‘ืืœืžื ื˜ื•ืจ ื”ืฆื’ืช ืชืืจื™ืš ืขื‘ืจื™ ืคื•ืจืžื˜ ืชืืจื™ืš ืžื•ืชืื ืื™ืฉื™ืช ืชื™ืงื•ืŸ ืฉื“ื” ืชืืจื™ืš ื‘ื˜ื•ืคืก ืืœืžื ื˜ื•ืจ ื‘ืžื•ื‘ื™ื™ืœ ืฉืื™ื‘ืช ืคืจืžื˜ืจ ืžืชื•ืš ื”ื›ืชื•ื‘ืช ื•ื”ื–ื ืชื• ืœืชื•ืš ืฉื“ื” ื‘ื˜ื•ืคืก (PARAMETER, URL, INPUT) ืขืžื•ื“ื•ืช ื‘ืจื•ื—ื‘ ืžืœื ื‘ืืœืžื ื˜ื•ืจ ืขืžื•ื“ื” ื“ื‘ื™ืงื” ื‘ืชื•ืš ืืœืžื ื˜ื•ืจ ื™ืฆื™ืจืช "ืฆืœ" ืื•ืžื ื•ืชื™ ืงื•ื“ ืœืกื•ื•ื™ืฆ'ืจ, ืฉื ื™ ื›ืคืชื•ืจื™ื ื•ืฉื ื™ ืืœืžื ื˜ื™ื ืกืงืจื™ืคื˜ ืœืกื’ื™ืจืช ืคื•ืคืืค ืฉืœ ืชืคืจื™ื˜ ืœืื—ืจ ืœื—ื™ืฆื” ืขืœ ืื—ื“ ื”ืขืžื•ื“ื™ื ื”ื•ืกืคืช ื›ืคืชื•ืจ ืงืจื ืขื•ื“ ืฉืคืช ื”ืžืžืฉืง ืฉืœ ืืœืžื ื˜ื•ืจ ืชื•ืืžืช ืœืฉืคืช ื”ืžืฉืชืžืฉ ืœื”ืจื™ืฅ ืงื•ื“ JS ืื—ืจื™ ืฉื˜ื•ืคืก ืืœืžื ื˜ื•ืจ ื ืฉืœื— ื‘ื”ืฆืœื—ื” ืžืฆื‘ ืžืžื•ืจื›ื– ืœืงืจื•ืกืœืช ืชืžื•ื ื•ืช ืฉืœ ืืœืžื ื˜ื•ืจ ืœื™ื™ื‘ืœื™ื ืžืจื—ืคื™ื ื‘ื˜ืคืกื™ ืคืœื•ืื ื˜ืคื•ืจืžืก